115 lines
3.8 KiB
Diff
115 lines
3.8 KiB
Diff
|
From 4c6d802e592b3762a149c343bc5722e065e57841 Mon Sep 17 00:00:00 2001
|
||
|
From: H.J. Lu <hjl.tools@gmail.com>
|
||
|
Date: Wed, 26 Mar 2014 12:18:59 -0700
|
||
|
Subject: [PATCH] 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.
|
||
|
---
|
||
|
ld/ChangeLog | 7 ++++
|
||
|
ld/ldmain.c | 43 ++++++++++++++++----------
|
||
|
ld/testsuite/ChangeLog | 64 ++++++++++++++++++++++------------------
|
||
|
ld/testsuite/ld-plugin/lto.exp | 4 +-
|
||
|
4 files changed, 70 insertions(+), 48 deletions(-)
|
||
|
|
||
|
diff --git a/ld/ldmain.c b/ld/ldmain.c
|
||
|
index ffc9f84..14253a6 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
|
||
|
--- a/ld/ldmain.c 2014-06-24 14:04:00.700594584 -0400
|
||
|
+++ b/ld/ldmain.c 2014-06-24 14:07:19.452270808 -0400
|
||
|
@@ -1172,24 +1172,14 @@
|
||
|
einfo ("%P: %s%s\n", _("warning: "), warning);
|
||
|
else if (symbol == NULL)
|
||
|
einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
|
||
|
- else if ((abfd->flags & BFD_PLUGIN) == 0)
|
||
|
+ 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/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
|
||
|
index af7307f..53543a6 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"}
|
||
|
--
|
||
|
1.7.1
|