diff options
author | Alan Modra <amodra@gmail.com> | 2016-07-16 13:32:16 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2016-07-16 19:09:00 +0930 |
commit | 7d0b9ebc1e0079271a7c7737b53bc026525eab64 (patch) | |
tree | 975420444ead89bf45f08b8e620da1ce5f0ab6d2 /bfd | |
parent | aac502f7d7899d96477fbd83f0038235af641def (diff) | |
download | gdb-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/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/elflink.c | 1 | ||||
-rw-r--r-- | bfd/plugin.c | 57 | ||||
-rw-r--r-- | bfd/plugin.h | 3 |
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); |