Skip version check for unreferenced and undefined symbol
No need to check version if symbol is unreferenced and undefined. bfd/ PR ld/20306 * elflink.c (elf_link_check_versioned_symbol): Return false for unreferenced undefined symbol. ld/testsuite/ * testsuite/ld-gc/gc.exp: Run pr20306 test. * ld-gc/pr20306.c: New file. * ld-gc/pr20306.d: Likewise.
This commit is contained in:
parent
1b857aeed3
commit
f4ab0e2d1d
6 changed files with 34 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2016-06-28 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/20306
|
||||
* elflink.c (elf_link_check_versioned_symbol): Return false
|
||||
for unreferenced undefined symbol.
|
||||
|
||||
2016-06-28 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* elf32-bfin.c (bfin_adjust_dynamic_symbol): Fail if a COPY reloc
|
||||
|
|
|
@ -9053,7 +9053,8 @@ elf_link_check_versioned_symbol (struct bfd_link_info *info,
|
|||
case bfd_link_hash_undefined:
|
||||
case bfd_link_hash_undefweak:
|
||||
abfd = h->root.u.undef.abfd;
|
||||
if ((abfd->flags & DYNAMIC) == 0
|
||||
if (abfd == NULL
|
||||
|| (abfd->flags & DYNAMIC) == 0
|
||||
|| (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0)
|
||||
return FALSE;
|
||||
break;
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2016-06-28 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* testsuite/ld-gc/gc.exp: Run pr20306 test.
|
||||
* ld-gc/pr20306.c: New file.
|
||||
* ld-gc/pr20306.d: Likewise.
|
||||
|
||||
2016-06-28 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* testsuite/ld-elf/comm-data.exp: Expect comm-data2 test to fail
|
||||
|
|
|
@ -146,3 +146,18 @@ if { [is_remote host] || [which $CC] != 0 } {
|
|||
ld_compile "$CC $CFLAGS $cflags -O0" $srcdir/$subdir/pr19161-2.c tmpdir/pr19161-2.o
|
||||
run_dump_test "pr19161"
|
||||
}
|
||||
|
||||
if { [is_elf_format] && [check_shared_lib_support] \
|
||||
&& ([is_remote host] || [which $CC] != 0) } {
|
||||
run_cc_link_tests [list \
|
||||
[list \
|
||||
"Build libpr20306.so" \
|
||||
"-shared" \
|
||||
"-fPIC" \
|
||||
{pr20306.c} \
|
||||
{} \
|
||||
"libpr20306.so" \
|
||||
] \
|
||||
]
|
||||
run_dump_test "pr20306"
|
||||
}
|
||||
|
|
2
ld/testsuite/ld-gc/pr20306.c
Normal file
2
ld/testsuite/ld-gc/pr20306.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
extern void foo();
|
||||
void bar() {foo();}
|
3
ld/testsuite/ld-gc/pr20306.d
Normal file
3
ld/testsuite/ld-gc/pr20306.d
Normal file
|
@ -0,0 +1,3 @@
|
|||
#source: dummy.s
|
||||
#ld: -u foo --gc-sections tmpdir/libpr20306.so
|
||||
#error: .* generated: undefined reference to `foo'
|
Loading…
Reference in a new issue