From c5bdb022609634970dd981517d478e6cc332629c Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 18 Jan 2018 16:21:46 -0800 Subject: [PATCH] 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. --- ld/ChangeLog | 8 +++++ ld/emultempl/solaris2.em | 68 ++++++++++++++++------------------------ 2 files changed, 35 insertions(+), 41 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 38017053026..6b6886e871b 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,11 @@ +2018-01-18 H.J. Lu + + 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 * emultempl/ppc32elf.em: Support optional --plt-align arg. diff --git a/ld/emultempl/solaris2.em b/ld/emultempl/solaris2.em index 7c3fafb1127..cc009e066ec 100644 --- a/ld/emultempl/solaris2.em +++ b/ld/emultempl/solaris2.em @@ -35,8 +35,12 @@ fragment <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 -- 2.30.2