aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2020-02-10 19:01:42 -0800
committerH.J. Lu <hjl.tools@gmail.com>2020-02-10 19:01:53 -0800
commit0aa99dcd70bce68f8efef310350a6294e1143382 (patch)
treeff8678bad1747516104097a8860d8eb775f370b8 /ld
parent2f5dd314d60e25b3094694999889c72a49fee76b (diff)
downloadfsf-binutils-gdb-0aa99dcd70bce68f8efef310350a6294e1143382.zip
fsf-binutils-gdb-0aa99dcd70bce68f8efef310350a6294e1143382.tar.gz
fsf-binutils-gdb-0aa99dcd70bce68f8efef310350a6294e1143382.tar.bz2
Use GCC LTO wrapper to get real symbols from LTO IR objects
GCC LTO wrapper is needed to extract real symbols from LTO IR objects. This patch does the following: 1. Set up GCC LTO wrapper for each LTO IR object. 2. Run GCC LTO wrapper to get the real object. 3. Extract symbol info from the real object. 4. Cleanup afterwards. bfd/ PR binutils/25355 * configure.ac (HAVE_EXECUTABLE_SUFFIX): New AC_DEFINE. (EXECUTABLE_SUFFIX): Likewise. * config.in: Regenerated. * configure: Likewise. * plugin.c (bfd_plugin_close_and_cleanup): Removed. (plugin_list_entry): Add all_symbols_read, cleanup_handler, gcc, lto_wrapper, resolution_file, resolution_option, gcc_env, real_bfd, real_nsyms, real_syms, lto_nsyms and lto_syms. (get_lto_wrapper): New. (setup_lto_wrapper_env): Likewise. (current_plugin): Likewise. (register_all_symbols_read): Likewise. (register_cleanup): Likewise. (get_symbols): Likewise. (add_input_file): Likewise. (bfd_plugin_close_and_cleanup): Likewise. (claim_file): Removed. (register_claim_file): Set current_plugin->claim_file. (add_symbols): Make a copy of LTO symbols. Set lto_nsyms and lto_syms in current_plugin. (try_claim): Use current_plugin->claim_file. Call LTO plugin all_symbols_read handler. Copy real symbols to plugin_data. Call LTO plugin cleanup handler. Clean up for LTO wrapper. (try_load_plugin): Don't reuse the previous plugin for LTO wrapper. Set up GCC LTO wrapper if possible. Don't set plugin_list_iter->claim_file. (bfd_plugin_canonicalize_symtab): Use real LTO symbols if possible. * plugin.h (plugin_data_struct): Add real_bfd, real_nsyms and real_syms. ld/ PR binutils/25355 * testsuite/ld-plugin/lto.exp: Run PR binutils/25355 test. * testsuite/ld-plugin/pr25355.c: New file. * testsuite/ld-plugin/pr25355.d: Likewise. * testsuite/lib/ld-lib.exp (run_cc_link_tests): Support compile only dump.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog9
-rw-r--r--ld/testsuite/ld-plugin/lto.exp5
-rw-r--r--ld/testsuite/ld-plugin/pr25355.c2
-rw-r--r--ld/testsuite/ld-plugin/pr25355.d4
-rw-r--r--ld/testsuite/lib/ld-lib.exp1
5 files changed, 21 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index c3b5541..57c215f 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,12 @@
+2020-02-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/25355
+ * testsuite/ld-plugin/lto.exp: Run PR binutils/25355 test.
+ * testsuite/ld-plugin/pr25355.c: New file.
+ * testsuite/ld-plugin/pr25355.d: Likewise.
+ * testsuite/lib/ld-lib.exp (run_cc_link_tests): Support compile
+ only dump.
+
2020-02-07 H.J. Lu <hongjiu.lu@intel.com>
* testsuite/ld-unique/unique.exp (contains_unique_symbol): Updated.
diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
index 9b03b7b3..1b44b0d 100644
--- a/ld/testsuite/ld-plugin/lto.exp
+++ b/ld/testsuite/ld-plugin/lto.exp
@@ -234,6 +234,11 @@ set lto_link_tests [list \
[list "Build pr24406-2b.o" \
"" "-O2 -fno-lto" \
{pr24406-2b.c}] \
+ [list "pr25355.o" \
+ "" \
+ "-flto -fno-common $lto_no_fat" \
+ {pr25355.c} \
+ [list [list "nm" "$plug_opt" "pr25355.d"]]] \
]
if { [at_least_gcc_version 4 7] } {
diff --git a/ld/testsuite/ld-plugin/pr25355.c b/ld/testsuite/ld-plugin/pr25355.c
new file mode 100644
index 0000000..99f01fb
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr25355.c
@@ -0,0 +1,2 @@
+int nm_test_var;
+int nm_test_var2 = 1234;
diff --git a/ld/testsuite/ld-plugin/pr25355.d b/ld/testsuite/ld-plugin/pr25355.d
new file mode 100644
index 0000000..98d10ab
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr25355.d
@@ -0,0 +1,4 @@
+#...
+[0-9a-f]+ B _?nm_test_var
+[0-9a-f]+ D _?nm_test_var2
+#pass
diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
index 08e2d69..015eda6 100644
--- a/ld/testsuite/lib/ld-lib.exp
+++ b/ld/testsuite/lib/ld-lib.exp
@@ -928,6 +928,7 @@ proc run_cc_link_tests { ldtests } {
if { $binfile eq "tmpdir/" } {
# compile only
+ set binfile $objfile
} elseif { [regexp ".*\\.a$" $binfile] } {
if { ![ar_simple_create $ar $ldflags $binfile "$objfiles"] } {
set failed 1