bfd/
* elflink.c (fix_syms, _bfd_elf_fix_excluded_sec_syms): Move to.. * linker.c (fix_syms, _bfd_fix_excluded_sec_syms): ..here. * bfd-in.h (_bfd_fix_excluded_sec_syms): Rename. * bfd-in2.h: Regenerate. ld/ * ldemul.c (ldemul_finish): Call ld_emulation->finish unconditionally. (finish_default): New function. * ldemul.h (finish_default): Declare. * emultempl/aix.em (gld*_before_allocation): Call before_allocation_default rather than strip_excluded_output_sections. (ld_*_emulation): Init finish field to finish_default. * emultempl/armcoff.em: Likewise. * emultempl/beos.em: Likewise. * emultempl/elf32.em: Likewise. * emultempl/generic.em: Likewise. * emultempl/gld960.em: Likewise. * emultempl/gld960c.em: Likewise. * emultempl/hppaelf.em: Likewise. * emultempl/linux.em: Likewise. * emultempl/lnk960.em: Likewise. * emultempl/m68kcoff.em: Likewise. * emultempl/mmo.em: Likewise. * emultempl/pe.em: Likewise. * emultempl/ppc64elf.em: Likewise. * emultempl/sunos.em: Likewise. * emultempl/ticoff.em: Likewise. * emultempl/vanilla.em: Likewise.
This commit is contained in:
parent
90b263f311
commit
1e035701d6
25 changed files with 104 additions and 64 deletions
|
@ -1,3 +1,10 @@
|
|||
2005-08-04 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* elflink.c (fix_syms, _bfd_elf_fix_excluded_sec_syms): Move to..
|
||||
* linker.c (fix_syms, _bfd_fix_excluded_sec_syms): ..here.
|
||||
* bfd-in.h (_bfd_fix_excluded_sec_syms): Rename.
|
||||
* bfd-in2.h: Regenerate.
|
||||
|
||||
2005-08-03 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elfxx-ia64.c (elfNN_ia64_relax_section): Resize .rela.got
|
||||
|
|
|
@ -708,7 +708,7 @@ extern void _bfd_elf_provide_symbol
|
|||
extern void _bfd_elf_provide_section_bound_symbols
|
||||
(struct bfd_link_info *, struct bfd_section *, const char *, const char *);
|
||||
|
||||
extern void _bfd_elf_fix_excluded_sec_syms
|
||||
extern void _bfd_fix_excluded_sec_syms
|
||||
(bfd *, struct bfd_link_info *);
|
||||
|
||||
extern bfd_boolean bfd_m68k_elf32_create_embedded_relocs
|
||||
|
|
|
@ -715,7 +715,7 @@ extern void _bfd_elf_provide_symbol
|
|||
extern void _bfd_elf_provide_section_bound_symbols
|
||||
(struct bfd_link_info *, struct bfd_section *, const char *, const char *);
|
||||
|
||||
extern void _bfd_elf_fix_excluded_sec_syms
|
||||
extern void _bfd_fix_excluded_sec_syms
|
||||
(bfd *, struct bfd_link_info *);
|
||||
|
||||
extern bfd_boolean bfd_m68k_elf32_create_embedded_relocs
|
||||
|
|
|
@ -9890,39 +9890,6 @@ _bfd_elf_provide_section_bound_symbols (struct bfd_link_info *info,
|
|||
_bfd_elf_provide_symbol (info, end, val, sec);
|
||||
}
|
||||
|
||||
/* Convert symbols in excluded output sections to absolute. */
|
||||
|
||||
static bfd_boolean
|
||||
fix_syms (struct bfd_link_hash_entry *h, void *data)
|
||||
{
|
||||
bfd *obfd = (bfd *) data;
|
||||
|
||||
if (h->type == bfd_link_hash_warning)
|
||||
h = h->u.i.link;
|
||||
|
||||
if (h->type == bfd_link_hash_defined
|
||||
|| h->type == bfd_link_hash_defweak)
|
||||
{
|
||||
asection *s = h->u.def.section;
|
||||
if (s != NULL
|
||||
&& s->output_section != NULL
|
||||
&& (s->output_section->flags & SEC_EXCLUDE) != 0
|
||||
&& bfd_section_removed_from_list (obfd, s->output_section))
|
||||
{
|
||||
h->u.def.value += s->output_offset + s->output_section->vma;
|
||||
h->u.def.section = bfd_abs_section_ptr;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
_bfd_elf_fix_excluded_sec_syms (bfd *obfd, struct bfd_link_info *info)
|
||||
{
|
||||
bfd_link_hash_traverse (info->hash, fix_syms, obfd);
|
||||
}
|
||||
|
||||
bfd_boolean
|
||||
_bfd_elf_common_definition (Elf_Internal_Sym *sym)
|
||||
{
|
||||
|
|
33
bfd/linker.c
33
bfd/linker.c
|
@ -3071,3 +3071,36 @@ _bfd_generic_section_already_linked (bfd *abfd, asection *sec)
|
|||
/* This is the first section with this name. Record it. */
|
||||
bfd_section_already_linked_table_insert (already_linked_list, sec);
|
||||
}
|
||||
|
||||
/* Convert symbols in excluded output sections to absolute. */
|
||||
|
||||
static bfd_boolean
|
||||
fix_syms (struct bfd_link_hash_entry *h, void *data)
|
||||
{
|
||||
bfd *obfd = (bfd *) data;
|
||||
|
||||
if (h->type == bfd_link_hash_warning)
|
||||
h = h->u.i.link;
|
||||
|
||||
if (h->type == bfd_link_hash_defined
|
||||
|| h->type == bfd_link_hash_defweak)
|
||||
{
|
||||
asection *s = h->u.def.section;
|
||||
if (s != NULL
|
||||
&& s->output_section != NULL
|
||||
&& (s->output_section->flags & SEC_EXCLUDE) != 0
|
||||
&& bfd_section_removed_from_list (obfd, s->output_section))
|
||||
{
|
||||
h->u.def.value += s->output_offset + s->output_section->vma;
|
||||
h->u.def.section = bfd_abs_section_ptr;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
_bfd_fix_excluded_sec_syms (bfd *obfd, struct bfd_link_info *info)
|
||||
{
|
||||
bfd_link_hash_traverse (info->hash, fix_syms, obfd);
|
||||
}
|
||||
|
|
25
ld/ChangeLog
25
ld/ChangeLog
|
@ -1,3 +1,28 @@
|
|||
2005-08-04 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* ldemul.c (ldemul_finish): Call ld_emulation->finish unconditionally.
|
||||
(finish_default): New function.
|
||||
* ldemul.h (finish_default): Declare.
|
||||
* emultempl/aix.em (gld*_before_allocation): Call
|
||||
before_allocation_default rather than strip_excluded_output_sections.
|
||||
(ld_*_emulation): Init finish field to finish_default.
|
||||
* emultempl/armcoff.em: Likewise.
|
||||
* emultempl/beos.em: Likewise.
|
||||
* emultempl/elf32.em: Likewise.
|
||||
* emultempl/generic.em: Likewise.
|
||||
* emultempl/gld960.em: Likewise.
|
||||
* emultempl/gld960c.em: Likewise.
|
||||
* emultempl/hppaelf.em: Likewise.
|
||||
* emultempl/linux.em: Likewise.
|
||||
* emultempl/lnk960.em: Likewise.
|
||||
* emultempl/m68kcoff.em: Likewise.
|
||||
* emultempl/mmo.em: Likewise.
|
||||
* emultempl/pe.em: Likewise.
|
||||
* emultempl/ppc64elf.em: Likewise.
|
||||
* emultempl/sunos.em: Likewise.
|
||||
* emultempl/ticoff.em: Likewise.
|
||||
* emultempl/vanilla.em: Likewise.
|
||||
|
||||
2005-08-03 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* ldlang.c (exp_init_os): Handle etree_provide.
|
||||
|
|
|
@ -788,8 +788,7 @@ gld${EMULATION_NAME}_before_allocation (void)
|
|||
}
|
||||
}
|
||||
|
||||
if (!link_info.relocatable)
|
||||
strip_excluded_output_sections ();
|
||||
before_allocation_default ();
|
||||
}
|
||||
|
||||
static char *
|
||||
|
@ -1344,7 +1343,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = {
|
|||
gld${EMULATION_NAME}_get_script,
|
||||
"${EMULATION_NAME}",
|
||||
"${OUTPUT_FORMAT}",
|
||||
0, /* finish */
|
||||
finish_default,
|
||||
gld${EMULATION_NAME}_create_output_section_statements,
|
||||
0, /* open_dynamic_archive */
|
||||
0, /* place_orphan */
|
||||
|
|
|
@ -126,8 +126,7 @@ gld${EMULATION_NAME}_before_allocation (void)
|
|||
/* We have seen it all. Allocate it, and carry on */
|
||||
bfd_arm_allocate_interworking_sections (& link_info);
|
||||
|
||||
if (!link_info.relocatable)
|
||||
strip_excluded_output_sections ();
|
||||
before_allocation_default ();
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -194,6 +193,8 @@ gld${EMULATION_NAME}_finish (void)
|
|||
}
|
||||
else
|
||||
einfo (_("%P: warning: connot find thumb start symbol %s\n"), thumb_entry_symbol);
|
||||
|
||||
finish_default ();
|
||||
}
|
||||
|
||||
static char *
|
||||
|
|
|
@ -647,8 +647,7 @@ gld_${EMULATION_NAME}_before_allocation (void)
|
|||
|
||||
sort_sections (stat_ptr->head);
|
||||
|
||||
if (!link_info.relocatable)
|
||||
strip_excluded_output_sections ();
|
||||
before_allocation_default ();
|
||||
}
|
||||
|
||||
/* Place an orphan section. We use this to put sections with a '\$' in them
|
||||
|
@ -771,7 +770,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||
gld_${EMULATION_NAME}_get_script,
|
||||
"${EMULATION_NAME}",
|
||||
"${OUTPUT_FORMAT}",
|
||||
NULL, /* finish */
|
||||
finish_default,
|
||||
NULL, /* create output section statements */
|
||||
NULL, /* open dynamic archive */
|
||||
gld${EMULATION_NAME}_place_orphan,
|
||||
|
|
|
@ -1169,8 +1169,7 @@ ${ELF_INTERPRETER_SET_DEFAULT}
|
|||
}
|
||||
}
|
||||
|
||||
if (!link_info.relocatable)
|
||||
strip_excluded_output_sections ();
|
||||
before_allocation_default ();
|
||||
|
||||
if (!bfd_elf_size_dynsym_hash_dynstr (output_bfd, &link_info))
|
||||
einfo ("%P%F: failed to set dynamic section sizes: %E\n");
|
||||
|
@ -1511,7 +1510,7 @@ gld${EMULATION_NAME}_finish (void)
|
|||
if (bfd_elf_discard_info (output_bfd, &link_info))
|
||||
gld${EMULATION_NAME}_layout_sections_again ();
|
||||
|
||||
_bfd_elf_fix_excluded_sec_syms (output_bfd, &link_info);
|
||||
finish_default ();
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
|
|
|
@ -132,7 +132,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||
${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
|
||||
"${EMULATION_NAME}",
|
||||
"${OUTPUT_FORMAT}",
|
||||
${LDEMUL_FINISH-NULL},
|
||||
${LDEMUL_FINISH-finish_default},
|
||||
${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
|
||||
${LDEMUL_OPEN_DYNAMIC_ARCHIVE-NULL},
|
||||
${LDEMUL_PLACE_ORPHAN-NULL},
|
||||
|
|
|
@ -138,7 +138,7 @@ struct ld_emulation_xfer_struct ld_gld960_emulation =
|
|||
gld960_get_script,
|
||||
"960",
|
||||
"",
|
||||
NULL, /* finish */
|
||||
finish_default,
|
||||
NULL, /* create output section statements */
|
||||
NULL, /* open dynamic archive */
|
||||
NULL, /* place orphan */
|
||||
|
|
|
@ -153,7 +153,7 @@ struct ld_emulation_xfer_struct ld_gld960coff_emulation =
|
|||
gld960_get_script,
|
||||
"960coff",
|
||||
"",
|
||||
NULL, /* finish */
|
||||
finish_default,
|
||||
NULL, /* create output section statements */
|
||||
NULL, /* open dynamic archive */
|
||||
NULL, /* place orphan */
|
||||
|
|
|
@ -305,7 +305,7 @@ hppaelf_finish (void)
|
|||
}
|
||||
}
|
||||
|
||||
_bfd_elf_fix_excluded_sec_syms (output_bfd, &link_info);
|
||||
finish_default ();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -122,7 +122,7 @@ gld${EMULATION_NAME}_before_allocation (void)
|
|||
if (! bfd_${EMULATION_NAME}_size_dynamic_sections (output_bfd, &link_info))
|
||||
einfo ("%P%F: failed to set dynamic section sizes: %E\n");
|
||||
|
||||
strip_excluded_output_sections ();
|
||||
before_allocation_default ();
|
||||
}
|
||||
|
||||
static char *
|
||||
|
@ -193,7 +193,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||
gld${EMULATION_NAME}_get_script,
|
||||
"${EMULATION_NAME}",
|
||||
"${OUTPUT_FORMAT}",
|
||||
NULL, /* finish */
|
||||
finish_default,
|
||||
gld${EMULATION_NAME}_create_output_section_statements,
|
||||
gld${EMULATION_NAME}_open_dynamic_archive,
|
||||
NULL, /* place orphan */
|
||||
|
|
|
@ -273,7 +273,7 @@ struct ld_emulation_xfer_struct ld_lnk960_emulation =
|
|||
lnk960_get_script,
|
||||
"lnk960",
|
||||
"",
|
||||
NULL, /* finish */
|
||||
finish_default,
|
||||
NULL, /* create output section statements */
|
||||
NULL, /* open dynamic archive */
|
||||
NULL, /* place orphan */
|
||||
|
|
|
@ -226,7 +226,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||
gld${EMULATION_NAME}_get_script,
|
||||
"${EMULATION_NAME}",
|
||||
"${OUTPUT_FORMAT}",
|
||||
NULL, /* finish */
|
||||
finish_default,
|
||||
NULL, /* create output section statements */
|
||||
NULL, /* open dynamic archive */
|
||||
NULL, /* place orphan */
|
||||
|
|
|
@ -112,6 +112,7 @@ static void
|
|||
mmo_finish (void)
|
||||
{
|
||||
bfd_map_over_sections (output_bfd, mmo_wipe_sec_reloc_flag, NULL);
|
||||
finish_default ();
|
||||
}
|
||||
|
||||
/* To get on-demand global register allocation right, we need to parse the
|
||||
|
|
|
@ -1288,8 +1288,7 @@ gld_${EMULATION_NAME}_before_allocation (void)
|
|||
bfd_arm_pe_allocate_interworking_sections (& link_info);
|
||||
#endif /* TARGET_IS_armpe */
|
||||
|
||||
if (!link_info.relocatable)
|
||||
strip_excluded_output_sections ();
|
||||
before_allocation_default ();
|
||||
}
|
||||
|
||||
#ifdef DLL_SUPPORT
|
||||
|
@ -1464,6 +1463,8 @@ gld_${EMULATION_NAME}_finish (void)
|
|||
}
|
||||
#endif /* defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe) */
|
||||
|
||||
finish_default ();
|
||||
|
||||
#ifdef DLL_SUPPORT
|
||||
if (link_info.shared
|
||||
#if !defined(TARGET_IS_shpe) && !defined(TARGET_IS_mipspe)
|
||||
|
|
|
@ -379,7 +379,7 @@ ppc_finish (void)
|
|||
}
|
||||
|
||||
ppc64_elf_restore_symbols (&link_info);
|
||||
_bfd_elf_fix_excluded_sec_syms (output_bfd, &link_info);
|
||||
finish_default ();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -809,9 +809,9 @@ gld${EMULATION_NAME}_before_allocation (void)
|
|||
hdyn->u.def.section = sdyn;
|
||||
else
|
||||
hdyn->u.def.section = bfd_abs_section_ptr;
|
||||
|
||||
strip_excluded_output_sections ();
|
||||
}
|
||||
|
||||
before_allocation_default ();
|
||||
}
|
||||
|
||||
/* This is called by the before_allocation routine via
|
||||
|
@ -1017,7 +1017,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||
gld${EMULATION_NAME}_get_script,
|
||||
"${EMULATION_NAME}",
|
||||
"${OUTPUT_FORMAT}",
|
||||
NULL, /* finish */
|
||||
finish_default,
|
||||
gld${EMULATION_NAME}_create_output_section_statements,
|
||||
NULL, /* open dynamic archive */
|
||||
NULL, /* place orphan */
|
||||
|
|
|
@ -166,7 +166,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||
gld_${EMULATION_NAME}_get_script,
|
||||
"${EMULATION_NAME}",
|
||||
"${OUTPUT_FORMAT}",
|
||||
NULL, /* finish */
|
||||
finish_default,
|
||||
NULL, /* create output section statements */
|
||||
NULL, /* open dynamic archive */
|
||||
NULL, /* place orphan */
|
||||
|
|
|
@ -69,7 +69,7 @@ struct ld_emulation_xfer_struct ld_vanilla_emulation =
|
|||
vanilla_get_script,
|
||||
"vanilla",
|
||||
"a.out-sunos-big",
|
||||
NULL, /* finish */
|
||||
finish_default,
|
||||
NULL, /* create output section statements */
|
||||
NULL, /* open dynamic archive */
|
||||
NULL, /* place orphan */
|
||||
|
|
10
ld/ldemul.c
10
ld/ldemul.c
|
@ -94,8 +94,7 @@ ldemul_set_output_arch (void)
|
|||
void
|
||||
ldemul_finish (void)
|
||||
{
|
||||
if (ld_emulation->finish)
|
||||
ld_emulation->finish ();
|
||||
ld_emulation->finish ();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -227,6 +226,13 @@ do_assignments_default (void)
|
|||
{
|
||||
}
|
||||
|
||||
void
|
||||
finish_default (void)
|
||||
{
|
||||
if (!link_info.relocatable)
|
||||
_bfd_fix_excluded_sec_syms (output_bfd, &link_info);
|
||||
}
|
||||
|
||||
void
|
||||
set_output_arch_default (void)
|
||||
{
|
||||
|
|
|
@ -81,6 +81,8 @@ extern void before_allocation_default
|
|||
(void);
|
||||
extern void do_assignments_default
|
||||
(void);
|
||||
extern void finish_default
|
||||
(void);
|
||||
extern void set_output_arch_default
|
||||
(void);
|
||||
extern void syslib_default
|
||||
|
|
Loading…
Reference in a new issue