Handle NULL iostream in bfd_plugin_object_p.
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 15 Sep 2010 17:12:59 +0000 (17:12 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 15 Sep 2010 17:12:59 +0000 (17:12 +0000)
2010-09-15  H.J. Lu  <hongjiu.lu@intel.com>

PR binutils/12004
* plugin.c (bfd_plugin_object_p): Handle NULL iostream.

bfd/ChangeLog
bfd/plugin.c

index 4a6f88ea6fa20d19fa8b309fe11927d4c027d8cd..84b6be633a4a799c9f198e1929201edadc96391f 100644 (file)
@@ -1,3 +1,8 @@
+2010-09-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR binutils/12004
+       * plugin.c (bfd_plugin_object_p): Handle NULL iostream.
+
 2010-09-14  Kai Tietz  <kai.tietz@onevision.com>
 
        * pe-x86_64.c (COFF_SECTION_ALIGNMENT_ENTRIES): Make
index 4c24a7f6a22f36c384cbc12c50f8ea8f7afb0c2a..a46bf905c9990f002bb44308365e3f6e00ab8f7c 100644 (file)
@@ -233,26 +233,31 @@ bfd_plugin_object_p (bfd *abfd)
   int claimed = 0;
   int t = load_plugin ();
   struct ld_plugin_input_file file;
+  bfd *iobfd;
+
   if (!t)
     return NULL;
 
   file.name = abfd->filename;
 
-  if (abfd->iostream)
+  if (abfd->my_archive)
     {
-      file.fd = fileno ((FILE *) abfd->iostream);
-      file.offset = 0;
-      file.filesize = 0; /*FIXME*/
+      iobfd = abfd->my_archive;
+      file.offset = abfd->origin;
+      file.filesize = arelt_size (abfd);
     }
   else
     {
-      bfd *archive = abfd->my_archive;
-      BFD_ASSERT (archive);
-      file.fd = fileno ((FILE *) archive->iostream);
-      file.offset = abfd->origin;
-      file.filesize = arelt_size (abfd);
-
+      iobfd = abfd;
+      file.offset = 0;
+      file.filesize = 0; /*FIXME*/
     }
+
+  if (!iobfd->iostream && !bfd_open_file (iobfd))
+    return NULL;
+
+  file.fd = fileno ((FILE *) iobfd->iostream);
+
   file.handle = abfd;
   claim_file (&file, &claimed);
   if (!claimed)