aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2011-09-15 16:03:03 +0000
committerH.J. Lu <hjl.tools@gmail.com>2011-09-15 16:03:03 +0000
commit2b7e430865a5b95563993e327ef0e9f5f0ac81d2 (patch)
tree6d61bedd9b3d23ced5bdaba9e420c3e6be7ff93d
parentd93db82c586ea08f1dd57e56db0554fef0ae15b5 (diff)
downloadgdb-2b7e430865a5b95563993e327ef0e9f5f0ac81d2.zip
gdb-2b7e430865a5b95563993e327ef0e9f5f0ac81d2.tar.gz
gdb-2b7e430865a5b95563993e327ef0e9f5f0ac81d2.tar.bz2
Support thin archive member for LTO.
2011-09-15 Dmitry Gorbachev <d.g.gorbachev@gmail.com> PR ld/13183 * ldmain.c (add_archive_element): Support thin archive member for LTO.
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/ldmain.c10
2 files changed, 11 insertions, 5 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index e7a639c..99ef7b1 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2011-09-15 Dmitry Gorbachev <d.g.gorbachev@gmail.com>
+
+ PR ld/13183
+ * ldmain.c (add_archive_element): Support thin archive member
+ for LTO.
+
2011-08-26 Nick Clifton <nickc@redhat.com>
* po/es.po: Updated Spanish translation.
diff --git a/ld/ldmain.c b/ld/ldmain.c
index 567b697..3c0dbc4 100644
--- a/ld/ldmain.c
+++ b/ld/ldmain.c
@@ -808,12 +808,12 @@ add_archive_element (struct bfd_link_info *info,
BFD, but we still want to output the original BFD filename. */
orig_input = *input;
#ifdef ENABLE_PLUGINS
- if (bfd_my_archive (abfd) != NULL
- && plugin_active_plugins_p ()
- && !no_more_claiming)
+ if (plugin_active_plugins_p () && !no_more_claiming)
{
/* We must offer this archive member to the plugins to claim. */
- int fd = open (bfd_my_archive (abfd)->filename, O_RDONLY | O_BINARY);
+ const char *filename = (bfd_my_archive (abfd) != NULL
+ ? bfd_my_archive (abfd)->filename : abfd->filename);
+ int fd = open (filename, O_RDONLY | O_BINARY);
if (fd >= 0)
{
struct ld_plugin_input_file file;
@@ -822,7 +822,7 @@ add_archive_element (struct bfd_link_info *info,
member, not the whole file, and must exclude the header.
Fortunately for us, that is how the data is stored in the
origin field of the bfd and in the arelt_data. */
- file.name = bfd_my_archive (abfd)->filename;
+ file.name = filename;
file.offset = abfd->origin;
file.filesize = arelt_size (abfd);
file.fd = fd;