mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-24 18:44:20 +08:00
solaris2.em: Fold after_allocation into before_allocation
Since all ELF linkers call check_relocs after opening all inputs, we can fold after_allocation into before_allocation so that local dynamic symbols will be placed before global dynamic symbols in .dynsym section. This fixed: FAIL: Common symbol override test (auxiliary shared object build) FAIL: ld-elf/pr19617a FAIL: ld-elf/pr19698 for i386-solaris2.12 and x86_64-solaris2.12 targets. PR ld/22728 * emultempl/solaris2.em (elf_solaris2_after_allocation): Fold into ... (elf_solaris2_before_allocation): This. (LDEMUL_AFTER_ALLOCATION): Removed.
This commit is contained in:
parent
85ed4f7ece
commit
c5bdb02260
@ -1,3 +1,11 @@
|
||||
2018-01-18 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/22728
|
||||
* emultempl/solaris2.em (elf_solaris2_after_allocation): Fold
|
||||
into ...
|
||||
(elf_solaris2_before_allocation): This.
|
||||
(LDEMUL_AFTER_ALLOCATION): Removed.
|
||||
|
||||
2018-01-18 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* emultempl/ppc32elf.em: Support optional --plt-align arg.
|
||||
|
@ -35,8 +35,12 @@ fragment <<EOF
|
||||
.dynsym table of executables and shared objects. If generating a
|
||||
versioned shared object, they must always be bound to the base version.
|
||||
|
||||
The Solaris 2 ABI also requires two local symbols to be emitted for
|
||||
every executable and shared object.
|
||||
|
||||
Cf. Linker and Libraries Guide, Ch. 2, Link-Editor, Generating the Output
|
||||
File, p.63. */
|
||||
|
||||
static void
|
||||
elf_solaris2_before_allocation (void)
|
||||
{
|
||||
@ -50,6 +54,13 @@ elf_solaris2_before_allocation (void)
|
||||
"_etext",
|
||||
NULL
|
||||
};
|
||||
/* Local symbols required by the Solaris 2 ABI. Already emitted by
|
||||
emulparams/solaris2.sh. */
|
||||
static const char *local_syms[] = {
|
||||
"_START_",
|
||||
"_END_",
|
||||
NULL
|
||||
};
|
||||
const char **sym;
|
||||
|
||||
/* Do this for both executables and shared objects. */
|
||||
@ -72,6 +83,22 @@ elf_solaris2_before_allocation (void)
|
||||
/* Emit it into the .dynamic section, too. */
|
||||
bfd_elf_link_record_dynamic_symbol (&link_info, h);
|
||||
}
|
||||
|
||||
for (sym = local_syms; *sym != NULL; sym++)
|
||||
{
|
||||
struct elf_link_hash_entry *h;
|
||||
|
||||
/* Lookup symbol. */
|
||||
h = elf_link_hash_lookup (elf_hash_table (&link_info), *sym,
|
||||
FALSE, FALSE, FALSE);
|
||||
if (h == NULL)
|
||||
continue;
|
||||
|
||||
/* Turn it local. */
|
||||
h->forced_local = 1;
|
||||
/* Type should be STT_OBJECT, not STT_NOTYPE. */
|
||||
h->type = STT_OBJECT;
|
||||
}
|
||||
}
|
||||
|
||||
/* Only do this if emitting a shared object and versioning is in place. */
|
||||
@ -110,47 +137,6 @@ elf_solaris2_before_allocation (void)
|
||||
gld${EMULATION_NAME}_before_allocation ();
|
||||
}
|
||||
|
||||
/* The Solaris 2 ABI requires two local symbols to be emitted for every
|
||||
executable and shared object.
|
||||
|
||||
Cf. Linker and Libraries Guide, Ch. 2, Link-Editor, Generating the Output
|
||||
File, p.63. */
|
||||
static void
|
||||
elf_solaris2_after_allocation (void)
|
||||
{
|
||||
/* Local symbols required by the Solaris 2 ABI. Already emitted by
|
||||
emulparams/solaris2.sh. */
|
||||
static const char *local_syms[] = {
|
||||
"_START_",
|
||||
"_END_",
|
||||
NULL
|
||||
};
|
||||
const char **sym;
|
||||
|
||||
/* Do this for both executables and shared objects. */
|
||||
if (!bfd_link_relocatable (&link_info))
|
||||
{
|
||||
for (sym = local_syms; *sym != NULL; sym++)
|
||||
{
|
||||
struct elf_link_hash_entry *h;
|
||||
|
||||
/* Lookup symbol. */
|
||||
h = elf_link_hash_lookup (elf_hash_table (&link_info), *sym,
|
||||
FALSE, FALSE, FALSE);
|
||||
if (h == NULL)
|
||||
continue;
|
||||
|
||||
/* Turn it local. */
|
||||
h->forced_local = 1;
|
||||
/* Type should be STT_OBJECT, not STT_NOTYPE. */
|
||||
h->type = STT_OBJECT;
|
||||
}
|
||||
}
|
||||
|
||||
gld${EMULATION_NAME}_after_allocation ();
|
||||
}
|
||||
|
||||
EOF
|
||||
|
||||
LDEMUL_BEFORE_ALLOCATION=elf_solaris2_before_allocation
|
||||
LDEMUL_AFTER_ALLOCATION=elf_solaris2_after_allocation
|
||||
|
Loading…
Reference in New Issue
Block a user