On Mon, Feb 10, 2020 at 6:24 AM H.J. Lu wrote: > > 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 > * 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. Here is the updated patch to avoid mallocing plugin_list_iter for each IR object. -- H.J.