Kyle McMartin cd1fc13
From 4c6d802e592b3762a149c343bc5722e065e57841 Mon Sep 17 00:00:00 2001
Kyle McMartin cd1fc13
From: H.J. Lu <hjl.tools@gmail.com>
Kyle McMartin cd1fc13
Date: Wed, 26 Mar 2014 12:18:59 -0700
Kyle McMartin cd1fc13
Subject: [PATCH] Scan all input files for symbol reference warning
Kyle McMartin cd1fc13
Kyle McMartin cd1fc13
This patch scans all input files for symbol reference warning if the
Kyle McMartin cd1fc13
symbol reference doesn't exist in the current input file.
Kyle McMartin cd1fc13
Kyle McMartin cd1fc13
ld/
Kyle McMartin cd1fc13
Kyle McMartin cd1fc13
	PR ld/16756
Kyle McMartin cd1fc13
	* ldmain.c (symbol_warning): New function.
Kyle McMartin cd1fc13
	(warning_callback): Use it.  Scan all input files for a reference
Kyle McMartin cd1fc13
	to SYMBOL.
Kyle McMartin cd1fc13
Kyle McMartin cd1fc13
ld/testsuite/
Kyle McMartin cd1fc13
Kyle McMartin cd1fc13
	PR ld/16756
Kyle McMartin cd1fc13
	* ld-plugin/lto.exp: Expect filename and line number for PR
Kyle McMartin cd1fc13
	ld/12760 test.
Kyle McMartin cd1fc13
---
Kyle McMartin cd1fc13
 ld/ChangeLog                   |    7 ++++
Kyle McMartin cd1fc13
 ld/ldmain.c                    |   43 ++++++++++++++++----------
Kyle McMartin cd1fc13
 ld/testsuite/ChangeLog         |   64 ++++++++++++++++++++++------------------
Kyle McMartin cd1fc13
 ld/testsuite/ld-plugin/lto.exp |    4 +-
Kyle McMartin cd1fc13
 4 files changed, 70 insertions(+), 48 deletions(-)
Kyle McMartin cd1fc13
Kyle McMartin cd1fc13
diff --git a/ld/ldmain.c b/ld/ldmain.c
Kyle McMartin cd1fc13
index ffc9f84..14253a6 100644
Kyle McMartin cd1fc13
--- a/ld/ldmain.c
Kyle McMartin cd1fc13
+++ b/ld/ldmain.c
Kyle McMartin cd1fc13
@@ -1150,6 +1150,25 @@ struct warning_callback_info
Kyle McMartin cd1fc13
   asymbol **asymbols;
Kyle McMartin cd1fc13
 };
Kyle McMartin cd1fc13
 
Kyle McMartin cd1fc13
+/* Look through the relocs to see if we can find a plausible address
Kyle McMartin cd1fc13
+   for SYMBOL in ABFD.  Return TRUE if found.  Otherwise return FALSE.  */
Kyle McMartin cd1fc13
+
Kyle McMartin cd1fc13
+static bfd_boolean
Kyle McMartin cd1fc13
+symbol_warning (const char *warning, const char *symbol, bfd *abfd)
Kyle McMartin cd1fc13
+{
Kyle McMartin cd1fc13
+  struct warning_callback_info cinfo;
Kyle McMartin cd1fc13
+
Kyle McMartin cd1fc13
+  if (!bfd_generic_link_read_symbols (abfd))
Kyle McMartin cd1fc13
+    einfo (_("%B%F: could not read symbols: %E\n"), abfd);
Kyle McMartin cd1fc13
+
Kyle McMartin cd1fc13
+  cinfo.found = FALSE;
Kyle McMartin cd1fc13
+  cinfo.warning = warning;
Kyle McMartin cd1fc13
+  cinfo.symbol = symbol;
Kyle McMartin cd1fc13
+  cinfo.asymbols = bfd_get_outsymbols (abfd);
Kyle McMartin cd1fc13
+  bfd_map_over_sections (abfd, warning_find_reloc, &cinfo);
Kyle McMartin cd1fc13
+  return cinfo.found;
Kyle McMartin cd1fc13
+}
Kyle McMartin cd1fc13
+
Kyle McMartin cd1fc13
 /* This is called when there is a reference to a warning symbol.  */
Kyle McMartin cd1fc13
 
Kyle McMartin cd1fc13
 static bfd_boolean
Kyle McMartin cd1fc13
--- a/ld/ldmain.c	2014-06-24 14:04:00.700594584 -0400
Kyle McMartin cd1fc13
+++ b/ld/ldmain.c	2014-06-24 14:07:19.452270808 -0400
Kyle McMartin cd1fc13
@@ -1172,24 +1172,14 @@
Kyle McMartin cd1fc13
     einfo ("%P: %s%s\n", _("warning: "), warning);
Kyle McMartin cd1fc13
   else if (symbol == NULL)
Kyle McMartin cd1fc13
     einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
Kyle McMartin cd1fc13
-  else if ((abfd->flags & BFD_PLUGIN) == 0)
Kyle McMartin cd1fc13
+  else if (! symbol_warning (warning, symbol, abfd))
Kyle McMartin cd1fc13
     {
Kyle McMartin cd1fc13
-      struct warning_callback_info cinfo;
Kyle McMartin cd1fc13
-
Kyle McMartin cd1fc13
-      /* Look through the relocs to see if we can find a plausible
Kyle McMartin cd1fc13
-	 address.  */
Kyle McMartin cd1fc13
-
Kyle McMartin cd1fc13
-      if (!bfd_generic_link_read_symbols (abfd))
Kyle McMartin cd1fc13
-	einfo (_("%B%F: could not read symbols: %E\n"), abfd);
Kyle McMartin cd1fc13
-
Kyle McMartin cd1fc13
-      cinfo.found = FALSE;
Kyle McMartin cd1fc13
-      cinfo.warning = warning;
Kyle McMartin cd1fc13
-      cinfo.symbol = symbol;
Kyle McMartin cd1fc13
-      cinfo.asymbols = bfd_get_outsymbols (abfd);
Kyle McMartin cd1fc13
-      bfd_map_over_sections (abfd, warning_find_reloc, &cinfo);
Kyle McMartin cd1fc13
-
Kyle McMartin cd1fc13
-      if (! cinfo.found)
Kyle McMartin cd1fc13
-	einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
Kyle McMartin cd1fc13
+      bfd *b;
Kyle McMartin cd1fc13
+      /* Search all input files for a reference to SYMBOL.  */
Kyle McMartin cd1fc13
+      for (b = info->input_bfds; b; b = b->link_next)
Kyle McMartin cd1fc13
+	if (b != abfd && symbol_warning (warning, symbol, b))
Kyle McMartin cd1fc13
+	  return TRUE;
Kyle McMartin cd1fc13
+      einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
Kyle McMartin cd1fc13
     }
Kyle McMartin cd1fc13
 
Kyle McMartin cd1fc13
   return TRUE;
Kyle McMartin cd1fc13
diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
Kyle McMartin cd1fc13
index af7307f..53543a6 100644
Kyle McMartin cd1fc13
--- a/ld/testsuite/ld-plugin/lto.exp
Kyle McMartin cd1fc13
+++ b/ld/testsuite/ld-plugin/lto.exp
Kyle McMartin cd1fc13
@@ -116,14 +116,14 @@ set lto_link_tests {
Kyle McMartin cd1fc13
    "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12758a.o -Wl,--start-group tmpdir/libpr12758.a -Wl,--end-group" ""
Kyle McMartin cd1fc13
    {dummy.c} {} "pr12758.exe"}
Kyle McMartin cd1fc13
   {"Build libdummy.a PR ld/12760"
Kyle McMartin cd1fc13
-   "" ""
Kyle McMartin cd1fc13
+   "" "-g -O0"
Kyle McMartin cd1fc13
    {pr12760a.c} {} "libdummy.a"}
Kyle McMartin cd1fc13
   {"Build libpr12760.a"
Kyle McMartin cd1fc13
    "" "-flto -O2 -ffat-lto-objects"
Kyle McMartin cd1fc13
    {pr12760b.c} {} "libpr12760.a"}
Kyle McMartin cd1fc13
   {"PR ld/12760"
Kyle McMartin cd1fc13
    "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12760a.o -Wl,--start-group tmpdir/libpr12760.a -Wl,--end-group" ""
Kyle McMartin cd1fc13
-   {dummy.c} {} "pr12760.exe" "c" "warning: Bad bar"}
Kyle McMartin cd1fc13
+   {dummy.c} {} "pr12760.exe" "c" "pr12760a.c:6: warning: Bad bar"}
Kyle McMartin cd1fc13
   {"Build libpr13183.a"
Kyle McMartin cd1fc13
    "-T" "-flto -O2 -ffat-lto-objects"
Kyle McMartin cd1fc13
    {pr13183a.c} {} "libpr13183.a"}
Kyle McMartin cd1fc13
-- 
Kyle McMartin cd1fc13
1.7.1