libctf: make ctf_lookup of symbols by name work in more cases

In particular, we don't need a symbol table if we're looking up a
symbol by name and that type of symbol has an indexed symtypetab,
since in that case we get the name from the symtypetab index, not
from the symbol table.

This lets you do symbol lookups in unlinked object files and unlinked
dicts written out via libctf's writeout functions.

libctf/

	* ctf-lookup.c (ctf_lookup_by_sym_or_name): Allow lookups
	by index even when there is no symtab.
This commit is contained in:
Nick Alcock
2024-04-02 16:06:50 +01:00
parent 0ebf1bdeed
commit 9049b960f2

View File

@@ -1045,7 +1045,9 @@ ctf_lookup_by_sym_or_name (ctf_dict_t *fp, unsigned long symidx,
}
err = ECTF_NOSYMTAB;
if (sp->cts_data == NULL)
if (sp->cts_data == NULL && symname == NULL &&
((is_function && !fp->ctf_funcidx_names) ||
(!is_function && !fp->ctf_objtidx_names)))
goto try_parent;
/* This covers both out-of-range lookups by index and a dynamic dict which