summaryrefslogtreecommitdiff
path: root/ld/ldfile.c
diff options
context:
space:
mode:
authorDave Korn <dave.korn@artimi.com>2010-11-05 07:20:06 +0000
committerDave Korn <dave.korn@artimi.com>2010-11-05 07:20:06 +0000
commit9167e5c6b080baae619af527ee43cf89e1898b6f (patch)
treea9a33c8902be5853527dac356f360dc70411ff1e /ld/ldfile.c
parentf3a4fd276535a2c8477b29c49480dbf90f85f087 (diff)
downloadbinutils-redhat-9167e5c6b080baae619af527ee43cf89e1898b6f.tar.gz
* plugin.h (plugin_active_plugins_p): New prototype.
(is_ir_dummy_bfd): Delete prototype. * plugin.c: Fix formatting issues. (is_ir_dummy_bfd): Make static. (plugin_active_plugins_p): New function. * ldfile.c (ldfile_try_open_bfd): Use it to save work if no plugins are loaded. Always close file descriptor after claim handler returns. * ldmain.c (add_archive_element): Likewise.
Diffstat (limited to 'ld/ldfile.c')
-rw-r--r--ld/ldfile.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/ld/ldfile.c b/ld/ldfile.c
index 701b3803ca..6364469071 100644
--- a/ld/ldfile.c
+++ b/ld/ldfile.c
@@ -312,7 +312,8 @@ success:
bfd_object that it sets the bfd's arch and mach, which
will be needed when and if we want to bfd_create a new
one using this one as a template. */
- if (bfd_check_format (entry->the_bfd, bfd_object))
+ if (bfd_check_format (entry->the_bfd, bfd_object)
+ && plugin_active_plugins_p ())
{
int fd = open (attempt, O_RDONLY | O_BINARY);
if (fd >= 0)
@@ -330,6 +331,8 @@ success:
if (plugin_call_claim_file (&file, &claimed))
einfo (_("%P%F: %s: plugin reported error claiming file\n"),
plugin_error_plugin ());
+ /* fd belongs to us, not the plugin; but we don't need it. */
+ close (fd);
if (claimed)
{
/* Discard the real file's BFD and substitute the dummy one. */
@@ -340,10 +343,9 @@ success:
}
else
{
- /* If plugin didn't claim the file, we don't need the fd or the
- dummy bfd. Can't avoid speculatively creating it, alas. */
+ /* If plugin didn't claim the file, we don't need the dummy
+ bfd. Can't avoid speculatively creating it, alas. */
bfd_close_all_done (file.handle);
- close (fd);
entry->claimed = FALSE;
}
}