[binutils-gdb/binutils-2_26-branch] Revert "Strip undefined symbols from .symtab"
Alan Modra
amodra@sourceware.org
Thu Jan 14 10:13:00 GMT 2016
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a82e3ef7ad90d9335c8f3801f06916ffed43327b
commit a82e3ef7ad90d9335c8f3801f06916ffed43327b
Author: Alan Modra <amodra@gmail.com>
Date: Thu Jan 14 19:02:18 2016 +1030
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.
Diff:
---
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 d28df51..842b913 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2016-01-14 Alan Modra <amodra@gmail.com>
+
+ 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 <jiong.wang@arm.com>
Apply from master
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 1b41c79..3d37bb4 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 6784fe5..14edc57 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,24 @@
+2016-01-14 Alan Modra <amodra@gmail.com>
+
+ 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 <nickc@redhat.com>
* 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 480d869..191647c 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 0cf5394..735b10e 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 5644d05..24ae34c 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 257be11..ff67535 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 e9eeef9..3a57c81 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 7b2476f..82142b6 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 ae74eaa..764ba66 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 256a6fd..e14d451 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 3c449fb..78a1c60 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 94eeeaa..51c0e72 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 db72ad7..ab2ac87 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 56716bb..a72f80f 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 fd3002b..46b143a 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 765bf08..542e8d5 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 f97c9ad..1dd0f4c 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 6373eea..06d2562 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
More information about the Binutils-cvs
mailing list