From: "H.J. Lu" <hongjiu.lu@intel.com>
To: binutils@sourceware.org
Subject: [PATCH] PR ld/16746: Don't issue a warning for reference in LTO IR
Date: Tue, 25 Mar 2014 20:40:00 -0000 [thread overview]
Message-ID: <20140325203952.GA11925@intel.com> (raw)
References in LTO IR may be removed by LTO later. Instead, make a
warning symbol if needed. Warnings will be handled after LTO resolves
all references. OK to install?
Thanks.
H.J.
---
bfd/
PR ld/16746
* linker.c (_bfd_generic_link_add_one_symbol): Don't issue a
warning for reference in LTO IR which may be removed by LTO later.
ld/testsuite/
PR ld/16746
* ld-plugin/lto.exp: Add 4 tests for PR ld/16746.
* ld-plugin/pr16746a.c: New file.
* ld-plugin/pr16746b.c: Likewise.
* ld-plugin/pr16746c.c: Likewise.
* ld-plugin/pr16746d.c: Likewise.
---
bfd/ChangeLog | 6 ++++++
bfd/linker.c | 12 ++++++++++--
ld/testsuite/ChangeLog | 9 +++++++++
ld/testsuite/ld-plugin/lto.exp | 26 ++++++++++++++++++++++++++
ld/testsuite/ld-plugin/pr16746a.c | 3 +++
ld/testsuite/ld-plugin/pr16746b.c | 5 +++++
ld/testsuite/ld-plugin/pr16746c.c | 8 ++++++++
ld/testsuite/ld-plugin/pr16746d.c | 8 ++++++++
8 files changed, 75 insertions(+), 2 deletions(-)
create mode 100644 ld/testsuite/ld-plugin/pr16746a.c
create mode 100644 ld/testsuite/ld-plugin/pr16746b.c
create mode 100644 ld/testsuite/ld-plugin/pr16746c.c
create mode 100644 ld/testsuite/ld-plugin/pr16746d.c
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index c719d24..630c5a8 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2014-03-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/16746
+ * linker.c (_bfd_generic_link_add_one_symbol): Don't issue a
+ warning for reference in LTO IR which may be removed by LTO later.
+
2014-03-25 Will Newton <will.newton@linaro.org>
* elfnn-aarch64.c (elfNN_aarch64_finish_dynamic_sections):
diff --git a/bfd/linker.c b/bfd/linker.c
index a20a276..4eeb363 100644
--- a/bfd/linker.c
+++ b/bfd/linker.c
@@ -1902,8 +1902,10 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info,
break;
case WARNC:
- /* Issue a warning and cycle. */
- if (h->u.i.warning != NULL)
+ /* Issue a warning and cycle. Don't issue a warning for
+ reference in LTO IR which may be removed by LTO later. */
+ if (h->u.i.warning != NULL
+ && (abfd->flags & BFD_PLUGIN) == 0)
{
if (! (*info->callbacks->warning) (info, h->u.i.warning,
h->root.string, abfd,
@@ -1928,6 +1930,11 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info,
break;
case WARN:
+ /* Don't issue a warning for reference in LTO IR which may be
+ removed by LTO later. Make a warning symbol instead. */
+ if ((hash_entry_bfd (h)->flags & BFD_PLUGIN) != 0)
+ goto mwarn;
+
/* Issue a warning. */
if (! (*info->callbacks->warning) (info, string, h->root.string,
hash_entry_bfd (h), NULL, 0))
@@ -1949,6 +1956,7 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info,
}
/* Fall through. */
case MWARN:
+mwarn:
/* Make a warning symbol. */
{
struct bfd_link_hash_entry *sub;
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index d200277..21df737 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2014-03-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/16746
+ * ld-plugin/lto.exp: Add 4 tests for PR ld/16746.
+ * ld-plugin/pr16746a.c: New file.
+ * ld-plugin/pr16746b.c: Likewise.
+ * ld-plugin/pr16746c.c: Likewise.
+ * ld-plugin/pr16746d.c: Likewise.
+
2014-03-25 Will Newton <will.newton@linaro.org>
* ld-aarch64/aarch64-elf.exp: Add relasz dump test.
diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
index af7307f..c37ecf9 100644
--- a/ld/testsuite/ld-plugin/lto.exp
+++ b/ld/testsuite/ld-plugin/lto.exp
@@ -205,6 +205,18 @@ set lto_link_elf_tests {
{"Build libpr15146d.a"
"" "-flto -O2"
{pr15146d.c} {} "lib15146d.a"}
+ {"Build libpr16746a.a"
+ "" ""
+ {pr16746a.c pr16746b.c} {} "lib15146a.a"}
+ {"Build libpr16746b.a"
+ "" "-O2 -flto"
+ {pr16746c.c pr16746d.c} {} "lib15146b.a"}
+ {"PR ld/16746 (1)"
+ "-O2 -flto -fuse-linker-plugin tmpdir/pr16746a.o tmpdir/pr16746c.o" "-O2 -flto"
+ {dummy.c} {} "pr16746a.exe"}
+ {"PR ld/16746 (2)"
+ "-O2 -flto -fuse-linker-plugin tmpdir/pr16746c.o tmpdir/pr16746a.o" "-O2 -flto"
+ {dummy.c} {} "pr16746b.exe"}
}
# Check final symbols in executables.
@@ -308,6 +320,20 @@ if { [is_elf_format] && [check_lto_shared_available] } {
} {
fail $testname
}
+ set testname "PR ld/16746 (3)"
+ set exec_output [run_host_cmd "$CC" "$gcc_gas_flag $gcc_ld_flag -O2 -flto -fuse-linker-plugin tmpdir/pr16746b.o tmpdir/pr16746d.o"]
+ if { [ regexp "warning: foobar" $exec_output ] && ![ regexp "symbol from plugin" $exec_output ] } {
+ pass $testname
+ } {
+ fail $testname
+ }
+ set testname "PR ld/16746 (4)"
+ set exec_output [run_host_cmd "$CC" "$gcc_gas_flag $gcc_ld_flag -O2 -flto -fuse-linker-plugin tmpdir/pr16746d.o tmpdir/pr16746b.o"]
+ if { [ regexp "warning: foobar" $exec_output ] && ![ regexp "symbol from plugin" $exec_output ] } {
+ pass $testname
+ } {
+ fail $testname
+ }
}
set testname "Build liblto-11.a"
diff --git a/ld/testsuite/ld-plugin/pr16746a.c b/ld/testsuite/ld-plugin/pr16746a.c
new file mode 100644
index 0000000..1705ef1
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr16746a.c
@@ -0,0 +1,3 @@
+static const char __evoke_link_warning_foobar[]
+ __attribute__ ((used, section (".gnu.warning.foobar\n\t#")))
+ = "foobar";
diff --git a/ld/testsuite/ld-plugin/pr16746b.c b/ld/testsuite/ld-plugin/pr16746b.c
new file mode 100644
index 0000000..c3b7a78
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr16746b.c
@@ -0,0 +1,5 @@
+static const char __evoke_link_warning_foobar[]
+ __attribute__ ((used, section (".gnu.warning.foobar\n\t#")))
+ = "foobar";
+
+void foobar (void) {}
diff --git a/ld/testsuite/ld-plugin/pr16746c.c b/ld/testsuite/ld-plugin/pr16746c.c
new file mode 100644
index 0000000..fb68ab7
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr16746c.c
@@ -0,0 +1,8 @@
+extern void foobar (void);
+int
+main (int argc, char **argv)
+{
+ if (__builtin_constant_p (argc))
+ foobar ();
+ return 0;
+}
diff --git a/ld/testsuite/ld-plugin/pr16746d.c b/ld/testsuite/ld-plugin/pr16746d.c
new file mode 100644
index 0000000..1fee4dd
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr16746d.c
@@ -0,0 +1,8 @@
+extern void foobar (void);
+int
+main (int argc, char **argv)
+{
+ if (!__builtin_constant_p (argc))
+ foobar ();
+ return 0;
+}
--
1.8.5.3
next reply other threads:[~2014-03-25 20:40 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-25 20:40 H.J. Lu [this message]
2014-03-25 22:39 ` Alan Modra
2014-03-25 22:50 ` H.J. Lu
2014-03-25 23:53 ` Alan Modra
2014-03-26 0:41 ` H.J. Lu
2014-03-26 19:29 ` H.J. Lu
2014-08-07 0:42 Merge WARN and CWARN cases in _bfd_generic_link_add_one_symbol Alan Modra
2014-08-07 0:55 ` [PATCH] PR ld/16746: Don't issue a warning for reference in LTO IR Alan Modra
2014-08-11 22:21 ` Hans-Peter Nilsson
2014-08-12 1:12 ` Alan Modra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140325203952.GA11925@intel.com \
--to=hongjiu.lu@intel.com \
--cc=binutils@sourceware.org \
--cc=hjl.tools@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).