aboutsummaryrefslogtreecommitdiff
path: root/libctf/ctf-open.c
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2019-04-24 10:46:39 +0100
committerNick Alcock <nick.alcock@oracle.com>2019-05-28 17:08:08 +0100
commit143dce8481f09f60704ab52b98cf8fe6d8b29fc9 (patch)
tree0c7fdc61341278f34fc4e0e6d7cce936971ec3dc /libctf/ctf-open.c
parent9402cc593f4aa54677203efa9a92c4f28d3033eb (diff)
downloadgdb-143dce8481f09f60704ab52b98cf8fe6d8b29fc9.zip
gdb-143dce8481f09f60704ab52b98cf8fe6d8b29fc9.tar.gz
gdb-143dce8481f09f60704ab52b98cf8fe6d8b29fc9.tar.bz2
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.
Diffstat (limited to 'libctf/ctf-open.c')
-rw-r--r--libctf/ctf-open.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/libctf/ctf-open.c b/libctf/ctf-open.c
index 8c6294a..5230d09 100644
--- a/libctf/ctf-open.c
+++ b/libctf/ctf-open.c
@@ -1572,6 +1572,14 @@ ctf_file_close (ctf_file_t *fp)
ctf_free (fp);
}
+/* The converse of ctf_open(). ctf_open() disguises whatever it opens as an
+ archive, so closing one is just like closing an archive. */
+void
+ctf_close (ctf_archive_t *arc)
+{
+ ctf_arc_close (arc);
+}
+
/* Get the CTF archive from which this ctf_file_t is derived. */
ctf_archive_t *
ctf_get_arc (const ctf_file_t *fp)