Support thin archive member for LTO.
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 15 Sep 2011 16:03:03 +0000 (16:03 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 15 Sep 2011 16:03:03 +0000 (16:03 +0000)
2011-09-15  Dmitry Gorbachev  <d.g.gorbachev@gmail.com>

PR ld/13183
* ldmain.c (add_archive_element): Support thin archive member
for LTO.

ld/ChangeLog
ld/ldmain.c

index e7a639c..99ef7b1 100644 (file)
@@ -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.
index 567b697..3c0dbc4 100644 (file)
@@ -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;