* elf32-ppc.c (struct elf_linker_section): Replace sym_val field
	with sym.
	(ppc_elf_relocate_section): Adjust for above.
	(create_sdata_sym): New function.
	(ppc_elf_create_linker_section): Call it.
	(ppc_elf_check_relocs): Correct has_sda_refs and non_got_refs.
	Create sdata syms for all SDA relocs.
	(ppc_elf_adjust_dynamic_symbol): Don't special case _SDA_BASE_
	and _SDA2_BASE_.
	(ppc_elf_set_sdata_syms): Delete.
	* elflink.c (bfd_elf_size_dynamic_sections): Don't create DT_INIT
	and DT_FINI tags unless associated section has input.
	(bfd_elf_set_symbol, _bfd_elf_provide_symbol): Delete.
	(_bfd_elf_provide_section_bound_symbols): Delete.
	* bfd-in.h (_bfd_elf_provide_symbol): Delete.
	(_bfd_elf_provide_section_bound_symbols): Delete.
	* bfd-in2.h: Regenerate.
ld/
	* ldemul.c (ldemul_do_assignments, do_assignments_default): Delete.
	* ldemul.h (ldemul_do_assignments, do_assignments_default): Delete.
	(struct ld_emulation_xfer_struct): Remove do_assignments field.
	* ldlang.c (lang_do_assignments): Don't call ldemul_do_assignments.
	* emulparams/elf32ppc.sh (SDATA_START_SYMBOLS): New.
	(SDATA2_START_SYMBOLS, SBSS_START_SYMBOLS, SBSS_END_SYMBOLS): New.
	* emultempl/aix.em (ld_*_emulation): Delete do_assignments init.
	* emultempl/armcoff.em: Likewise.
	* emultempl/beos.em: Likewise.
	* emultempl/generic.em: Likewise.
	* emultempl/gld960.em: Likewise.
	* emultempl/gld960c.em: Likewise.
	* emultempl/linux.em: Likewise.
	* emultempl/lnk960.em: Likewise.
	* emultempl/m68kcoff.em: Likewise.
	* emultempl/pe.em: Likewise.
	* emultempl/sunos.em: Likewise.
	* emultempl/ticoff.em: Likewise.
	* emultempl/vanilla.em: Likewise.
	* emultempl/elf32.em: Likewise.
	(gld*_provide_bound_symbols): Delete.
	(gld*_provide_init_fini_syms): Delete.
	(gld*_before_allocation): Don't call ldemul_do_assignments.
	* emultempl/ppc32elf.em (ppc_do_assignments): Delete.
	(LDEMUL_DO_ASSIGNMENTS): Delete.
	* scripttempl/elf.sc: Provide init/fini syms.  Add SBSS_START_SYMBOLS,
	SBSS_END_SYMBOLS, SDATA2_START_SYMBOLS.
This commit is contained in:
Alan Modra 2005-08-04 06:22:14 +00:00
parent fa498e0947
commit 046183de0e
26 changed files with 190 additions and 242 deletions

View File

@ -1,3 +1,23 @@
2005-08-04 Alan Modra <amodra@bigpond.net.au>
* elf32-ppc.c (struct elf_linker_section): Replace sym_val field
with sym.
(ppc_elf_relocate_section): Adjust for above.
(create_sdata_sym): New function.
(ppc_elf_create_linker_section): Call it.
(ppc_elf_check_relocs): Correct has_sda_refs and non_got_refs.
Create sdata syms for all SDA relocs.
(ppc_elf_adjust_dynamic_symbol): Don't special case _SDA_BASE_
and _SDA2_BASE_.
(ppc_elf_set_sdata_syms): Delete.
* elflink.c (bfd_elf_size_dynamic_sections): Don't create DT_INIT
and DT_FINI tags unless associated section has input.
(bfd_elf_set_symbol, _bfd_elf_provide_symbol): Delete.
(_bfd_elf_provide_section_bound_symbols): Delete.
* bfd-in.h (_bfd_elf_provide_symbol): Delete.
(_bfd_elf_provide_section_bound_symbols): Delete.
* bfd-in2.h: Regenerate.
2005-08-04 Alan Modra <amodra@bigpond.net.au>
* elflink.c (fix_syms, _bfd_elf_fix_excluded_sec_syms): Move to..

View File

@ -702,12 +702,6 @@ extern int bfd_get_sign_extend_vma
extern struct bfd_section *_bfd_elf_tls_setup
(bfd *, struct bfd_link_info *);
extern void _bfd_elf_provide_symbol
(struct bfd_link_info *, const char *, bfd_vma, struct bfd_section *);
extern void _bfd_elf_provide_section_bound_symbols
(struct bfd_link_info *, struct bfd_section *, const char *, const char *);
extern void _bfd_fix_excluded_sec_syms
(bfd *, struct bfd_link_info *);

View File

@ -709,12 +709,6 @@ extern int bfd_get_sign_extend_vma
extern struct bfd_section *_bfd_elf_tls_setup
(bfd *, struct bfd_link_info *);
extern void _bfd_elf_provide_symbol
(struct bfd_link_info *, const char *, bfd_vma, struct bfd_section *);
extern void _bfd_elf_provide_section_bound_symbols
(struct bfd_link_info *, struct bfd_section *, const char *, const char *);
extern void _bfd_fix_excluded_sec_syms
(bfd *, struct bfd_link_info *);

View File

@ -1668,8 +1668,8 @@ typedef struct elf_linker_section
const char *bss_name;
/* Associated symbol name. */
const char *sym_name;
/* Value of symbol. */
bfd_vma sym_val;
/* Associated symbol. */
struct elf_link_hash_entry *sym;
} elf_linker_section_t;
/* Linked list of allocated pointer entries. This hangs off of the
@ -2734,6 +2734,20 @@ ppc_elf_add_symbol_hook (bfd *abfd,
return TRUE;
}
static bfd_boolean
create_sdata_sym (struct ppc_elf_link_hash_table *htab,
elf_linker_section_t *lsect)
{
lsect->sym = elf_link_hash_lookup (&htab->elf, lsect->sym_name,
TRUE, FALSE, TRUE);
if (lsect->sym == NULL)
return FALSE;
if (lsect->sym->root.type == bfd_link_hash_new)
lsect->sym->non_elf = 0;
lsect->sym->ref_regular = 1;
return TRUE;
}
/* Create a special linker section. */
static bfd_boolean
@ -2760,7 +2774,7 @@ ppc_elf_create_linker_section (bfd *abfd,
return FALSE;
lsect->section = s;
return TRUE;
return create_sdata_sym (htab, lsect);
}
/* Find a linker generated pointer with a given addend and type. */
@ -3090,6 +3104,11 @@ ppc_elf_check_relocs (bfd *abfd,
if (!elf_create_pointer_linker_section (abfd, &htab->sdata[0],
h, rel))
return FALSE;
if (h != NULL)
{
ppc_elf_hash_entry (h)->has_sda_refs = TRUE;
h->non_got_ref = TRUE;
}
break;
/* Indirect .sdata2 relocation. */
@ -3106,12 +3125,65 @@ ppc_elf_check_relocs (bfd *abfd,
if (!elf_create_pointer_linker_section (abfd, &htab->sdata[1],
h, rel))
return FALSE;
if (h != NULL)
{
ppc_elf_hash_entry (h)->has_sda_refs = TRUE;
h->non_got_ref = TRUE;
}
break;
case R_PPC_SDAREL16:
if (info->shared)
{
bad_shared_reloc (abfd, r_type);
return FALSE;
}
if (htab->sdata[0].sym == NULL
&& !create_sdata_sym (htab, &htab->sdata[0]))
return FALSE;
if (h != NULL)
{
ppc_elf_hash_entry (h)->has_sda_refs = TRUE;
h->non_got_ref = TRUE;
}
break;
case R_PPC_EMB_SDA2REL:
if (info->shared)
{
bad_shared_reloc (abfd, r_type);
return FALSE;
}
if (htab->sdata[1].sym == NULL
&& !create_sdata_sym (htab, &htab->sdata[1]))
return FALSE;
if (h != NULL)
{
ppc_elf_hash_entry (h)->has_sda_refs = TRUE;
h->non_got_ref = TRUE;
}
break;
case R_PPC_EMB_SDA21:
case R_PPC_EMB_RELSDA:
if (info->shared)
{
bad_shared_reloc (abfd, r_type);
return FALSE;
}
if (htab->sdata[0].sym == NULL
&& !create_sdata_sym (htab, &htab->sdata[0]))
return FALSE;
if (htab->sdata[1].sym == NULL
&& !create_sdata_sym (htab, &htab->sdata[1]))
return FALSE;
if (h != NULL)
{
ppc_elf_hash_entry (h)->has_sda_refs = TRUE;
h->non_got_ref = TRUE;
}
break;
case R_PPC_EMB_NADDR32:
case R_PPC_EMB_NADDR16:
case R_PPC_EMB_NADDR16_LO:
@ -3123,11 +3195,7 @@ ppc_elf_check_relocs (bfd *abfd,
return FALSE;
}
if (h != NULL)
{
ppc_elf_hash_entry (h)->has_sda_refs = TRUE;
/* We may need a copy reloc. */
h->non_got_ref = TRUE;
}
h->non_got_ref = TRUE;
break;
case R_PPC_PLT32:
@ -4046,24 +4114,6 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
/* This is a reference to a symbol defined by a dynamic object which
is not a function. */
/* First, a fudge for old shared libs that export some symbols they
should not. */
if (!h->def_regular
&& (strcmp (h->root.root.string, "_SDA_BASE_") == 0
|| strcmp (h->root.root.string, "_SDA2_BASE_") == 0))
{
/* These symbols will be defined later, as if they were defined in
a linker script. We don't want to use a definition in a shared
object. */
const struct elf_backend_data *bed;
bed = get_elf_backend_data (htab->elf.dynobj);
(*bed->elf_backend_hide_symbol) (info, h, TRUE);
h->root.type = bfd_link_hash_undefined;
h->root.u.undef.abfd = htab->elf.dynobj;
return TRUE;
}
/* If we are creating a shared library, we must presume that the
only references to the symbol are via the global offset table.
For such cases we need not do anything here; the relocations will
@ -5259,52 +5309,6 @@ ppc_elf_relax_section (bfd *abfd,
return FALSE;
}
/* Set _SDA_BASE_, _SDA2_BASE, and sbss start and end syms. They are
set here rather than via PROVIDE in the default linker script,
because using PROVIDE inside an output section statement results in
unnecessary output sections. Using PROVIDE outside an output section
statement runs the risk of section alignment affecting where the
section starts. */
void
ppc_elf_set_sdata_syms (bfd *obfd, struct bfd_link_info *info)
{
struct ppc_elf_link_hash_table *htab;
unsigned i;
asection *s;
bfd_vma val;
htab = ppc_elf_hash_table (info);
for (i = 0; i < 2; i++)
{
elf_linker_section_t *lsect = &htab->sdata[i];
s = lsect->section;
if (s != NULL)
s = s->output_section;
if (s == NULL)
s = bfd_get_section_by_name (obfd, lsect->name);
if (s == NULL)
s = bfd_get_section_by_name (obfd, lsect->bss_name);
if (s)
{
/* VxWorks executables are relocatable, so the sdata base symbols
must be section-relative. */
val = 32768;
lsect->sym_val = val + s->vma;
}
else
{
val = 0;
lsect->sym_val = 0;
}
_bfd_elf_provide_symbol (info, lsect->sym_name, val, s);
}
}
/* What to do when ld finds relocations against symbols defined in
discarded sections. */
@ -6348,6 +6352,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
case R_PPC_SDAREL16:
{
const char *name;
struct elf_link_hash_entry *sh;
BFD_ASSERT (sec != NULL);
name = bfd_get_section_name (abfd, sec->output_section);
@ -6364,7 +6369,10 @@ ppc_elf_relocate_section (bfd *output_bfd,
howto->name,
name);
}
addend -= htab->sdata[0].sym_val;
sh = htab->sdata[0].sym;
addend -= (sh->root.u.def.value
+ sh->root.u.def.section->output_offset
+ sh->root.u.def.section->output_section->vma);
}
break;
@ -6372,6 +6380,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
case R_PPC_EMB_SDA2REL:
{
const char *name;
struct elf_link_hash_entry *sh;
BFD_ASSERT (sec != NULL);
name = bfd_get_section_name (abfd, sec->output_section);
@ -6390,7 +6399,10 @@ ppc_elf_relocate_section (bfd *output_bfd,
ret = FALSE;
continue;
}
addend -= htab->sdata[1].sym_val;
sh = htab->sdata[1].sym;
addend -= (sh->root.u.def.value
+ sh->root.u.def.section->output_offset
+ sh->root.u.def.section->output_section->vma);
}
break;
@ -6400,6 +6412,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
{
const char *name;
int reg;
struct elf_link_hash_entry *sh;
BFD_ASSERT (sec != NULL);
name = bfd_get_section_name (abfd, sec->output_section);
@ -6409,14 +6422,20 @@ ppc_elf_relocate_section (bfd *output_bfd,
&& (name[5] == 0 || name[5] == '.'))))
{
reg = 13;
addend -= htab->sdata[0].sym_val;
sh = htab->sdata[0].sym;
addend -= (sh->root.u.def.value
+ sh->root.u.def.section->output_offset
+ sh->root.u.def.section->output_section->vma);
}
else if (strncmp (name, ".sdata2", 7) == 0
|| strncmp (name, ".sbss2", 6) == 0)
{
reg = 2;
addend -= htab->sdata[1].sym_val;
sh = htab->sdata[1].sym;
addend -= (sh->root.u.def.value
+ sh->root.u.def.section->output_offset
+ sh->root.u.def.section->output_section->vma);
}
else if (strcmp (name, ".PPC.EMB.sdata0") == 0

View File

@ -5032,6 +5032,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
asection *dynstr;
struct bfd_elf_version_tree *t;
struct bfd_elf_version_expr *d;
asection *s;
bfd_boolean all_defined;
*sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
@ -5235,7 +5236,8 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
return FALSE;
}
if (bfd_get_section_by_name (output_bfd, ".preinit_array") != NULL)
s = bfd_get_section_by_name (output_bfd, ".preinit_array");
if (s != NULL && s->linker_has_input)
{
/* DT_PREINIT_ARRAY is not allowed in shared library. */
if (! info->executable)
@ -5263,13 +5265,15 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
|| !_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0))
return FALSE;
}
if (bfd_get_section_by_name (output_bfd, ".init_array") != NULL)
s = bfd_get_section_by_name (output_bfd, ".init_array");
if (s != NULL && s->linker_has_input)
{
if (!_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0)
|| !_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0))
return FALSE;
}
if (bfd_get_section_by_name (output_bfd, ".fini_array") != NULL)
s = bfd_get_section_by_name (output_bfd, ".fini_array");
if (s != NULL && s->linker_has_input)
{
if (!_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0)
|| !_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0))
@ -9841,55 +9845,6 @@ _bfd_elf_section_already_linked (bfd *abfd, struct bfd_section * sec)
bfd_section_already_linked_table_insert (already_linked_list, sec);
}
static void
bfd_elf_set_symbol (struct elf_link_hash_entry *h, bfd_vma val,
struct bfd_section *s)
{
h->root.type = bfd_link_hash_defined;
h->root.u.def.section = s ? s : bfd_abs_section_ptr;
h->root.u.def.value = val;
h->def_regular = 1;
h->type = STT_OBJECT;
h->other = STV_HIDDEN | (h->other & ~ ELF_ST_VISIBILITY (-1));
h->forced_local = 1;
}
/* Set NAME to VAL if the symbol exists and is not defined in a regular
object file. If S is NULL it is an absolute symbol, otherwise it is
relative to that section. */
void
_bfd_elf_provide_symbol (struct bfd_link_info *info, const char *name,
bfd_vma val, struct bfd_section *s)
{
struct elf_link_hash_entry *h;
bfd_elf_record_link_assignment (info, name, TRUE);
h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
if (h != NULL
&& !(h->root.type == bfd_link_hash_defined
&& h->root.u.def.section != NULL
&& h->root.u.def.section != h->root.u.def.section->output_section))
bfd_elf_set_symbol (h, val, s);
}
/* Set START and END to boundaries of SEC if they exist and are not
defined in regular object files. */
void
_bfd_elf_provide_section_bound_symbols (struct bfd_link_info *info,
asection *sec,
const char *start,
const char *end)
{
bfd_vma val = 0;
_bfd_elf_provide_symbol (info, start, val, sec);
if (sec != NULL)
val = sec->size;
_bfd_elf_provide_symbol (info, end, val, sec);
}
bfd_boolean
_bfd_elf_common_definition (Elf_Internal_Sym *sym)
{

View File

@ -1,3 +1,33 @@
2005-08-04 Alan Modra <amodra@bigpond.net.au>
* ldemul.c (ldemul_do_assignments, do_assignments_default): Delete.
* ldemul.h (ldemul_do_assignments, do_assignments_default): Delete.
(struct ld_emulation_xfer_struct): Remove do_assignments field.
* ldlang.c (lang_do_assignments): Don't call ldemul_do_assignments.
* emulparams/elf32ppc.sh (SDATA_START_SYMBOLS): New.
(SDATA2_START_SYMBOLS, SBSS_START_SYMBOLS, SBSS_END_SYMBOLS): New.
* emultempl/aix.em (ld_*_emulation): Delete do_assignments init.
* emultempl/armcoff.em: Likewise.
* emultempl/beos.em: Likewise.
* emultempl/generic.em: Likewise.
* emultempl/gld960.em: Likewise.
* emultempl/gld960c.em: Likewise.
* emultempl/linux.em: Likewise.
* emultempl/lnk960.em: Likewise.
* emultempl/m68kcoff.em: Likewise.
* emultempl/pe.em: Likewise.
* emultempl/sunos.em: Likewise.
* emultempl/ticoff.em: Likewise.
* emultempl/vanilla.em: Likewise.
* emultempl/elf32.em: Likewise.
(gld*_provide_bound_symbols): Delete.
(gld*_provide_init_fini_syms): Delete.
(gld*_before_allocation): Don't call ldemul_do_assignments.
* emultempl/ppc32elf.em (ppc_do_assignments): Delete.
(LDEMUL_DO_ASSIGNMENTS): Delete.
* scripttempl/elf.sc: Provide init/fini syms. Add SBSS_START_SYMBOLS,
SBSS_END_SYMBOLS, SDATA2_START_SYMBOLS.
2005-08-04 Alan Modra <amodra@bigpond.net.au>
* Makefile.am (eelf32m32c.c): Fix dependencies.

View File

@ -23,6 +23,17 @@ PLT=".plt ${RELOCATING-0} : SPECIAL { *(.plt) }"
GOTPLT="${PLT}"
OTHER_TEXT_SECTIONS="*(.glink)"
EXECUTABLE_SYMBOLS='PROVIDE (__stack = 0); PROVIDE (___stack = 0);'
if test -z "${CREATE_SHLIB}"; then
SDATA_START_SYMBOLS="PROVIDE (_SDA_BASE_ = 32768);"
SDATA2_START_SYMBOLS="PROVIDE (_SDA2_BASE_ = 32768);"
SBSS_START_SYMBOLS="PROVIDE (__sbss_start = .); PROVIDE (___sbss_start = .);"
SBSS_END_SYMBOLS="PROVIDE (__sbss_end = .); PROVIDE (___sbss_end = .);"
else
unset SDATA_START_SYMBOLS
unset SDATA2_START_SYMBOLS
unset SBSS_START_SYMBOLS
unset SBSS_END_SYMBOLS
fi
OTHER_END_SYMBOLS="__end = .;"
OTHER_RELRO_SECTIONS="
.fixup ${RELOCATING-0} : { *(.fixup) }

View File

@ -1339,7 +1339,6 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = {
gld${EMULATION_NAME}_set_output_arch,
gld${EMULATION_NAME}_choose_target,
gld${EMULATION_NAME}_before_allocation,
do_assignments_default,
gld${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",

View File

@ -261,7 +261,6 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
gld${EMULATION_NAME}_before_allocation,
do_assignments_default,
gld${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",

View File

@ -766,7 +766,6 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
gld_${EMULATION_NAME}_before_allocation,
do_assignments_default,
gld_${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",

View File

@ -57,7 +57,6 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
/* Declare functions used by various EXTRA_EM_FILEs. */
static void gld${EMULATION_NAME}_before_parse (void);
static void gld${EMULATION_NAME}_after_open (void);
static void gld${EMULATION_NAME}_provide_init_fini_syms (void);
static void gld${EMULATION_NAME}_before_allocation (void);
static bfd_boolean gld${EMULATION_NAME}_place_orphan
(lang_input_statement_type *file, asection *s);
@ -1040,47 +1039,6 @@ if test x"$LDEMUL_BEFORE_ALLOCATION" != xgld"$EMULATION_NAME"_before_allocation;
fi
cat >>e${EMULATION_NAME}.c <<EOF
static void
gld${EMULATION_NAME}_provide_bound_symbols (const char *sec,
const char *start,
const char *end)
{
asection *s = bfd_get_section_by_name (output_bfd, sec);
_bfd_elf_provide_section_bound_symbols (&link_info, s, start, end);
}
/* If not building a shared library, provide
__preinit_array_start
__preinit_array_end
__init_array_start
__init_array_end
__fini_array_start
__fini_array_end
They are set here rather than via PROVIDE in the linker
script, because using PROVIDE inside an output section
statement results in unnecessary output sections. Using
PROVIDE outside an output section statement runs the risk of
section alignment affecting where the section starts. */
static void
gld${EMULATION_NAME}_provide_init_fini_syms (void)
{
if (!link_info.relocatable && link_info.executable)
{
gld${EMULATION_NAME}_provide_bound_symbols (".preinit_array",
"__preinit_array_start",
"__preinit_array_end");
gld${EMULATION_NAME}_provide_bound_symbols (".init_array",
"__init_array_start",
"__init_array_end");
gld${EMULATION_NAME}_provide_bound_symbols (".fini_array",
"__fini_array_start",
"__fini_array_end");
}
}
/* This is called after the sections have been attached to output
sections, but before any sizes or addresses have been set. */
@ -1098,8 +1056,6 @@ gld${EMULATION_NAME}_before_allocation (void)
referred to by dynamic objects. */
lang_for_each_statement (gld${EMULATION_NAME}_find_statement_assignment);
ldemul_do_assignments ();
/* Let the ELF backend work out the sizes of any sections required
by dynamic linking. */
rpath = command_line.rpath;
@ -1881,7 +1837,6 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
${LDEMUL_BEFORE_ALLOCATION-gld${EMULATION_NAME}_before_allocation},
${LDEMUL_DO_ASSIGNMENTS-gld${EMULATION_NAME}_provide_init_fini_syms},
${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",

View File

@ -128,7 +128,6 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
${LDEMUL_BEFORE_ALLOCATION-before_allocation_default},
${LDEMUL_DO_ASSIGNMENTS-do_assignments_default},
${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",

View File

@ -134,7 +134,6 @@ struct ld_emulation_xfer_struct ld_gld960_emulation =
gld960_set_output_arch,
gld960_choose_target,
before_allocation_default,
do_assignments_default,
gld960_get_script,
"960",
"",

View File

@ -149,7 +149,6 @@ struct ld_emulation_xfer_struct ld_gld960coff_emulation =
gld960_set_output_arch,
gld960_choose_target,
before_allocation_default,
do_assignments_default,
gld960_get_script,
"960coff",
"",

View File

@ -189,7 +189,6 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
gld${EMULATION_NAME}_before_allocation,
do_assignments_default,
gld${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",

View File

@ -269,7 +269,6 @@ struct ld_emulation_xfer_struct ld_lnk960_emulation =
lnk960_set_output_arch,
lnk960_choose_target,
before_allocation_default,
do_assignments_default,
lnk960_get_script,
"lnk960",
"",

View File

@ -222,7 +222,6 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
before_allocation_default,
do_assignments_default,
gld${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",

View File

@ -1823,7 +1823,6 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
gld_${EMULATION_NAME}_before_allocation,
do_assignments_default,
gld_${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",

View File

@ -117,23 +117,6 @@ ppc_before_allocation (void)
gld${EMULATION_NAME}_before_allocation ();
}
static void
ppc_do_assignments (void)
{
asection *s;
if (is_ppc_elf32_vec (link_info.hash->creator))
ppc_elf_set_sdata_syms (output_bfd, &link_info);
s = bfd_get_section_by_name (output_bfd, ".sbss");
_bfd_elf_provide_section_bound_symbols (&link_info, s,
"__sbss_start", "__sbss_end");
_bfd_elf_provide_section_bound_symbols (&link_info, s,
"___sbss_start", "___sbss_end");
gld${EMULATION_NAME}_provide_init_fini_syms ();
}
EOF
# Define some shell vars to insert bits of code into the standard elf
@ -177,4 +160,3 @@ PARSE_AND_LIST_ARGS_CASES='
#
LDEMUL_AFTER_OPEN=ppc_after_open
LDEMUL_BEFORE_ALLOCATION=ppc_before_allocation
LDEMUL_DO_ASSIGNMENTS=ppc_do_assignments

View File

@ -1013,7 +1013,6 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
gld${EMULATION_NAME}_before_allocation,
do_assignments_default,
gld${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",

View File

@ -162,7 +162,6 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
before_allocation_default,
do_assignments_default,
gld_${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",

View File

@ -65,7 +65,6 @@ struct ld_emulation_xfer_struct ld_vanilla_emulation =
vanilla_set_output_arch,
ldemul_default_target,
before_allocation_default,
do_assignments_default,
vanilla_get_script,
"vanilla",
"a.out-sunos-big",

View File

@ -79,12 +79,6 @@ ldemul_before_allocation (void)
ld_emulation->before_allocation ();
}
void
ldemul_do_assignments (void)
{
ld_emulation->do_assignments ();
}
void
ldemul_set_output_arch (void)
{
@ -221,11 +215,6 @@ before_allocation_default (void)
strip_excluded_output_sections ();
}
void
do_assignments_default (void)
{
}
void
finish_default (void)
{

View File

@ -35,8 +35,6 @@ extern void ldemul_after_allocation
(void);
extern void ldemul_before_allocation
(void);
extern void ldemul_do_assignments
(void);
extern void ldemul_set_output_arch
(void);
extern char *ldemul_choose_target
@ -79,7 +77,7 @@ extern void after_allocation_default
(void);
extern void before_allocation_default
(void);
extern void do_assignments_default
extern void finish_default
(void);
extern void finish_default
(void);
@ -123,9 +121,6 @@ typedef struct ld_emulation_xfer_struct {
/* Run before allocating output sections. */
void (*before_allocation) (void);
/* Run to set special symbols at the same time as link script syms. */
void (*do_assignments) (void);
/* Return the appropriate linker script. */
char * (*get_script) (int *isfile);

View File

@ -3056,9 +3056,7 @@ strip_excluded_output_sections (void)
{
lang_output_section_statement_type *os;
/* Run lang_size_sections (if not already done) to ensure that all
symbols defined in the linker script are put in the bfd hash
table. */
/* Run lang_size_sections (if not already done). */
if (expld.phase != lang_mark_phase_enum)
{
expld.phase = lang_mark_phase_enum;
@ -4591,7 +4589,6 @@ lang_do_assignments (void)
{
lang_statement_iteration++;
lang_do_assignments_1 (statement_list.head, abs_output_section, NULL, 0);
ldemul_do_assignments ();
}
/* Fix any .startof. or .sizeof. symbols. When the assemblers see the

View File

@ -123,10 +123,12 @@ STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) }"
if test -z "${NO_SMALL_DATA}"; then
SBSS=".sbss ${RELOCATING-0} :
{
${RELOCATING+${SBSS_START_SYMBOLS}}
${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)}
*(.dynsbss)
*(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*})
*(.scommon)
${RELOCATING+${SBSS_END_SYMBOLS}}
}"
SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }"
SDATA="/* We want the small data sections together, so single-instruction offsets
@ -138,7 +140,11 @@ if test -z "${NO_SMALL_DATA}"; then
${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)}
*(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*})
}"
SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }"
SDATA2=".sdata2 ${RELOCATING-0} :
{
${RELOCATING+${SDATA2_START_SYMBOLS}}
*(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*})
}"
REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }
.rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }"
REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }
@ -376,10 +382,24 @@ cat <<EOF
.tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
.tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
.preinit_array ${RELOCATING-0} : { KEEP (*(.preinit_array)) }
.init_array ${RELOCATING-0} : { KEEP (*(.init_array)) }
.fini_array ${RELOCATING-0} : { KEEP (*(.fini_array)) }
.preinit_array ${RELOCATING-0} :
{
${RELOCATING+${CREATE_SHLIB-PROVIDE (__preinit_array_start = .);}}
KEEP (*(.preinit_array))
${RELOCATING+${CREATE_SHLIB-PROVIDE (__preinit_array_end = .);}}
}
.init_array ${RELOCATING-0} :
{
${RELOCATING+${CREATE_SHLIB-PROVIDE (__init_array_start = .);}}
KEEP (*(.init_array))
${RELOCATING+${CREATE_SHLIB-PROVIDE (__init_array_end = .);}}
}
.fini_array ${RELOCATING-0} :
{
${RELOCATING+${CREATE_SHLIB-PROVIDE (__fini_array_start = .);}}
KEEP (*(.fini_array))
${RELOCATING+${CREATE_SHLIB-PROVIDE (__fini_array_end = .);}}
}
${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
.jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }