From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 97475 invoked by alias); 25 Apr 2019 21:20:04 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 97467 invoked by uid 89); 25 Apr 2019 21:20:03 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-16.8 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_SOFTFAIL autolearn=ham version=3.3.1 spammy=bed, HContent-Transfer-Encoding:8bit X-HELO: mga11.intel.com Received: from mga11.intel.com (HELO mga11.intel.com) (192.55.52.93) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 25 Apr 2019 21:20:02 +0000 Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Apr 2019 14:20:00 -0700 Received: from gnu-cfl-1.sc.intel.com ([172.25.70.237]) by orsmga008.jf.intel.com with ESMTP; 25 Apr 2019 14:20:00 -0700 From: "H.J. Lu" To: binutils@sourceware.org Subject: [PATCH] Don't complain undefined weak dynamic reference Date: Thu, 25 Apr 2019 21:20:00 -0000 Message-Id: <20190425212000.4919-1-hjl.tools@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-IsSubscribed: yes X-SW-Source: 2019-04/txt/msg00240.txt.bz2 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. --- bfd/elflink.c | 2 +- ld/testsuite/ld-plugin/lto.exp | 12 ++++++++++++ ld/testsuite/ld-plugin/pr24486a.c | 8 ++++++++ ld/testsuite/ld-plugin/pr24486b.c | 8 ++++++++ ld/testsuite/ld-plugin/pr24486c.c | 1 + 5 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 ld/testsuite/ld-plugin/pr24486a.c create mode 100644 ld/testsuite/ld-plugin/pr24486b.c create mode 100644 ld/testsuite/ld-plugin/pr24486c.c diff --git a/bfd/elflink.c b/bfd/elflink.c index 81e667dab0..ddeaa08d50 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/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp index b13a77333f..e913c6f203 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 0000000000..def0139598 --- /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 0000000000..3aabe2a395 --- /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 0000000000..f289177d3e --- /dev/null +++ b/ld/testsuite/ld-plugin/pr24486c.c @@ -0,0 +1 @@ +int FLAGS_verbose; -- 2.20.1