Use GCC LTO wrapper to get real symbols from LTO IR objects
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 11 Feb 2020 03:01:42 +0000 (19:01 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 11 Feb 2020 03:01:53 +0000 (19:01 -0800)
commit0aa99dcd70bce68f8efef310350a6294e1143382
treeff8678bad1747516104097a8860d8eb775f370b8
parent2f5dd314d60e25b3094694999889c72a49fee76b
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.
bfd/ChangeLog
bfd/config.in
bfd/configure
bfd/configure.ac
bfd/plugin.c
bfd/plugin.h
ld/ChangeLog
ld/testsuite/ld-plugin/lto.exp
ld/testsuite/ld-plugin/pr25355.c [new file with mode: 0644]
ld/testsuite/ld-plugin/pr25355.d [new file with mode: 0644]
ld/testsuite/lib/ld-lib.exp