Browse Source

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.
binutils-2_27-branch
H.J. Lu 10 years ago
parent
commit
f4ab0e2d1d
  1. 6
      bfd/ChangeLog
  2. 3
      bfd/elflink.c
  3. 6
      ld/ChangeLog
  4. 15
      ld/testsuite/ld-gc/gc.exp
  5. 2
      ld/testsuite/ld-gc/pr20306.c
  6. 3
      ld/testsuite/ld-gc/pr20306.d

6
bfd/ChangeLog

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

3
bfd/elflink.c

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

6
ld/ChangeLog

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

15
ld/testsuite/ld-gc/gc.exp

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

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

3
ld/testsuite/ld-gc/pr20306.d

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