Return error status from bfd_elf_discard_info.
bfd/ * elflink.c (bfd_elf_discard_info): Return int error status. * stabs.c (_bfd_discard_section_stabs): Comment typo fix. * bfd-in.h (bfd_elf_discard_info): Updata prototype. * bfd-in2.h: Regenerate. ld/ * emultempl/aarch64elf.em (gld${EMULATION_NAME}_after_allocation): Handle error status from bfd_elf_discard_info. * emultempl/armelf.em: Likewise. * emultempl/elf32.em: Likewise. * emultempl/hppaelf.em: Likewise. * emultempl/metagelf.em: Likewise. * emultempl/nios2elf.em: Likewise. * emultempl/ppc64elf.em: Likewise. * emultempl/tic6xdsbt.em: Likewise. * emultempl/vms.em: Likewise.
This commit is contained in:
parent
1e53931944
commit
759388538d
|
@ -1,3 +1,10 @@
|
||||||
|
2014-08-18 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* elflink.c (bfd_elf_discard_info): Return int error status.
|
||||||
|
* stabs.c (_bfd_discard_section_stabs): Comment typo fix.
|
||||||
|
* bfd-in.h (bfd_elf_discard_info): Updata prototype.
|
||||||
|
* bfd-in2.h: Regenerate.
|
||||||
|
|
||||||
2014-08-14 Alan Modra <amodra@gmail.com>
|
2014-08-14 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* peXXigen.c (pe_print_reloc): Protect against access past end
|
* peXXigen.c (pe_print_reloc): Protect against access past end
|
||||||
|
|
|
@ -658,7 +658,7 @@ extern int bfd_elf_get_dyn_lib_class
|
||||||
(bfd *);
|
(bfd *);
|
||||||
extern struct bfd_link_needed_list *bfd_elf_get_runpath_list
|
extern struct bfd_link_needed_list *bfd_elf_get_runpath_list
|
||||||
(bfd *, struct bfd_link_info *);
|
(bfd *, struct bfd_link_info *);
|
||||||
extern bfd_boolean bfd_elf_discard_info
|
extern int bfd_elf_discard_info
|
||||||
(bfd *, struct bfd_link_info *);
|
(bfd *, struct bfd_link_info *);
|
||||||
extern unsigned int _bfd_elf_default_action_discarded
|
extern unsigned int _bfd_elf_default_action_discarded
|
||||||
(struct bfd_section *);
|
(struct bfd_section *);
|
||||||
|
|
|
@ -665,7 +665,7 @@ extern int bfd_elf_get_dyn_lib_class
|
||||||
(bfd *);
|
(bfd *);
|
||||||
extern struct bfd_link_needed_list *bfd_elf_get_runpath_list
|
extern struct bfd_link_needed_list *bfd_elf_get_runpath_list
|
||||||
(bfd *, struct bfd_link_info *);
|
(bfd *, struct bfd_link_info *);
|
||||||
extern bfd_boolean bfd_elf_discard_info
|
extern int bfd_elf_discard_info
|
||||||
(bfd *, struct bfd_link_info *);
|
(bfd *, struct bfd_link_info *);
|
||||||
extern unsigned int _bfd_elf_default_action_discarded
|
extern unsigned int _bfd_elf_default_action_discarded
|
||||||
(struct bfd_section *);
|
(struct bfd_section *);
|
||||||
|
|
|
@ -12629,21 +12629,21 @@ bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Discard unneeded references to discarded sections.
|
/* Discard unneeded references to discarded sections.
|
||||||
Returns TRUE if any section's size was changed. */
|
Returns -1 on error, 1 if any section's size was changed, 0 if
|
||||||
/* This function assumes that the relocations are in sorted order,
|
nothing changed. This function assumes that the relocations are in
|
||||||
which is true for all known assemblers. */
|
sorted order, which is true for all known assemblers. */
|
||||||
|
|
||||||
bfd_boolean
|
int
|
||||||
bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
|
bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
|
||||||
{
|
{
|
||||||
struct elf_reloc_cookie cookie;
|
struct elf_reloc_cookie cookie;
|
||||||
asection *o;
|
asection *o;
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
bfd_boolean ret = FALSE;
|
int changed = 0;
|
||||||
|
|
||||||
if (info->traditional_format
|
if (info->traditional_format
|
||||||
|| !is_elf_hash_table (info->hash))
|
|| !is_elf_hash_table (info->hash))
|
||||||
return FALSE;
|
return 0;
|
||||||
|
|
||||||
o = bfd_get_section_by_name (output_bfd, ".stab");
|
o = bfd_get_section_by_name (output_bfd, ".stab");
|
||||||
if (o != NULL)
|
if (o != NULL)
|
||||||
|
@ -12662,13 +12662,13 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!init_reloc_cookie_for_section (&cookie, info, i))
|
if (!init_reloc_cookie_for_section (&cookie, info, i))
|
||||||
return FALSE;
|
return -1;
|
||||||
|
|
||||||
if (_bfd_discard_section_stabs (abfd, i,
|
if (_bfd_discard_section_stabs (abfd, i,
|
||||||
elf_section_data (i)->sec_info,
|
elf_section_data (i)->sec_info,
|
||||||
bfd_elf_reloc_symbol_deleted_p,
|
bfd_elf_reloc_symbol_deleted_p,
|
||||||
&cookie))
|
&cookie))
|
||||||
ret = TRUE;
|
changed = 1;
|
||||||
|
|
||||||
fini_reloc_cookie_for_section (&cookie, i);
|
fini_reloc_cookie_for_section (&cookie, i);
|
||||||
}
|
}
|
||||||
|
@ -12692,13 +12692,13 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!init_reloc_cookie_for_section (&cookie, info, i))
|
if (!init_reloc_cookie_for_section (&cookie, info, i))
|
||||||
return FALSE;
|
return -1;
|
||||||
|
|
||||||
_bfd_elf_parse_eh_frame (abfd, info, i, &cookie);
|
_bfd_elf_parse_eh_frame (abfd, info, i, &cookie);
|
||||||
if (_bfd_elf_discard_section_eh_frame (abfd, info, i,
|
if (_bfd_elf_discard_section_eh_frame (abfd, info, i,
|
||||||
bfd_elf_reloc_symbol_deleted_p,
|
bfd_elf_reloc_symbol_deleted_p,
|
||||||
&cookie))
|
&cookie))
|
||||||
ret = TRUE;
|
changed = 1;
|
||||||
|
|
||||||
fini_reloc_cookie_for_section (&cookie, i);
|
fini_reloc_cookie_for_section (&cookie, i);
|
||||||
}
|
}
|
||||||
|
@ -12717,10 +12717,10 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
|
||||||
if (bed->elf_backend_discard_info != NULL)
|
if (bed->elf_backend_discard_info != NULL)
|
||||||
{
|
{
|
||||||
if (!init_reloc_cookie (&cookie, info, abfd))
|
if (!init_reloc_cookie (&cookie, info, abfd))
|
||||||
return FALSE;
|
return -1;
|
||||||
|
|
||||||
if ((*bed->elf_backend_discard_info) (abfd, &cookie, info))
|
if ((*bed->elf_backend_discard_info) (abfd, &cookie, info))
|
||||||
ret = TRUE;
|
changed = 1;
|
||||||
|
|
||||||
fini_reloc_cookie (&cookie, abfd);
|
fini_reloc_cookie (&cookie, abfd);
|
||||||
}
|
}
|
||||||
|
@ -12729,9 +12729,9 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
|
||||||
if (info->eh_frame_hdr
|
if (info->eh_frame_hdr
|
||||||
&& !info->relocatable
|
&& !info->relocatable
|
||||||
&& _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
|
&& _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
|
||||||
ret = TRUE;
|
changed = 1;
|
||||||
|
|
||||||
return ret;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
bfd_boolean
|
bfd_boolean
|
||||||
|
|
|
@ -536,7 +536,7 @@ _bfd_discard_section_stabs (bfd *abfd,
|
||||||
link, so we should just ignore them. */
|
link, so we should just ignore them. */
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* We should have initialized our data in _bfd_link_stab_sections.
|
/* We should have initialized our data in _bfd_link_section_stabs.
|
||||||
If there was some bizarre error reading the string sections, though,
|
If there was some bizarre error reading the string sections, though,
|
||||||
we might not have. Bail rather than asserting. */
|
we might not have. Bail rather than asserting. */
|
||||||
if (psecinfo == NULL)
|
if (psecinfo == NULL)
|
||||||
|
|
13
ld/ChangeLog
13
ld/ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
2014-08-18 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* emultempl/aarch64elf.em (gld${EMULATION_NAME}_after_allocation):
|
||||||
|
Handle error status from bfd_elf_discard_info.
|
||||||
|
* emultempl/armelf.em: Likewise.
|
||||||
|
* emultempl/elf32.em: Likewise.
|
||||||
|
* emultempl/hppaelf.em: Likewise.
|
||||||
|
* emultempl/metagelf.em: Likewise.
|
||||||
|
* emultempl/nios2elf.em: Likewise.
|
||||||
|
* emultempl/ppc64elf.em: Likewise.
|
||||||
|
* emultempl/tic6xdsbt.em: Likewise.
|
||||||
|
* emultempl/vms.em: Likewise.
|
||||||
|
|
||||||
2014-08-14 Alan Modra <amodra@gmail.com>
|
2014-08-14 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR 16563
|
PR 16563
|
||||||
|
|
|
@ -219,20 +219,27 @@ build_section_lists (lang_statement_union_type *statement)
|
||||||
static void
|
static void
|
||||||
gld${EMULATION_NAME}_after_allocation (void)
|
gld${EMULATION_NAME}_after_allocation (void)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* bfd_elf32_discard_info just plays with debugging sections,
|
/* bfd_elf32_discard_info just plays with debugging sections,
|
||||||
ie. doesn't affect any code, so we can delay resizing the
|
ie. doesn't affect any code, so we can delay resizing the
|
||||||
sections. It's likely we'll resize everything in the process of
|
sections. It's likely we'll resize everything in the process of
|
||||||
adding stubs. */
|
adding stubs. */
|
||||||
if (bfd_elf_discard_info (link_info.output_bfd, & link_info))
|
ret = bfd_elf_discard_info (link_info.output_bfd, & link_info);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
einfo ("%X%P: .eh_frame/.stab edit: %E\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (ret > 0)
|
||||||
need_laying_out = 1;
|
need_laying_out = 1;
|
||||||
|
|
||||||
/* If generating a relocatable output file, then we don't
|
/* If generating a relocatable output file, then we don't
|
||||||
have to examine the relocs. */
|
have to examine the relocs. */
|
||||||
if (stub_file != NULL && !link_info.relocatable)
|
if (stub_file != NULL && !link_info.relocatable)
|
||||||
{
|
{
|
||||||
int ret = elf${ELFSIZE}_aarch64_setup_section_lists (link_info.output_bfd,
|
ret = elf${ELFSIZE}_aarch64_setup_section_lists (link_info.output_bfd,
|
||||||
& link_info);
|
&link_info);
|
||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
{
|
{
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
|
@ -271,6 +271,8 @@ compare_output_sec_vma (const void *a, const void *b)
|
||||||
static void
|
static void
|
||||||
gld${EMULATION_NAME}_after_allocation (void)
|
gld${EMULATION_NAME}_after_allocation (void)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!link_info.relocatable)
|
if (!link_info.relocatable)
|
||||||
{
|
{
|
||||||
/* Build a sorted list of input text sections, then use that to process
|
/* Build a sorted list of input text sections, then use that to process
|
||||||
|
@ -325,15 +327,20 @@ gld${EMULATION_NAME}_after_allocation (void)
|
||||||
ie. doesn't affect any code, so we can delay resizing the
|
ie. doesn't affect any code, so we can delay resizing the
|
||||||
sections. It's likely we'll resize everything in the process of
|
sections. It's likely we'll resize everything in the process of
|
||||||
adding stubs. */
|
adding stubs. */
|
||||||
if (bfd_elf_discard_info (link_info.output_bfd, & link_info))
|
ret = bfd_elf_discard_info (link_info.output_bfd, & link_info);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
einfo ("%X%P: .eh_frame/.stab edit: %E\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (ret > 0)
|
||||||
need_laying_out = 1;
|
need_laying_out = 1;
|
||||||
|
|
||||||
/* If generating a relocatable output file, then we don't
|
/* If generating a relocatable output file, then we don't
|
||||||
have to examine the relocs. */
|
have to examine the relocs. */
|
||||||
if (stub_file != NULL && !link_info.relocatable)
|
if (stub_file != NULL && !link_info.relocatable)
|
||||||
{
|
{
|
||||||
int ret = elf32_arm_setup_section_lists (link_info.output_bfd, & link_info);
|
ret = elf32_arm_setup_section_lists (link_info.output_bfd, &link_info);
|
||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
{
|
{
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
|
@ -1942,9 +1942,12 @@ fragment <<EOF
|
||||||
static void
|
static void
|
||||||
gld${EMULATION_NAME}_after_allocation (void)
|
gld${EMULATION_NAME}_after_allocation (void)
|
||||||
{
|
{
|
||||||
bfd_boolean need_layout = bfd_elf_discard_info (link_info.output_bfd,
|
int need_layout = bfd_elf_discard_info (link_info.output_bfd, &link_info);
|
||||||
&link_info);
|
|
||||||
gld${EMULATION_NAME}_map_segments (need_layout);
|
if (need_layout < 0)
|
||||||
|
einfo ("%X%P: .eh_frame/.stab edit: %E\n");
|
||||||
|
else
|
||||||
|
gld${EMULATION_NAME}_map_segments (need_layout);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -242,20 +242,26 @@ build_section_lists (lang_statement_union_type *statement)
|
||||||
static void
|
static void
|
||||||
gld${EMULATION_NAME}_after_allocation (void)
|
gld${EMULATION_NAME}_after_allocation (void)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* bfd_elf_discard_info just plays with data and debugging sections,
|
/* bfd_elf_discard_info just plays with data and debugging sections,
|
||||||
ie. doesn't affect code size, so we can delay resizing the
|
ie. doesn't affect code size, so we can delay resizing the
|
||||||
sections. It's likely we'll resize everything in the process of
|
sections. It's likely we'll resize everything in the process of
|
||||||
adding stubs. */
|
adding stubs. */
|
||||||
if (bfd_elf_discard_info (link_info.output_bfd, &link_info))
|
ret = bfd_elf_discard_info (link_info.output_bfd, &link_info);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
einfo ("%X%P: .eh_frame/.stab edit: %E\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (ret > 0)
|
||||||
need_laying_out = 1;
|
need_laying_out = 1;
|
||||||
|
|
||||||
/* If generating a relocatable output file, then we don't
|
/* If generating a relocatable output file, then we don't
|
||||||
have to examine the relocs. */
|
have to examine the relocs. */
|
||||||
if (stub_file != NULL && !link_info.relocatable)
|
if (stub_file != NULL && !link_info.relocatable)
|
||||||
{
|
{
|
||||||
int ret = elf32_hppa_setup_section_lists (link_info.output_bfd,
|
ret = elf32_hppa_setup_section_lists (link_info.output_bfd, &link_info);
|
||||||
&link_info);
|
|
||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
{
|
{
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
|
@ -219,20 +219,26 @@ build_section_lists (lang_statement_union_type *statement)
|
||||||
static void
|
static void
|
||||||
gld${EMULATION_NAME}_after_allocation (void)
|
gld${EMULATION_NAME}_after_allocation (void)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* bfd_elf_discard_info just plays with data and debugging sections,
|
/* bfd_elf_discard_info just plays with data and debugging sections,
|
||||||
ie. doesn't affect code size, so we can delay resizing the
|
ie. doesn't affect code size, so we can delay resizing the
|
||||||
sections. It's likely we'll resize everything in the process of
|
sections. It's likely we'll resize everything in the process of
|
||||||
adding stubs. */
|
adding stubs. */
|
||||||
if (bfd_elf_discard_info (link_info.output_bfd, &link_info))
|
ret = bfd_elf_discard_info (link_info.output_bfd, &link_info);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
einfo ("%X%P: .eh_frame/.stab edit: %E\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (ret > 0)
|
||||||
need_laying_out = 1;
|
need_laying_out = 1;
|
||||||
|
|
||||||
/* If generating a relocatable output file, then we don't
|
/* If generating a relocatable output file, then we don't
|
||||||
have to examine the relocs. */
|
have to examine the relocs. */
|
||||||
if (stub_file != NULL && !link_info.relocatable)
|
if (stub_file != NULL && !link_info.relocatable)
|
||||||
{
|
{
|
||||||
int ret = elf_metag_setup_section_lists (link_info.output_bfd,
|
ret = elf_metag_setup_section_lists (link_info.output_bfd, &link_info);
|
||||||
&link_info);
|
|
||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
{
|
{
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
|
@ -236,20 +236,26 @@ build_section_lists (lang_statement_union_type *statement)
|
||||||
static void
|
static void
|
||||||
gld${EMULATION_NAME}_after_allocation (void)
|
gld${EMULATION_NAME}_after_allocation (void)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* bfd_elf_discard_info just plays with data and debugging sections,
|
/* bfd_elf_discard_info just plays with data and debugging sections,
|
||||||
ie. doesn't affect code size, so we can delay resizing the
|
ie. doesn't affect code size, so we can delay resizing the
|
||||||
sections. It's likely we'll resize everything in the process of
|
sections. It's likely we'll resize everything in the process of
|
||||||
adding stubs. */
|
adding stubs. */
|
||||||
if (bfd_elf_discard_info (link_info.output_bfd, &link_info))
|
ret = bfd_elf_discard_info (link_info.output_bfd, &link_info);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
einfo ("%X%P: .eh_frame/.stab edit: %E\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (ret > 0)
|
||||||
need_laying_out = 1;
|
need_laying_out = 1;
|
||||||
|
|
||||||
/* If generating a relocatable output file, then we don't
|
/* If generating a relocatable output file, then we don't
|
||||||
have to examine the relocs. */
|
have to examine the relocs. */
|
||||||
if (stub_file != NULL && !link_info.relocatable && RELAXATION_ENABLED)
|
if (stub_file != NULL && !link_info.relocatable && RELAXATION_ENABLED)
|
||||||
{
|
{
|
||||||
int ret = nios2_elf32_setup_section_lists (link_info.output_bfd,
|
ret = nios2_elf32_setup_section_lists (link_info.output_bfd, &link_info);
|
||||||
&link_info);
|
|
||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
{
|
{
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
|
@ -458,18 +458,26 @@ build_section_lists (lang_statement_union_type *statement)
|
||||||
static void
|
static void
|
||||||
gld${EMULATION_NAME}_after_allocation (void)
|
gld${EMULATION_NAME}_after_allocation (void)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* bfd_elf_discard_info just plays with data and debugging sections,
|
/* bfd_elf_discard_info just plays with data and debugging sections,
|
||||||
ie. doesn't affect code size, so we can delay resizing the
|
ie. doesn't affect code size, so we can delay resizing the
|
||||||
sections. It's likely we'll resize everything in the process of
|
sections. It's likely we'll resize everything in the process of
|
||||||
adding stubs. */
|
adding stubs. */
|
||||||
if (bfd_elf_discard_info (link_info.output_bfd, &link_info))
|
ret = bfd_elf_discard_info (link_info.output_bfd, &link_info);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
einfo ("%X%P: .eh_frame/.stab edit: %E\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (ret > 0)
|
||||||
need_laying_out = 1;
|
need_laying_out = 1;
|
||||||
|
|
||||||
/* If generating a relocatable output file, then we don't have any
|
/* If generating a relocatable output file, then we don't have any
|
||||||
stubs. */
|
stubs. */
|
||||||
if (stub_file != NULL && !link_info.relocatable)
|
if (stub_file != NULL && !link_info.relocatable)
|
||||||
{
|
{
|
||||||
int ret = ppc64_elf_setup_section_lists (&link_info);
|
ret = ppc64_elf_setup_section_lists (&link_info);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
einfo ("%X%P: can not size stub section: %E\n");
|
einfo ("%X%P: can not size stub section: %E\n");
|
||||||
else if (ret > 0)
|
else if (ret > 0)
|
||||||
|
|
|
@ -95,6 +95,7 @@ static void
|
||||||
gld${EMULATION_NAME}_after_allocation (void)
|
gld${EMULATION_NAME}_after_allocation (void)
|
||||||
{
|
{
|
||||||
int layout_changed = 0;
|
int layout_changed = 0;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!link_info.relocatable)
|
if (!link_info.relocatable)
|
||||||
{
|
{
|
||||||
|
@ -149,7 +150,13 @@ gld${EMULATION_NAME}_after_allocation (void)
|
||||||
/* bfd_elf32_discard_info just plays with debugging sections,
|
/* bfd_elf32_discard_info just plays with debugging sections,
|
||||||
ie. doesn't affect any code, so we can delay resizing the
|
ie. doesn't affect any code, so we can delay resizing the
|
||||||
sections. */
|
sections. */
|
||||||
if (bfd_elf_discard_info (link_info.output_bfd, & link_info))
|
ret = bfd_elf_discard_info (link_info.output_bfd, & link_info);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
einfo ("%X%P: .eh_frame/.stab edit: %E\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (ret > 0)
|
||||||
layout_changed = 1;
|
layout_changed = 1;
|
||||||
|
|
||||||
gld${EMULATION_NAME}_map_segments (layout_changed);
|
gld${EMULATION_NAME}_map_segments (layout_changed);
|
||||||
|
|
|
@ -207,9 +207,12 @@ gld${EMULATION_NAME}_before_allocation (void)
|
||||||
static void
|
static void
|
||||||
gld${EMULATION_NAME}_after_allocation (void)
|
gld${EMULATION_NAME}_after_allocation (void)
|
||||||
{
|
{
|
||||||
bfd_boolean need_layout = bfd_elf_discard_info (link_info.output_bfd,
|
int need_layout = bfd_elf_discard_info (link_info.output_bfd, &link_info);
|
||||||
&link_info);
|
|
||||||
gld${EMULATION_NAME}_map_segments (need_layout);
|
if (need_layout < 0)
|
||||||
|
einfo ("%X%P: .eh_frame/.stab edit: %E\n");
|
||||||
|
else
|
||||||
|
gld${EMULATION_NAME}_map_segments (need_layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue