From 9049b960f2bc7f0cb9db80d255e9fbec9f476f0f Mon Sep 17 00:00:00 2001 From: Nick Alcock Date: Tue, 2 Apr 2024 16:06:50 +0100 Subject: 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. --- libctf/ctf-lookup.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'libctf') diff --git a/libctf/ctf-lookup.c b/libctf/ctf-lookup.c index aa251ba..f37dd7e 100644 --- a/libctf/ctf-lookup.c +++ b/libctf/ctf-lookup.c @@ -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 -- cgit v1.1