From: H.J. Lu Date: Wed, 26 Mar 2014 19:18:59 +0000 (-0700) Subject: Scan all input files for symbol reference warning X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=4c6d802e592b3762a149c343bc5722e065e57841;p=deliverable%2Fbinutils-gdb.git Scan all input files for symbol reference warning This patch scans all input files for symbol reference warning if the symbol reference doesn't exist in the current input file. ld/ PR ld/16756 * ldmain.c (symbol_warning): New function. (warning_callback): Use it. Scan all input files for a reference to SYMBOL. ld/testsuite/ PR ld/16756 * ld-plugin/lto.exp: Expect filename and line number for PR ld/12760 test. --- diff --git a/ld/ChangeLog b/ld/ChangeLog index 292459b4d3..1c691fe131 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2014-03-27 H.J. Lu + + PR ld/16756 + * ldmain.c (symbol_warning): New function. + (warning_callback): Use it. Scan all input files for a reference + to SYMBOL. + 2014-03-17 Christopher Faylor * ld.texinfo: Document change in handling of --enable-auto-image-base. diff --git a/ld/ldmain.c b/ld/ldmain.c index ffc9f84acc..14253a6f0c 100644 --- a/ld/ldmain.c +++ b/ld/ldmain.c @@ -1150,6 +1150,25 @@ struct warning_callback_info asymbol **asymbols; }; +/* Look through the relocs to see if we can find a plausible address + for SYMBOL in ABFD. Return TRUE if found. Otherwise return FALSE. */ + +static bfd_boolean +symbol_warning (const char *warning, const char *symbol, bfd *abfd) +{ + struct warning_callback_info cinfo; + + if (!bfd_generic_link_read_symbols (abfd)) + einfo (_("%B%F: could not read symbols: %E\n"), abfd); + + cinfo.found = FALSE; + cinfo.warning = warning; + cinfo.symbol = symbol; + cinfo.asymbols = bfd_get_outsymbols (abfd); + bfd_map_over_sections (abfd, warning_find_reloc, &cinfo); + return cinfo.found; +} + /* This is called when there is a reference to a warning symbol. */ static bfd_boolean @@ -1172,24 +1191,14 @@ warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED, einfo ("%P: %s%s\n", _("warning: "), warning); else if (symbol == NULL) einfo ("%B: %s%s\n", abfd, _("warning: "), warning); - else + else if (! symbol_warning (warning, symbol, abfd)) { - struct warning_callback_info cinfo; - - /* Look through the relocs to see if we can find a plausible - address. */ - - if (!bfd_generic_link_read_symbols (abfd)) - einfo (_("%B%F: could not read symbols: %E\n"), abfd); - - cinfo.found = FALSE; - cinfo.warning = warning; - cinfo.symbol = symbol; - cinfo.asymbols = bfd_get_outsymbols (abfd); - bfd_map_over_sections (abfd, warning_find_reloc, &cinfo); - - if (! cinfo.found) - einfo ("%B: %s%s\n", abfd, _("warning: "), warning); + bfd *b; + /* Search all input files for a reference to SYMBOL. */ + for (b = info->input_bfds; b; b = b->link_next) + if (b != abfd && symbol_warning (warning, symbol, b)) + return TRUE; + einfo ("%B: %s%s\n", abfd, _("warning: "), warning); } return TRUE; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index d35eb0421f..b5d1344705 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,35 +1,41 @@ +2014-03-27 H.J. Lu + + PR ld/16756 + * ld-plugin/lto.exp: Expect filename and line number for PR + ld/12760 test. + 2014-03-27 Yury Gribov - Pavel Fedin + Pavel Fedin - * ld-arm/arm-app-abs32.d: Update expected disassembly, taking into + * ld-arm/arm-app-abs32.d: Update expected disassembly, taking into account the pretty printing of PLT entries. - * ld-arm/arm-app.d: Likewise. - * ld-arm/arm-lib-plt32.d: Likewise. - * ld-arm/arm-lib.d: Likewise. - * ld-arm/armthumb-lib.d: Likewise. - * ld-arm/cortex-a8-fix-b-plt.d: Likewise. - * ld-arm/cortex-a8-fix-bcc-plt.d: Likewise. - * ld-arm/cortex-a8-fix-bl-plt.d: Likewise. - * ld-arm/cortex-a8-fix-bl-rel-plt.d: Likewise. - * ld-arm/cortex-a8-fix-blx-plt.d: Likewise. - * ld-arm/farcall-mixed-app-v5.d: Likewise. - * ld-arm/farcall-mixed-app.d: Likewise. - * ld-arm/farcall-mixed-lib-v4t.d: Likewise. - * ld-arm/farcall-mixed-lib.d: Likewise. - * ld-arm/ifunc-10.dd: Likewise. - * ld-arm/ifunc-14.dd: Likewise. - * ld-arm/ifunc-15.dd: Likewise. - * ld-arm/ifunc-3.dd: Likewise. - * ld-arm/ifunc-4.dd: Likewise. - * ld-arm/ifunc-7.dd: Likewise. - * ld-arm/ifunc-8.dd: Likewise. - * ld-arm/ifunc-9.dd: Likewise. - * ld-arm/long-plt-format.d: Likewise. - * ld-arm/mixed-app-v5.d: Likewise. - * ld-arm/mixed-app.d: Likewise. - * ld-arm/mixed-lib.d: Likewise. - * ld-arm/thumb2-bl-undefweak.d: Likewise. - * ld-arm/thumb2-bl-undefweak1.d: Likewise. + * ld-arm/arm-app.d: Likewise. + * ld-arm/arm-lib-plt32.d: Likewise. + * ld-arm/arm-lib.d: Likewise. + * ld-arm/armthumb-lib.d: Likewise. + * ld-arm/cortex-a8-fix-b-plt.d: Likewise. + * ld-arm/cortex-a8-fix-bcc-plt.d: Likewise. + * ld-arm/cortex-a8-fix-bl-plt.d: Likewise. + * ld-arm/cortex-a8-fix-bl-rel-plt.d: Likewise. + * ld-arm/cortex-a8-fix-blx-plt.d: Likewise. + * ld-arm/farcall-mixed-app-v5.d: Likewise. + * ld-arm/farcall-mixed-app.d: Likewise. + * ld-arm/farcall-mixed-lib-v4t.d: Likewise. + * ld-arm/farcall-mixed-lib.d: Likewise. + * ld-arm/ifunc-10.dd: Likewise. + * ld-arm/ifunc-14.dd: Likewise. + * ld-arm/ifunc-15.dd: Likewise. + * ld-arm/ifunc-3.dd: Likewise. + * ld-arm/ifunc-4.dd: Likewise. + * ld-arm/ifunc-7.dd: Likewise. + * ld-arm/ifunc-8.dd: Likewise. + * ld-arm/ifunc-9.dd: Likewise. + * ld-arm/long-plt-format.d: Likewise. + * ld-arm/mixed-app-v5.d: Likewise. + * ld-arm/mixed-app.d: Likewise. + * ld-arm/mixed-lib.d: Likewise. + * ld-arm/thumb2-bl-undefweak.d: Likewise. + * ld-arm/thumb2-bl-undefweak1.d: Likewise. 2014-03-26 Alan Modra diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp index af7307f7e0..53543a6f25 100644 --- a/ld/testsuite/ld-plugin/lto.exp +++ b/ld/testsuite/ld-plugin/lto.exp @@ -116,14 +116,14 @@ set lto_link_tests { "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12758a.o -Wl,--start-group tmpdir/libpr12758.a -Wl,--end-group" "" {dummy.c} {} "pr12758.exe"} {"Build libdummy.a PR ld/12760" - "" "" + "" "-g -O0" {pr12760a.c} {} "libdummy.a"} {"Build libpr12760.a" "" "-flto -O2 -ffat-lto-objects" {pr12760b.c} {} "libpr12760.a"} {"PR ld/12760" "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12760a.o -Wl,--start-group tmpdir/libpr12760.a -Wl,--end-group" "" - {dummy.c} {} "pr12760.exe" "c" "warning: Bad bar"} + {dummy.c} {} "pr12760.exe" "c" "pr12760a.c:6: warning: Bad bar"} {"Build libpr13183.a" "-T" "-flto -O2 -ffat-lto-objects" {pr13183a.c} {} "libpr13183.a"}