libctf: ELF file opening via BFD
authorNick Alcock <nick.alcock@oracle.com>
Wed, 24 Apr 2019 09:46:39 +0000 (10:46 +0100)
committerNick Alcock <nick.alcock@oracle.com>
Tue, 28 May 2019 16:08:08 +0000 (17:08 +0100)
commit143dce8481f09f60704ab52b98cf8fe6d8b29fc9
tree0c7fdc61341278f34fc4e0e6d7cce936971ec3dc
parent9402cc593f4aa54677203efa9a92c4f28d3033eb
libctf: ELF file opening via BFD

These functions let you open an ELF file with a customarily-named CTF
section in it, automatically opening the CTF file or archive and
associating the symbol and string tables in the ELF file with the CTF
container, so that you can look up the types of symbols in the ELF file
via ctf_lookup_by_symbol(), and so that strings can be shared between
the ELF file and CTF container, to save space.

It uses BFD machinery to do so.  This has now been lightly tested and
seems to work.  In particular, if you already have a bfd you can pass
it in to ctf_bfdopen(), and if you want a bfd made for you you can
call ctf_open() or ctf_fdopen(), optionally specifying a target (or
try once without a target and then again with one if you get
ECTF_BFD_AMBIGUOUS back).

We use a forward declaration for the struct bfd in ctf-api.h, so that
ctf-api.h users are not required to pull in <bfd.h>.  (This is mostly
for the sake of readelf.)

libctf/
* ctf-open-bfd.c: New file.
* ctf-open.c (ctf_close): New.
* ctf-impl.h: Include bfd.h.
(ctf_file): New members ctf_data_mmapped, ctf_data_mmapped_len.
(ctf_archive_internal): New members ctfi_abfd, ctfi_data,
ctfi_bfd_close.
(ctf_bfdopen_ctfsect): New declaration.
(_CTF_SECTION): likewise.

include/
* ctf-api.h (struct bfd): New forward.
(ctf_fdopen): New.
(ctf_bfdopen): Likewise.
(ctf_open): Likewise.
(ctf_arc_open): Likewise.
include/ChangeLog
include/ctf-api.h
libctf/ChangeLog
libctf/ctf-impl.h
libctf/ctf-open-bfd.c [new file with mode: 0644]
libctf/ctf-open.c