From a82e3ef7ad90d9335c8f3801f06916ffed43327b Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 14 Jan 2016 19:02:18 +1030 Subject: [PATCH] Revert "Strip undefined symbols from .symtab" This reverts commit d983c8c5503d680c6d4955ceb610a9beebc64460 and db95bb7c5946a109e1584ab2c43c052ff39e63bd The PR4317 patch introduced a ppc64le linux kernel build problem. PR ld/19421 PR ld/4317 bfd/ * elflink.c (elf_link_input_bfd): Revert 2015-02-19 changes. (elf_link_output_extsym): Likewise. ld/ * ld-aarch64/gc-tls-relocs.d: Revert 2015-02-19 changes. * ld-cris/locref2.d: Likewise. * ld-elf/ehdr_start-weak.d: Likewise. * ld-elf/group1.d: Likewise. * ld-i386/compressed1.d: Likewise. * ld-ia64/error1.d: Likewise. * ld-ia64/error2.d: Likewise. * ld-ia64/error3.d: Likewise. * ld-mips-elf/pic-and-nonpic-1.nd: Likewise. * ld-mmix/undef-3.d: Likewise. * ld-powerpc/tlsexe.r: Likewise. * ld-powerpc/tlsexetoc.r: Likewise. * ld-powerpc/tlsso.r: Likewise. * ld-powerpc/tlstocso.r: Likewise. * ld-x86-64/compressed1.d: Likewise. * ld-x86-64/pie1.d: Likewise. --- bfd/ChangeLog | 7 +++++ bfd/elflink.c | 30 +++++++------------- ld/testsuite/ChangeLog | 21 ++++++++++++++ ld/testsuite/ld-aarch64/gc-tls-relocs.d | 1 + ld/testsuite/ld-cris/locref2.d | 2 ++ ld/testsuite/ld-elf/ehdr_start-weak.d | 5 ++-- ld/testsuite/ld-elf/group1.d | 2 ++ ld/testsuite/ld-i386/compressed1.d | 3 +- ld/testsuite/ld-ia64/error1.d | 2 ++ ld/testsuite/ld-ia64/error2.d | 2 ++ ld/testsuite/ld-ia64/error3.d | 2 ++ ld/testsuite/ld-mips-elf/pic-and-nonpic-1.nd | 1 + ld/testsuite/ld-mmix/undef-3.d | 17 +++++------ ld/testsuite/ld-powerpc/tlsexe.r | 5 ++-- ld/testsuite/ld-powerpc/tlsexetoc.r | 5 ++-- ld/testsuite/ld-powerpc/tlsso.r | 1 + ld/testsuite/ld-powerpc/tlstocso.r | 1 + ld/testsuite/ld-x86-64/compressed1.d | 3 +- ld/testsuite/ld-x86-64/pie1.d | 3 +- 19 files changed, 72 insertions(+), 41 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index d28df51a3ec..842b913df9a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2016-01-14 Alan Modra + + PR ld/19421 + PR ld/4317 + * elflink.c (elf_link_input_bfd): Revert 2015-02-19 changes. + (elf_link_output_extsym): Likewise. + 2016-01-11 Jiong Wang Apply from master diff --git a/bfd/elflink.c b/bfd/elflink.c index 1b41c793a97..3d37bb42253 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -9145,9 +9145,8 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) a regular file, or that we have been told to strip. However, if h->indx is set to -2, the symbol is used by a reloc and we must output it. */ - strip = FALSE; if (h->indx == -2) - ; + strip = FALSE; else if ((h->def_dynamic || h->ref_dynamic || h->root.type == bfd_link_hash_new) @@ -9173,11 +9172,12 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) && h->root.u.undef.abfd != NULL && (h->root.u.undef.abfd->flags & BFD_PLUGIN) != 0) strip = TRUE; + else + strip = FALSE; /* If we're stripping it, and it's not a dynamic symbol, there's - nothing else to do. However, if it is a forced local symbol or - an ifunc symbol we need to give the backend finish_dynamic_symbol - function a chance to make it dynamic. */ + nothing else to do unless it is a forced local symbol or a + STT_GNU_IFUNC symbol. */ if (strip && h->dynindx == -1 && h->type != STT_GNU_IFUNC @@ -9457,18 +9457,9 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) } } - /* If the symbol is undefined, and we didn't output it to .dynsym, - strip it from .symtab too. Obviously we can't do this for - relocatable output or when needed for --emit-relocs. */ - else if (input_sec == bfd_und_section_ptr - && h->indx != -2 - && !bfd_link_relocatable (flinfo->info)) - return TRUE; - /* Also strip others that we couldn't earlier due to dynamic symbol - processing. */ - if (strip) - return TRUE; - if ((input_sec->flags & SEC_EXCLUDE) != 0) + /* If we're stripping it, then it was just a dynamic symbol, and + there's nothing else to do. */ + if (strip || (input_sec->flags & SEC_EXCLUDE) != 0) return TRUE; /* Output a FILE symbol so that following locals are not associated @@ -9718,9 +9709,8 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) *ppsection = isec; - /* Don't output the first, undefined, symbol. In fact, don't - output any undefined local symbol. */ - if (isec == bfd_und_section_ptr) + /* Don't output the first, undefined, symbol. */ + if (ppsection == flinfo->sections) continue; if (ELF_ST_TYPE (isym->st_info) == STT_SECTION) diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 6784fe56805..14edc57a321 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,24 @@ +2016-01-14 Alan Modra + + PR ld/19421 + PR ld/4317 + * ld-aarch64/gc-tls-relocs.d: Revert 2015-02-19 changes. + * ld-cris/locref2.d: Likewise. + * ld-elf/ehdr_start-weak.d: Likewise. + * ld-elf/group1.d: Likewise. + * ld-i386/compressed1.d: Likewise. + * ld-ia64/error1.d: Likewise. + * ld-ia64/error2.d: Likewise. + * ld-ia64/error3.d: Likewise. + * ld-mips-elf/pic-and-nonpic-1.nd: Likewise. + * ld-mmix/undef-3.d: Likewise. + * ld-powerpc/tlsexe.r: Likewise. + * ld-powerpc/tlsexetoc.r: Likewise. + * ld-powerpc/tlsso.r: Likewise. + * ld-powerpc/tlstocso.r: Likewise. + * ld-x86-64/compressed1.d: Likewise. + * ld-x86-64/pie1.d: Likewise. + 2016-01-13 Nick Clifton * ld-elf/elf.exp (-Bymsolic-functions): Expect to fail diff --git a/ld/testsuite/ld-aarch64/gc-tls-relocs.d b/ld/testsuite/ld-aarch64/gc-tls-relocs.d index 480d869917e..191647ca310 100644 --- a/ld/testsuite/ld-aarch64/gc-tls-relocs.d +++ b/ld/testsuite/ld-aarch64/gc-tls-relocs.d @@ -17,6 +17,7 @@ SYMBOL TABLE: 0+9000 l d \.got 0+ \.got 0+0000 l df \*ABS\* 0+ .* 0+0000 l df \*ABS\* 0+ +0+0000 l \*UND\* 0+ __tls_get_addr 0+9000 l O \.got 0+ _GLOBAL_OFFSET_TABLE_ 0+8000 g \.text 0+ _start diff --git a/ld/testsuite/ld-cris/locref2.d b/ld/testsuite/ld-cris/locref2.d index 0cf53946cb5..735b10ec4ff 100644 --- a/ld/testsuite/ld-cris/locref2.d +++ b/ld/testsuite/ld-cris/locref2.d @@ -12,6 +12,8 @@ SYMBOL TABLE: #... 0+82088 l O \.got 0+ _GLOBAL_OFFSET_TABLE_ +0+ w \*UND\* 0+ expfn +0+ w \*UND\* 0+ expobj #... Disassembly of section \.text: #... diff --git a/ld/testsuite/ld-elf/ehdr_start-weak.d b/ld/testsuite/ld-elf/ehdr_start-weak.d index 5644d0537dc..24ae34cda71 100644 --- a/ld/testsuite/ld-elf/ehdr_start-weak.d +++ b/ld/testsuite/ld-elf/ehdr_start-weak.d @@ -4,7 +4,6 @@ #target: *-*-linux* *-*-gnu* *-*-nacl* #xfail: frv-*-* -#failif -#... -.* __ehdr_start #... +\s+[wU] __ehdr_start +#pass diff --git a/ld/testsuite/ld-elf/group1.d b/ld/testsuite/ld-elf/group1.d index 257be11fac4..ff675352675 100644 --- a/ld/testsuite/ld-elf/group1.d +++ b/ld/testsuite/ld-elf/group1.d @@ -8,3 +8,5 @@ Symbol table '.symtab' contains .* entries: #... .*: 0+1000 +0 +(NOTYPE|OBJECT) +WEAK +DEFAULT +. foo +.*: 0+0000 +0 +(NOTYPE|OBJECT) +GLOBAL +DEFAULT +UND bar +#... diff --git a/ld/testsuite/ld-i386/compressed1.d b/ld/testsuite/ld-i386/compressed1.d index e9eeef9ae2a..3a57c815a9a 100644 --- a/ld/testsuite/ld-i386/compressed1.d +++ b/ld/testsuite/ld-i386/compressed1.d @@ -4,7 +4,6 @@ #warning: .*/compressed1.c:13: undefined reference to .bar. #nm: -n -#failif #... [ \t]+U bar -#... +#pass diff --git a/ld/testsuite/ld-ia64/error1.d b/ld/testsuite/ld-ia64/error1.d index 7b2476f95e5..82142b6a11e 100644 --- a/ld/testsuite/ld-ia64/error1.d +++ b/ld/testsuite/ld-ia64/error1.d @@ -2,4 +2,6 @@ #ld: -unresolved-symbols=ignore-all #readelf: -s +#... +[ ]+[0-9]+:[ ]+[0]+[ ]+0[ ]+NOTYPE[ ]+GLOBAL DEFAULT[ ]+UND[ ]+foo #pass diff --git a/ld/testsuite/ld-ia64/error2.d b/ld/testsuite/ld-ia64/error2.d index ae74eaa464b..764ba66d279 100644 --- a/ld/testsuite/ld-ia64/error2.d +++ b/ld/testsuite/ld-ia64/error2.d @@ -2,4 +2,6 @@ #ld: -pie -unresolved-symbols=ignore-all #readelf: -s +#... +[ ]+[0-9]+:[ ]+[0]+[ ]+0[ ]+NOTYPE[ ]+GLOBAL DEFAULT[ ]+UND[ ]+foo #pass diff --git a/ld/testsuite/ld-ia64/error3.d b/ld/testsuite/ld-ia64/error3.d index 256a6fdc17b..e14d451bbae 100644 --- a/ld/testsuite/ld-ia64/error3.d +++ b/ld/testsuite/ld-ia64/error3.d @@ -2,4 +2,6 @@ #ld: -pie -shared #readelf: -s +#... +[ ]+[0-9]+:[ ]+[0]+[ ]+0[ ]+NOTYPE[ ]+GLOBAL DEFAULT[ ]+UND[ ]+foo #pass diff --git a/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.nd b/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.nd index 3c449fbcb7a..78a1c605797 100644 --- a/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.nd +++ b/ld/testsuite/ld-mips-elf/pic-and-nonpic-1.nd @@ -2,6 +2,7 @@ .*: 00068000 +0 +NOTYPE +LOCAL +DEFAULT +ABS _gp .*: 00041018 +8 +FUNC +LOCAL +DEFAULT .* .pic.f1 .*: 00041000 +16 +FUNC +LOCAL +DEFAULT .* .pic.f2 +.*: 00000000 +0 +OBJECT +GLOBAL +DEFAULT +UND _gp_disp .*: 00041050 +14 +FUNC +GLOBAL +DEFAULT +\[MIPS16\] .* f3 .*: 00041060 +24 +FUNC +GLOBAL +DEFAULT .* __start .*: 0004103c +20 +FUNC +GLOBAL +DEFAULT .* f2 diff --git a/ld/testsuite/ld-mmix/undef-3.d b/ld/testsuite/ld-mmix/undef-3.d index 94eeeaa5a7b..51c0e729ffa 100644 --- a/ld/testsuite/ld-mmix/undef-3.d +++ b/ld/testsuite/ld-mmix/undef-3.d @@ -14,18 +14,19 @@ Section Headers: +\[ 2\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ +0+21 +0+ +0 +0 +1 +\[ 3\] \.symtab +SYMTAB +0+ .* - +0+a8 +0+18 +4 +2 +8 + +0+c0 +0+18 +4 +2 +8 +\[ 4\] \.strtab +STRTAB +0+ .* - +0+21 +0+ +0 +0 +1 + +0+28 +0+ +0 +0 +1 Key to Flags: #... -Symbol table '\.symtab' contains 7 entries: +Symbol table '\.symtab' contains 8 entries: +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND +1: 0+ +0 +SECTION +LOCAL +DEFAULT +1 - +2: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start - +3: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 __bss_start - +4: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 _edata - +5: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 _end - +6: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start\. + +2: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +UND undefd + +3: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start + +4: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 __bss_start + +5: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 _edata + +6: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 _end + +7: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start\. diff --git a/ld/testsuite/ld-powerpc/tlsexe.r b/ld/testsuite/ld-powerpc/tlsexe.r index db72ad72866..ab2ac870cdd 100644 --- a/ld/testsuite/ld-powerpc/tlsexe.r +++ b/ld/testsuite/ld-powerpc/tlsexe.r @@ -98,8 +98,9 @@ Symbol table '\.symtab' contains [0-9]+ entries: .* TLS +LOCAL +DEFAULT +8 le5 .* FILE +LOCAL +DEFAULT +ABS .* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC -.* NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve -.* NOTYPE +LOCAL +DEFAULT +7 .*\.plt_call\.__tls_get_addr(|_opt) +.* (NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve|(FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt)) +.* (NOTYPE +LOCAL +DEFAULT +7 .*\.plt_call\.__tls_get_addr(|_opt)|NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve) +.* ((FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt)|NOTYPE +LOCAL +DEFAULT +7 .*\.plt_call\.__tls_get_addr(|_opt)) .* GLOBAL +DEFAULT +UND gd .* GLOBAL +DEFAULT +9 le0 .* GLOBAL +DEFAULT +9 ld0 diff --git a/ld/testsuite/ld-powerpc/tlsexetoc.r b/ld/testsuite/ld-powerpc/tlsexetoc.r index 56716bba8eb..a72f80fe0e6 100644 --- a/ld/testsuite/ld-powerpc/tlsexetoc.r +++ b/ld/testsuite/ld-powerpc/tlsexetoc.r @@ -98,8 +98,9 @@ Symbol table '\.symtab' contains [0-9]+ entries: .* NOTYPE +LOCAL +DEFAULT +12 \.Lie0 .* FILE +LOCAL +DEFAULT +ABS .* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC -.* NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve -.* NOTYPE +LOCAL +DEFAULT +7 .*\.plt_call\.__tls_get_addr(|_opt) +.* (NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve|(FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt)) +.* (NOTYPE +LOCAL +DEFAULT +7 .*\.plt_call\.__tls_get_addr(|_opt)|NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve) +.* ((FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt)|NOTYPE +LOCAL +DEFAULT +7 .*\.plt_call\.__tls_get_addr(|_opt)) .* TLS +GLOBAL +DEFAULT +UND gd .* TLS +GLOBAL +DEFAULT +9 le0 .* TLS +GLOBAL +DEFAULT +9 ld0 diff --git a/ld/testsuite/ld-powerpc/tlsso.r b/ld/testsuite/ld-powerpc/tlsso.r index fd3002bed18..46b143a6211 100644 --- a/ld/testsuite/ld-powerpc/tlsso.r +++ b/ld/testsuite/ld-powerpc/tlsso.r @@ -116,6 +116,7 @@ Symbol table '\.symtab' contains [0-9]+ entries: .* OBJECT +LOCAL +DEFAULT +9 _DYNAMIC .* NOTYPE +LOCAL +DEFAULT +6 .*\.plt_call\.__tls_get_addr .* NOTYPE +LOCAL +DEFAULT +6 __glink_PLTresolve +.* NOTYPE +LOCAL +DEFAULT +UND \.__tls_get_addr .* TLS +GLOBAL +DEFAULT +UND gd .* TLS +GLOBAL +DEFAULT +8 le0 .* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr diff --git a/ld/testsuite/ld-powerpc/tlstocso.r b/ld/testsuite/ld-powerpc/tlstocso.r index 765bf08f32f..542e8d5aa0f 100644 --- a/ld/testsuite/ld-powerpc/tlstocso.r +++ b/ld/testsuite/ld-powerpc/tlstocso.r @@ -112,6 +112,7 @@ Symbol table '\.symtab' contains [0-9]+ entries: .* OBJECT +LOCAL +DEFAULT +9 _DYNAMIC .* NOTYPE +LOCAL +DEFAULT +6 .*\.plt_call\.__tls_get_addr .* NOTYPE +LOCAL +DEFAULT +6 __glink_PLTresolve +.* NOTYPE +LOCAL +DEFAULT +UND \.__tls_get_addr .* TLS +GLOBAL +DEFAULT +UND gd .* TLS +GLOBAL +DEFAULT +8 le0 .* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr diff --git a/ld/testsuite/ld-x86-64/compressed1.d b/ld/testsuite/ld-x86-64/compressed1.d index f97c9ad7da6..1dd0f4cf6c7 100644 --- a/ld/testsuite/ld-x86-64/compressed1.d +++ b/ld/testsuite/ld-x86-64/compressed1.d @@ -4,7 +4,6 @@ #warning: .*/compressed1.c:13: undefined reference to .bar. #nm: -n -#failif #... [ \t]+U bar -#... +#pass diff --git a/ld/testsuite/ld-x86-64/pie1.d b/ld/testsuite/ld-x86-64/pie1.d index 6373eea7e04..06d2562b804 100644 --- a/ld/testsuite/ld-x86-64/pie1.d +++ b/ld/testsuite/ld-x86-64/pie1.d @@ -4,7 +4,6 @@ #readelf: -s --wide #warning: \A[^\n]*\.o[^\n]*In function `_start':\n[^\n]*: undefined reference to `foo'\Z -#failif #... +[0-9]+: +[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +UND foo -#... +#pass -- 2.47.3