8sa1-binutils-gdb/include
Nick Alcock 2c78e92523 libctf, include: CTF-archive-wide symbol lookup
CTF archives may contain multiple dicts, each of which contain many
types and possibly a bunch of symtypetab entries relating to those
types: each symtypetab entry is going to appear in exactly one dict,
with the corresponding entries in the other dicts empty (either pads, or
indexed symtypetabs that do not mention that symbol).  But users of
libctf usually want to get back the type associated with a symbol
without having to dig around to find out which dict that type might be
in.

This adds machinery to do that -- and since you probably want to do it
repeatedly, it adds internal caching to the ctf-archive machinery so
that iteration over archives via ctf_archive_next and repeated symbol
lookups do not have to repeatedly reopen the archive.  (Iteration using
ctf_archive_iter will gain caching soon.)

Two new API functions:

ctf_dict_t *
ctf_arc_lookup_symbol (ctf_archive_t *arc, unsigned long symidx,
		       ctf_id_t *typep, int *errp);

This looks up the symbol with index SYMIDX in the archive ARC, returning
the dictionary in which it resides and optionally the type index as
well.  Errors are returned in ERRP.  The dict should be
ctf_dict_close()d when done, but is also cached inside the ctf_archive
so that the open cost is only paid once.  The result of the symbol
lookup is also cached internally, so repeated lookups of the same symbol
are nearly free.

void ctf_arc_flush_caches (ctf_archive_t *arc);

Flush all the caches. Done at close time, but also available as an API
function if users want to do it by hand.

include/ChangeLog
2020-11-20  Nick Alcock  <nick.alcock@oracle.com>

	* ctf-api.h (ctf_arc_lookup_symbol): New.
	(ctf_arc_flush_caches): Likewise.
	* ctf.h: Document new auto-ctf_import behaviour.

libctf/ChangeLog
2020-11-20  Nick Alcock  <nick.alcock@oracle.com>

	* ctf-impl.h (struct ctf_archive_internal) <ctfi_dicts>: New, dicts
	the archive machinery has opened and cached.
	<ctfi_symdicts>: New, cache of dicts containing symbols looked up.
	<ctfi_syms>: New, cache of types of symbols looked up.
	* ctf-archive.c (ctf_arc_close): Free them on close.
	(enosym): New, flag entry for 'symbol not present'.
	(ctf_arc_import_parent): New, automatically import the parent from
	".ctf" if this is a child in an archive and ".ctf" is present.
	(ctf_dict_open_sections): Use it.
	(ctf_archive_iter_internal): Likewise.
	(ctf_cached_dict_close): New, thunk around ctf_dict_close.
	(ctf_dict_open_cached): New, open and cache a dict.
	(ctf_arc_flush_caches): New, flush the caches.
	(ctf_arc_lookup_symbol): New, look up a symbol in (all members of)
	an archive, and cache the lookup.
	(ctf_archive_iter): Note the new caching behaviour.
	(ctf_archive_next): Use ctf_dict_open_cached.
	* libctf.ver: Add ctf_arc_lookup_symbol and ctf_arc_flush_caches.
2020-11-20 13:34:11 +00:00
..
aout Fixes for the magic number used in PDP11 AOUT binaries. 2020-04-14 14:41:27 +01:00
cgen Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
coff Remove powerpc PE support 2020-07-09 22:58:16 +09:30
elf Support SHF_GNU_RETAIN ELF section flag 2020-11-18 11:51:13 +00:00
gdb Update copyright year range in all GDB files. 2020-01-01 10:20:53 +04:00
mach-o Recognize some new Mach-O load commands 2020-06-22 14:29:20 +01:00
opcode aarch64: Extract Condition flag manipulation feature from Armv8.4-A 2020-11-16 21:07:17 +00:00
som PR26457 UBSAN: som.c:1794 left shift cannot be represented 2020-08-31 20:28:09 +09:30
vms Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
alloca-conf.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
ansidecl.h Update libiberty sources with changes in the gcc mainline. 2020-01-17 14:13:22 +00:00
bfdlink.h bfd, include, ld, binutils, libctf: CTF should use the dynstr/sym 2020-11-20 13:34:07 +00:00
binary-io.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
bout.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
ChangeLog libctf, include: CTF-archive-wide symbol lookup 2020-11-20 13:34:11 +00:00
ChangeLog-0415 binutils ChangeLog rotation 2016-01-01 22:59:17 +10:30
ChangeLog-2016 ChangeLog rotation 2017-01-02 13:55:05 +10:30
ChangeLog-2017 ChangeLog rotation 2018-01-03 17:49:42 +10:30
ChangeLog-2018 ChangeLog rotation 2019-01-01 21:25:40 +10:30
ChangeLog-2019 ChangeLog rotation 2020-01-01 18:12:08 +10:30
ChangeLog-9103 Add copyright notices 2012-12-10 12:48:03 +00:00
COPYING
COPYING3
ctf-api.h libctf, include: CTF-archive-wide symbol lookup 2020-11-20 13:34:11 +00:00
ctf.h libctf, include: CTF-archive-wide symbol lookup 2020-11-20 13:34:11 +00:00
demangle.h Update libiberty sources with changes in the gcc mainline. 2020-01-17 14:13:22 +00:00
diagnostics.h ada-lex.l: Ignore register diagnostic also for g++ defaulting to ISO C++17 2020-08-23 12:14:34 +02:00
dis-asm.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
dwarf2.def Sync libiberty and include with GCC for get_DW_UT_name. 2020-09-24 22:55:24 +02:00
dwarf2.h Sync libiberty and include with GCC for get_DW_UT_name. 2020-09-24 22:55:24 +02:00
dyn-string.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
environ.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
fibheap.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
filenames.h Sync config, include and libiberty with GCC 2020-06-24 16:52:48 -07:00
floatformat.h Sync include, libiberty with GCC. 2020-09-11 11:32:00 -07:00
fnmatch.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
fopen-bin.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
fopen-same.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
fopen-vms.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
gcc-c-fe.def Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
gcc-c-interface.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
gcc-cp-fe.def Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
gcc-cp-interface.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
gcc-interface.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
getopt.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
hashtab.h Merge upstream GCC changes for include/ and libiberty/ directories 2020-02-25 17:04:42 +00:00
hp-symtab.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
leb128.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
libiberty.h Remove the use of the register keyword in the libiberty.h header file - it is deprecated and incompatible with C++17. 2020-06-25 11:16:42 +01:00
longlong.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
lto-symtab.h include: Sync lto-symtab.h and plugin-api.h with GCC 2020-03-21 03:39:18 -07:00
MAINTAINERS Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
md5.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
oasys.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
objalloc.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
obstack.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
os9k.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
partition.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
plugin-api.h include: Sync plugin-api.h with GCC 2020-04-01 02:36:11 -07:00
progress.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
safe-ctype.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
sha1.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
simple-object.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
sort.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
splay-tree.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
symcat.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
timeval-utils.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
vtv-change-permission.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
xregex2.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
xregex.h merge from gcc 2011-07-25 17:11:48 +00:00
xtensa-config.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
xtensa-isa-internal.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
xtensa-isa.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30