From 028ed2b2b68055a3ff958dc0ff7d3daa95370434 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 15 Sep 2010 17:12:59 +0000 Subject: [PATCH] Handle NULL iostream in bfd_plugin_object_p. 2010-09-15 H.J. Lu PR binutils/12004 * plugin.c (bfd_plugin_object_p): Handle NULL iostream. --- bfd/ChangeLog | 5 +++++ bfd/plugin.c | 25 +++++++++++++++---------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 4a6f88ea6fa..84b6be633a4 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2010-09-15 H.J. Lu + + PR binutils/12004 + * plugin.c (bfd_plugin_object_p): Handle NULL iostream. + 2010-09-14 Kai Tietz * pe-x86_64.c (COFF_SECTION_ALIGNMENT_ENTRIES): Make diff --git a/bfd/plugin.c b/bfd/plugin.c index 4c24a7f6a22..a46bf905c99 100644 --- a/bfd/plugin.c +++ b/bfd/plugin.c @@ -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) -- 2.30.2