[PATCH] Use GCC LTO wrapper to get real symbols from LTO IR objects

H.J. Lu hjl.tools@gmail.com
Mon Feb 10 21:31:00 GMT 2020


On Mon, Feb 10, 2020 at 6:24 AM H.J. Lu <hjl.tools@gmail.com> 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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Use-GCC-LTO-wrapper-to-get-real-symbols-from-LTO-IR-.patch
Type: text/x-patch
Size: 19496 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20200210/be58b7e4/attachment.bin>


More information about the Binutils mailing list