aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2016-07-16 13:32:16 +0930
committerAlan Modra <amodra@gmail.com>2016-07-16 19:09:00 +0930
commit7d0b9ebc1e0079271a7c7737b53bc026525eab64 (patch)
tree975420444ead89bf45f08b8e620da1ce5f0ab6d2 /bfd
parentaac502f7d7899d96477fbd83f0038235af641def (diff)
downloadgdb-7d0b9ebc1e0079271a7c7737b53bc026525eab64.zip
gdb-7d0b9ebc1e0079271a7c7737b53bc026525eab64.tar.gz
gdb-7d0b9ebc1e0079271a7c7737b53bc026525eab64.tar.bz2
Don't include libbfd.h outside of bfd, part 6
Some messing with plugin code in order to not need arelt_size in ld code. File descriptor handling in ld/plugin.c is tidied too, simply duping the open fd rather than opening the file again. bfd/ * elflink.c: Include plugin-api.h. * plugin.c (bfd_plugin_open_input): New function, extracted from.. (try_claim): ..here. * plugin.h: Don't include bfd.h. (bfd_plugin_open_input): Declare. binutils/ * ar.c: Include plugin-api.h. * nm.c: Likewise. ld/ * plugin.c: Don't include libbfd.h. Include plugin-api.h before bfd/plugin.h. (plugin_object_p): Use bfd_plugin_open_input.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/elflink.c1
-rw-r--r--bfd/plugin.c57
-rw-r--r--bfd/plugin.h3
4 files changed, 39 insertions, 30 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index bf79618..9be7d89 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,13 @@
2016-07-16 Alan Modra <amodra@gmail.com>
+ * elflink.c: Include plugin-api.h.
+ * plugin.c (bfd_plugin_open_input): New function, extracted from..
+ (try_claim): ..here.
+ * plugin.h: Don't include bfd.h.
+ (bfd_plugin_open_input): Declare.
+
+2016-07-16 Alan Modra <amodra@gmail.com>
+
* targets.c (bfd_seach_for_target): Rename to..
(bfd_iterate_over_targets): ..this. Rewrite doc.
* bfd-in2.h: Regenerate.
diff --git a/bfd/elflink.c b/bfd/elflink.c
index b2a814f..a994b83 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -29,6 +29,7 @@
#include "libiberty.h"
#include "objalloc.h"
#if BFD_SUPPORTS_PLUGINS
+#include "plugin-api.h"
#include "plugin.h"
#endif
diff --git a/bfd/plugin.c b/bfd/plugin.c
index c66d95e..3931d27 100644
--- a/bfd/plugin.c
+++ b/bfd/plugin.c
@@ -158,49 +158,50 @@ bfd_plugin_set_program_name (const char *program_name)
plugin_program_name = program_name;
}
-static int
-try_claim (bfd *abfd)
+int
+bfd_plugin_open_input (bfd *ibfd, struct ld_plugin_input_file *file)
{
- int claimed = 0;
- struct ld_plugin_input_file file;
bfd *iobfd;
- file.name = abfd->filename;
-
- if (abfd->my_archive && !bfd_is_thin_archive (abfd->my_archive))
- {
- iobfd = abfd->my_archive;
- file.offset = abfd->origin;
- file.filesize = arelt_size (abfd);
- }
- else
- {
- iobfd = abfd;
- file.offset = 0;
- file.filesize = 0;
- }
+ iobfd = ibfd;
+ if (ibfd->my_archive && !bfd_is_thin_archive (ibfd->my_archive))
+ iobfd = ibfd->my_archive;
+ file->name = iobfd->filename;
if (!iobfd->iostream && !bfd_open_file (iobfd))
return 0;
- file.fd = fileno ((FILE *) iobfd->iostream);
+ file->fd = fileno ((FILE *) iobfd->iostream);
- if (!abfd->my_archive || bfd_is_thin_archive (abfd->my_archive))
+ if (iobfd == ibfd)
{
struct stat stat_buf;
- if (fstat (file.fd, &stat_buf))
+ if (fstat (file->fd, &stat_buf))
return 0;
- file.filesize = stat_buf.st_size;
+ file->offset = 0;
+ file->filesize = stat_buf.st_size;
+ }
+ else
+ {
+ file->offset = ibfd->origin;
+ file->filesize = arelt_size (ibfd);
}
+ return 1;
+}
+
+static int
+try_claim (bfd *abfd)
+{
+ int claimed = 0;
+ struct ld_plugin_input_file file;
+ if (!bfd_plugin_open_input (abfd, &file))
+ return 0;
file.handle = abfd;
- off_t cur_offset = lseek(file.fd, 0, SEEK_CUR);
+ off_t cur_offset = lseek (file.fd, 0, SEEK_CUR);
claim_file (&file, &claimed);
- lseek(file.fd, cur_offset, SEEK_SET);
- if (!claimed)
- return 0;
-
- return 1;
+ lseek (file.fd, cur_offset, SEEK_SET);
+ return claimed;
}
static int
diff --git a/bfd/plugin.h b/bfd/plugin.h
index 529f8c1..0867122 100644
--- a/bfd/plugin.h
+++ b/bfd/plugin.h
@@ -21,9 +21,8 @@
#ifndef _PLUGIN_H_
#define _PLUGIN_H_
-#include "bfd.h"
-
void bfd_plugin_set_program_name (const char *);
+int bfd_plugin_open_input (bfd *, struct ld_plugin_input_file *);
void bfd_plugin_set_plugin (const char *);
bfd_boolean bfd_plugin_target_p (const bfd_target *);
bfd_boolean bfd_plugin_specified_p (void);