aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2015-02-14 18:38:32 +1030
committerAlan Modra <amodra@gmail.com>2015-02-14 23:41:54 +1030
commitce875075f9c8acc57bb0ec516ae3ba50064e52b7 (patch)
treee3957d0a0a9b9931194f532155acd9386bcc71a3 /include
parent0a60f874dc25306c48fab8f7655813eb1bfeca8f (diff)
downloadgdb-ce875075f9c8acc57bb0ec516ae3ba50064e52b7.zip
gdb-ce875075f9c8acc57bb0ec516ae3ba50064e52b7.tar.gz
gdb-ce875075f9c8acc57bb0ec516ae3ba50064e52b7.tar.bz2
PR ld/17973 LTO file syms
LTO output objects have an STT_FILE symbol using the name of the file, a temporary file. This results in executables that can't be exactly reproduced, so the file name needs to be dropped. We don't want to lose all file symbols when linking a mix of lto and non-lto objects as a file symbol can be used to figure which source file generated a given local symbol. So lto output objects need to be marked. I chose to mark lto output objects with a new bfd flag. This flag is also used to fix a bug in the link-once handling; An object being loaded after "loading_lto_outputs" is set might be one extracted from an archive to satisfy new references from lto objects, not an lto object itself. The new flag is copied from archive to elements, and the same done for no_export. This fixes a bug in that --exclude-libs doesn't work with thin archives. I'm not completely happy with this part of the patch and may revist this to avoid the hack in _bfd_look_for_bfd_in_cache. PR ld/17973 include/ * bfdlink.h (struct bfd_link_info): Delete loading_lto_outputs. bfd/ * bfd.c (struct bfd): Add lto_output. * linker.c (_bfd_handle_already_linked): Explicitly test for objects added by the lto plugin. * opncls.c (_bfd_new_bfd_contained_in): Copy lto_output and no_export flags from archive. * archive.c (open_nested_file): New function, setting lto_output and no_export, extracted from.. (find_nested_archive): ..here. Flip params. Rename from _bfd_find_nested_archive. (_bfd_get_elt_at_filepos): Correct var typo. Use open_nested_file. (_bfd_look_for_bfd_in_cache): Copy no_export. * elflink.c (elf_link_add_object_symbols): Remove now unnecessary my_archive->no_export test. (elf_link_input_bfd): Drop existing lto_output STT_FILE syms. Don't use the file name when adding lto_output STT_FILE sym. * bfd-in2.h: Regenerate. ld/ * ldlang.h (struct lang_input_statement_flags): Add lto_output. * ldlang.c (lang_process): Don't set loading_lto_outputs. * ldfile.c (ldfile_try_open_bfd): Transfer entry flags.lto_output to bfd. * plugin.c (add_input_file, add_input_library): Set flags.lto_output.
Diffstat (limited to 'include')
-rw-r--r--include/ChangeLog5
-rw-r--r--include/bfdlink.h3
2 files changed, 5 insertions, 3 deletions
diff --git a/include/ChangeLog b/include/ChangeLog
index 24a141d..606ed90 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,8 @@
+2015-02-14 Alan Modra <amodra@gmail.com>
+
+ PR ld/17973
+ * bfdlink.h (struct bfd_link_info): Delete loading_lto_outputs.
+
2015-02-09 Mark Wielaard <mjw@redhat.com>
* dwarf2.h: Add DW_LANG_Fortran03 and DW_LANG_Fortran08.
diff --git a/include/bfdlink.h b/include/bfdlink.h
index add4971..6a02a3c 100644
--- a/include/bfdlink.h
+++ b/include/bfdlink.h
@@ -301,9 +301,6 @@ struct bfd_link_info
/* TRUE if the LTO plugin is active. */
unsigned int lto_plugin_active: 1;
- /* TRUE if we are loading LTO outputs. */
- unsigned int loading_lto_outputs: 1;
-
/* TRUE if global symbols in discarded sections should be stripped. */
unsigned int strip_discarded: 1;