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:
H.J. Lu 2016-06-28 08:08:04 -07:00
parent 1b857aeed3
commit f4ab0e2d1d
6 changed files with 34 additions and 1 deletions

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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"
}

View File

@ -0,0 +1,2 @@
extern void foo();
void bar() {foo();}

View File

@ -0,0 +1,3 @@
#source: dummy.s
#ld: -u foo --gc-sections tmpdir/libpr20306.so
#error: .* generated: undefined reference to `foo'