From: H.J. Lu Date: Fri, 26 Apr 2019 14:52:00 +0000 (-0700) Subject: Don't complain undefined weak dynamic reference X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c54f15248ee990df6cea0b4730cd61b227a0e082;p=binutils-gdb.git Don't complain undefined weak dynamic reference When undefined non-weak references in IR objects are optimized out by LTO, we can have weak dynamic referencs to symbols marked with bfd_link_hash_undefined. We shouldn't complain such undefined weak dynamic references. bfd/ PR ld/24486 * elflink.c (elf_link_output_extsym): Don't complain undefined weak dynamic reference. ld/ PR ld/24486 * testsuite/ld-plugin/lto.exp: Run PR ld/24486 tests. * testsuite/ld-plugin/pr24486a.c: New file. * testsuite/ld-plugin/pr24486b.c: Likewise. * testsuite/ld-plugin/pr24486c.c: Likewise. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7539773a799..b39197d55d3 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2019-04-26 H.J. Lu + + PR ld/24486 + * elflink.c (elf_link_output_extsym): Don't complain undefined + weak dynamic reference. + 2019-04-25 Sudakshina Das * elfnn-aarch64.c (PLT_BTI_ENTRY_SIZE): Remove. diff --git a/bfd/elflink.c b/bfd/elflink.c index 81e667dab0c..ddeaa08d505 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -9776,7 +9776,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) /* If we are reporting errors for this situation then do so now. */ if (!ignore_undef - && h->ref_dynamic + && h->ref_dynamic_nonweak && (!h->ref_regular || flinfo->info->gc_sections) && !elf_link_check_versioned_symbol (flinfo->info, bed, h) && flinfo->info->unresolved_syms_in_shared_libs != RM_IGNORE) diff --git a/ld/ChangeLog b/ld/ChangeLog index dcdbfefcfeb..fed72c85cd7 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,11 @@ +2019-04-26 H.J. Lu + + PR ld/24486 + * testsuite/ld-plugin/lto.exp: Run PR ld/24486 tests. + * testsuite/ld-plugin/pr24486a.c: New file. + * testsuite/ld-plugin/pr24486b.c: Likewise. + * testsuite/ld-plugin/pr24486c.c: Likewise. + 2019-04-26 Nick Clifton * po/ru.po: Updated Russian translation. diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp index b13a77333ff..e913c6f203d 100644 --- a/ld/testsuite/ld-plugin/lto.exp +++ b/ld/testsuite/ld-plugin/lto.exp @@ -325,6 +325,18 @@ set lto_link_elf_tests [list \ [list {Build pr22220main.o} \ {} {-flto} \ {pr22220main.cc} {} {} {c++}] \ + [list "Build pr24486a.o" \ + "$plug_opt" "-flto -O2" \ + {pr24486a.c} {} "" "c"] \ + [list "Build pr24486b.so" \ + "-shared" "-O2 -fpic" \ + {pr24486b.c} {} "pr24486b.so" "c"] \ + [list "Build pr24486c.so" \ + "-shared -Wl,--no-as-needed tmpdir/pr24486b.so" "-O2 -fpic" \ + {pr24486c.c} {} "pr24486c.so" "c"] \ + [list "PR ld/24486" \ + "-O2 -flto tmpdir/pr24486a.o tmpdir/pr24486c.so -Wl,--as-needed tmpdir/pr24486b.so" "" \ + {dummy.c} {} "pr24486.exe"] \ ] # PR 14918 checks that libgcc is not spuriously included in a shared link of diff --git a/ld/testsuite/ld-plugin/pr24486a.c b/ld/testsuite/ld-plugin/pr24486a.c new file mode 100644 index 00000000000..def01395984 --- /dev/null +++ b/ld/testsuite/ld-plugin/pr24486a.c @@ -0,0 +1,8 @@ +extern int FLAGS_verbose; +extern void bar (void); +int +a(void) { +return FLAGS_verbose; +} +void unused (void) { bar(); } +int main() { return a (); } diff --git a/ld/testsuite/ld-plugin/pr24486b.c b/ld/testsuite/ld-plugin/pr24486b.c new file mode 100644 index 00000000000..3aabe2a3957 --- /dev/null +++ b/ld/testsuite/ld-plugin/pr24486b.c @@ -0,0 +1,8 @@ +extern void bar (void) __attribute__((weak)); + +void +foo (void) +{ + if (bar) + bar (); +} diff --git a/ld/testsuite/ld-plugin/pr24486c.c b/ld/testsuite/ld-plugin/pr24486c.c new file mode 100644 index 00000000000..f289177d3e5 --- /dev/null +++ b/ld/testsuite/ld-plugin/pr24486c.c @@ -0,0 +1 @@ +int FLAGS_verbose;