mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-05 12:53:16 +08:00
Strip undefined symbols from .symtab
bfd/ PR ld/4317 * elflink.c (elf_link_input_bfd): Drop undefined local syms. (elf_link_output_extsym): Drop local and global undefined syms. Tidy. Expand comment. ld/testsuite/ PR ld/4317 * ld-aarch64/gc-tls-relocs.d, * ld-cris/locref2.d, * ld-elf/ehdr_start-weak.d, * ld-elf/group1.d, * ld-i386/compressed1.d, * ld-ia64/error1.d, * ld-ia64/error2.d, * ld-ia64/error3.d, * ld-mips-elf/pic-and-nonpic-1.nd, * ld-mmix/undef-3.d, * ld-powerpc/tlsexe.r, * ld-powerpc/tlsexetoc.r, * ld-powerpc/tlsso.r, * ld-powerpc/tlstocso.r, * ld-x86-64/compressed1.d, * ld-x86-64/pie1.d: Update.
This commit is contained in:
parent
8545136955
commit
d983c8c550
@ -1,3 +1,10 @@
|
|||||||
|
2015-02-19 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
PR ld/4317
|
||||||
|
* elflink.c (elf_link_input_bfd): Drop undefined local syms.
|
||||||
|
(elf_link_output_extsym): Drop local and global undefined syms.
|
||||||
|
Tidy. Expand comment.
|
||||||
|
|
||||||
2015-02-17 Alan Modra <amodra@gmail.com>
|
2015-02-17 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR ld/17975
|
PR ld/17975
|
||||||
|
@ -8902,8 +8902,9 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
|
|||||||
a regular file, or that we have been told to strip. However, if
|
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
|
h->indx is set to -2, the symbol is used by a reloc and we must
|
||||||
output it. */
|
output it. */
|
||||||
|
strip = FALSE;
|
||||||
if (h->indx == -2)
|
if (h->indx == -2)
|
||||||
strip = FALSE;
|
;
|
||||||
else if ((h->def_dynamic
|
else if ((h->def_dynamic
|
||||||
|| h->ref_dynamic
|
|| h->ref_dynamic
|
||||||
|| h->root.type == bfd_link_hash_new)
|
|| h->root.type == bfd_link_hash_new)
|
||||||
@ -8929,12 +8930,11 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
|
|||||||
&& h->root.u.undef.abfd != NULL
|
&& h->root.u.undef.abfd != NULL
|
||||||
&& (h->root.u.undef.abfd->flags & BFD_PLUGIN) != 0)
|
&& (h->root.u.undef.abfd->flags & BFD_PLUGIN) != 0)
|
||||||
strip = TRUE;
|
strip = TRUE;
|
||||||
else
|
|
||||||
strip = FALSE;
|
|
||||||
|
|
||||||
/* If we're stripping it, and it's not a dynamic symbol, there's
|
/* If we're stripping it, and it's not a dynamic symbol, there's
|
||||||
nothing else to do unless it is a forced local symbol or a
|
nothing else to do. However, if it is a forced local symbol or
|
||||||
STT_GNU_IFUNC symbol. */
|
an ifunc symbol we need to give the backend finish_dynamic_symbol
|
||||||
|
function a chance to make it dynamic. */
|
||||||
if (strip
|
if (strip
|
||||||
&& h->dynindx == -1
|
&& h->dynindx == -1
|
||||||
&& h->type != STT_GNU_IFUNC
|
&& h->type != STT_GNU_IFUNC
|
||||||
@ -9205,9 +9205,18 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we're stripping it, then it was just a dynamic symbol, and
|
/* If the symbol is undefined, and we didn't output it to .dynsym,
|
||||||
there's nothing else to do. */
|
strip it from .symtab too. Obviously we can't do this for
|
||||||
if (strip || (input_sec->flags & SEC_EXCLUDE) != 0)
|
relocatable output or when needed for --emit-relocs. */
|
||||||
|
else if (input_sec == bfd_und_section_ptr
|
||||||
|
&& h->indx != -2
|
||||||
|
&& !flinfo->info->relocatable)
|
||||||
|
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)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* Output a FILE symbol so that following locals are not associated
|
/* Output a FILE symbol so that following locals are not associated
|
||||||
@ -9455,8 +9464,9 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
|
|||||||
|
|
||||||
*ppsection = isec;
|
*ppsection = isec;
|
||||||
|
|
||||||
/* Don't output the first, undefined, symbol. */
|
/* Don't output the first, undefined, symbol. In fact, don't
|
||||||
if (ppsection == flinfo->sections)
|
output any undefined local symbol. */
|
||||||
|
if (isec == bfd_und_section_ptr)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
|
if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
|
||||||
|
@ -1,3 +1,14 @@
|
|||||||
|
2015-02-19 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
PR ld/4317
|
||||||
|
* ld-aarch64/gc-tls-relocs.d, * ld-cris/locref2.d,
|
||||||
|
* ld-elf/ehdr_start-weak.d, * ld-elf/group1.d,
|
||||||
|
* ld-i386/compressed1.d, * ld-ia64/error1.d, * ld-ia64/error2.d,
|
||||||
|
* ld-ia64/error3.d, * ld-mips-elf/pic-and-nonpic-1.nd,
|
||||||
|
* ld-mmix/undef-3.d, * ld-powerpc/tlsexe.r, * ld-powerpc/tlsexetoc.r,
|
||||||
|
* ld-powerpc/tlsso.r, * ld-powerpc/tlstocso.r,
|
||||||
|
* ld-x86-64/compressed1.d, * ld-x86-64/pie1.d: Update.
|
||||||
|
|
||||||
2015-02-17 Alan Modra <amodra@gmail.com>
|
2015-02-17 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR ld/17975
|
PR ld/17975
|
||||||
|
@ -17,7 +17,6 @@ SYMBOL TABLE:
|
|||||||
0+9000 l d \.got 0+ \.got
|
0+9000 l d \.got 0+ \.got
|
||||||
0+0000 l df \*ABS\* 0+ .*
|
0+0000 l df \*ABS\* 0+ .*
|
||||||
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+9000 l O \.got 0+ _GLOBAL_OFFSET_TABLE_
|
||||||
0+8000 g \.text 0+ _start
|
0+8000 g \.text 0+ _start
|
||||||
|
|
||||||
|
@ -12,8 +12,6 @@
|
|||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
#...
|
#...
|
||||||
0+82088 l O \.got 0+ _GLOBAL_OFFSET_TABLE_
|
0+82088 l O \.got 0+ _GLOBAL_OFFSET_TABLE_
|
||||||
0+ w \*UND\* 0+ expfn
|
|
||||||
0+ w \*UND\* 0+ expobj
|
|
||||||
#...
|
#...
|
||||||
Disassembly of section \.text:
|
Disassembly of section \.text:
|
||||||
#...
|
#...
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#target: *-*-linux* *-*-gnu* *-*-nacl*
|
#target: *-*-linux* *-*-gnu* *-*-nacl*
|
||||||
#xfail: frv-*-*
|
#xfail: frv-*-*
|
||||||
|
|
||||||
|
#failif
|
||||||
|
#...
|
||||||
|
.* __ehdr_start
|
||||||
#...
|
#...
|
||||||
\s+[wU] __ehdr_start
|
|
||||||
#pass
|
|
||||||
|
@ -8,5 +8,3 @@
|
|||||||
Symbol table '.symtab' contains .* entries:
|
Symbol table '.symtab' contains .* entries:
|
||||||
#...
|
#...
|
||||||
.*: 0+1000 +0 +(NOTYPE|OBJECT) +WEAK +DEFAULT +. foo
|
.*: 0+1000 +0 +(NOTYPE|OBJECT) +WEAK +DEFAULT +. foo
|
||||||
.*: 0+0000 +0 +(NOTYPE|OBJECT) +GLOBAL +DEFAULT +UND bar
|
|
||||||
#...
|
|
||||||
|
@ -2,8 +2,3 @@
|
|||||||
#as: --32
|
#as: --32
|
||||||
#ld: -e foo -melf_i386 --noinhibit-exec
|
#ld: -e foo -melf_i386 --noinhibit-exec
|
||||||
#warning: .*/compressed1.c:13: undefined reference to .bar.
|
#warning: .*/compressed1.c:13: undefined reference to .bar.
|
||||||
#nm: -n
|
|
||||||
|
|
||||||
#...
|
|
||||||
[ \t]+U bar
|
|
||||||
#pass
|
|
||||||
|
@ -2,6 +2,4 @@
|
|||||||
#ld: -unresolved-symbols=ignore-all
|
#ld: -unresolved-symbols=ignore-all
|
||||||
#readelf: -s
|
#readelf: -s
|
||||||
|
|
||||||
#...
|
|
||||||
[ ]+[0-9]+:[ ]+[0]+[ ]+0[ ]+NOTYPE[ ]+GLOBAL DEFAULT[ ]+UND[ ]+foo
|
|
||||||
#pass
|
#pass
|
||||||
|
@ -2,6 +2,4 @@
|
|||||||
#ld: -pie -unresolved-symbols=ignore-all
|
#ld: -pie -unresolved-symbols=ignore-all
|
||||||
#readelf: -s
|
#readelf: -s
|
||||||
|
|
||||||
#...
|
|
||||||
[ ]+[0-9]+:[ ]+[0]+[ ]+0[ ]+NOTYPE[ ]+GLOBAL DEFAULT[ ]+UND[ ]+foo
|
|
||||||
#pass
|
#pass
|
||||||
|
@ -2,6 +2,4 @@
|
|||||||
#ld: -pie -shared
|
#ld: -pie -shared
|
||||||
#readelf: -s
|
#readelf: -s
|
||||||
|
|
||||||
#...
|
|
||||||
[ ]+[0-9]+:[ ]+[0]+[ ]+0[ ]+NOTYPE[ ]+GLOBAL DEFAULT[ ]+UND[ ]+foo
|
|
||||||
#pass
|
#pass
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
.*: 00068000 +0 +NOTYPE +LOCAL +DEFAULT +ABS _gp
|
.*: 00068000 +0 +NOTYPE +LOCAL +DEFAULT +ABS _gp
|
||||||
.*: 00041018 +8 +FUNC +LOCAL +DEFAULT .* .pic.f1
|
.*: 00041018 +8 +FUNC +LOCAL +DEFAULT .* .pic.f1
|
||||||
.*: 00041000 +16 +FUNC +LOCAL +DEFAULT .* .pic.f2
|
.*: 00041000 +16 +FUNC +LOCAL +DEFAULT .* .pic.f2
|
||||||
.*: 00000000 +0 +OBJECT +GLOBAL +DEFAULT +UND _gp_disp
|
|
||||||
.*: 00041050 +14 +FUNC +GLOBAL +DEFAULT +\[MIPS16\] .* f3
|
.*: 00041050 +14 +FUNC +GLOBAL +DEFAULT +\[MIPS16\] .* f3
|
||||||
.*: 00041060 +24 +FUNC +GLOBAL +DEFAULT .* __start
|
.*: 00041060 +24 +FUNC +GLOBAL +DEFAULT .* __start
|
||||||
.*: 0004103c +20 +FUNC +GLOBAL +DEFAULT .* f2
|
.*: 0004103c +20 +FUNC +GLOBAL +DEFAULT .* f2
|
||||||
|
@ -14,19 +14,18 @@ Section Headers:
|
|||||||
+\[ 2\] \.shstrtab +STRTAB +0+ +0+7c
|
+\[ 2\] \.shstrtab +STRTAB +0+ +0+7c
|
||||||
+0+21 +0+ +0 +0 +1
|
+0+21 +0+ +0 +0 +1
|
||||||
+\[ 3\] \.symtab +SYMTAB +0+ .*
|
+\[ 3\] \.symtab +SYMTAB +0+ .*
|
||||||
+0+c0 +0+18 +4 +2 +8
|
+0+a8 +0+18 +4 +2 +8
|
||||||
+\[ 4\] \.strtab +STRTAB +0+ .*
|
+\[ 4\] \.strtab +STRTAB +0+ .*
|
||||||
+0+2f +0+ +0 +0 +1
|
+0+28 +0+ +0 +0 +1
|
||||||
Key to Flags:
|
Key to Flags:
|
||||||
#...
|
#...
|
||||||
|
|
||||||
Symbol table '\.symtab' contains 8 entries:
|
Symbol table '\.symtab' contains 7 entries:
|
||||||
+Num: +Value +Size +Type +Bind +Vis +Ndx +Name
|
+Num: +Value +Size +Type +Bind +Vis +Ndx +Name
|
||||||
+0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
|
+0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
|
||||||
+1: 0+ +0 +SECTION +LOCAL +DEFAULT +1
|
+1: 0+ +0 +SECTION +LOCAL +DEFAULT +1
|
||||||
+2: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +UND undefd
|
+2: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start
|
||||||
+3: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start
|
+3: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 __bss_start
|
||||||
+4: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 __bss_start
|
+4: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 _edata
|
||||||
+5: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 _edata
|
+5: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 _end
|
||||||
+6: 2000000000000000 +0 +NOTYPE +GLOBAL +DEFAULT +1 _end
|
+6: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start\.
|
||||||
+7: 0+ +0 +NOTYPE +GLOBAL +DEFAULT +1 _start\.
|
|
||||||
|
@ -98,9 +98,8 @@ Symbol table '\.symtab' contains [0-9]+ entries:
|
|||||||
.* TLS +LOCAL +DEFAULT +8 le5
|
.* TLS +LOCAL +DEFAULT +8 le5
|
||||||
.* FILE +LOCAL +DEFAULT +ABS
|
.* FILE +LOCAL +DEFAULT +ABS
|
||||||
.* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC
|
.* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC
|
||||||
.* (NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve|(FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt))
|
.* NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve
|
||||||
.* (NOTYPE +LOCAL +DEFAULT +7 .*\.plt_call\.__tls_get_addr(|_opt)|NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve)
|
.* NOTYPE +LOCAL +DEFAULT +7 .*\.plt_call\.__tls_get_addr(|_opt)
|
||||||
.* ((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 +UND gd
|
||||||
.* GLOBAL +DEFAULT +9 le0
|
.* GLOBAL +DEFAULT +9 le0
|
||||||
.* GLOBAL +DEFAULT +9 ld0
|
.* GLOBAL +DEFAULT +9 ld0
|
||||||
|
@ -98,9 +98,8 @@ Symbol table '\.symtab' contains [0-9]+ entries:
|
|||||||
.* NOTYPE +LOCAL +DEFAULT +12 \.Lie0
|
.* NOTYPE +LOCAL +DEFAULT +12 \.Lie0
|
||||||
.* FILE +LOCAL +DEFAULT +ABS
|
.* FILE +LOCAL +DEFAULT +ABS
|
||||||
.* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC
|
.* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC
|
||||||
.* (NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve|(FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt))
|
.* NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve
|
||||||
.* (NOTYPE +LOCAL +DEFAULT +7 .*\.plt_call\.__tls_get_addr(|_opt)|NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve)
|
.* NOTYPE +LOCAL +DEFAULT +7 .*\.plt_call\.__tls_get_addr(|_opt)
|
||||||
.* ((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 +UND gd
|
||||||
.* TLS +GLOBAL +DEFAULT +9 le0
|
.* TLS +GLOBAL +DEFAULT +9 le0
|
||||||
.* TLS +GLOBAL +DEFAULT +9 ld0
|
.* TLS +GLOBAL +DEFAULT +9 ld0
|
||||||
|
@ -116,7 +116,6 @@ Symbol table '\.symtab' contains [0-9]+ entries:
|
|||||||
.* OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
|
.* OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
|
||||||
.* NOTYPE +LOCAL +DEFAULT +6 .*\.plt_call\.__tls_get_addr
|
.* NOTYPE +LOCAL +DEFAULT +6 .*\.plt_call\.__tls_get_addr
|
||||||
.* NOTYPE +LOCAL +DEFAULT +6 __glink_PLTresolve
|
.* NOTYPE +LOCAL +DEFAULT +6 __glink_PLTresolve
|
||||||
.* NOTYPE +LOCAL +DEFAULT +UND \.__tls_get_addr
|
|
||||||
.* TLS +GLOBAL +DEFAULT +UND gd
|
.* TLS +GLOBAL +DEFAULT +UND gd
|
||||||
.* TLS +GLOBAL +DEFAULT +8 le0
|
.* TLS +GLOBAL +DEFAULT +8 le0
|
||||||
.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
|
.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
|
||||||
|
@ -112,7 +112,6 @@ Symbol table '\.symtab' contains [0-9]+ entries:
|
|||||||
.* OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
|
.* OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
|
||||||
.* NOTYPE +LOCAL +DEFAULT +6 .*\.plt_call\.__tls_get_addr
|
.* NOTYPE +LOCAL +DEFAULT +6 .*\.plt_call\.__tls_get_addr
|
||||||
.* NOTYPE +LOCAL +DEFAULT +6 __glink_PLTresolve
|
.* NOTYPE +LOCAL +DEFAULT +6 __glink_PLTresolve
|
||||||
.* NOTYPE +LOCAL +DEFAULT +UND \.__tls_get_addr
|
|
||||||
.* TLS +GLOBAL +DEFAULT +UND gd
|
.* TLS +GLOBAL +DEFAULT +UND gd
|
||||||
.* TLS +GLOBAL +DEFAULT +8 le0
|
.* TLS +GLOBAL +DEFAULT +8 le0
|
||||||
.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
|
.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr
|
||||||
|
@ -2,8 +2,3 @@
|
|||||||
#as: --64
|
#as: --64
|
||||||
#ld: -e foo -melf_x86_64 --noinhibit-exec
|
#ld: -e foo -melf_x86_64 --noinhibit-exec
|
||||||
#warning: .*/compressed1.c:13: undefined reference to .bar.
|
#warning: .*/compressed1.c:13: undefined reference to .bar.
|
||||||
#nm: -n
|
|
||||||
|
|
||||||
#...
|
|
||||||
[ \t]+U bar
|
|
||||||
#pass
|
|
||||||
|
@ -1,9 +1,4 @@
|
|||||||
#name: PIE with undefined symbol
|
#name: PIE with undefined symbol
|
||||||
#as: --64
|
#as: --64
|
||||||
#ld: -pie -melf_x86_64 --noinhibit-exec
|
#ld: -pie -melf_x86_64 --noinhibit-exec
|
||||||
#readelf: -s --wide
|
|
||||||
#warning: \A[^\n]*\.o[^\n]*In function `_start':\n[^\n]*: undefined reference to `foo'\Z
|
#warning: \A[^\n]*\.o[^\n]*In function `_start':\n[^\n]*: undefined reference to `foo'\Z
|
||||||
|
|
||||||
#...
|
|
||||||
+[0-9]+: +[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +UND foo
|
|
||||||
#pass
|
|
||||||
|
Loading…
Reference in New Issue
Block a user