On Thu, Jan 21, 2021 at 03:32:40PM -0800, Andrii Nakryiko wrote: SNIP > But the current variant looks broken. Oh, and > elf_symtab__for_each_symbol() is similarly broken, can you please fix > that as well? we'll have to change its callers a bit, because of hanging 'else' I'll send this separately if that's ok, when I figure out how to test ctf code jirka --- diff --git a/elf_symtab.h b/elf_symtab.h index 489e2b1a3505..6823a8c37ecf 100644 --- a/elf_symtab.h +++ b/elf_symtab.h @@ -99,10 +99,9 @@ elf_sym__get(Elf_Data *syms, Elf_Data *syms_sec_idx_table, * @index: uint32_t index * @sym: GElf_Sym iterator */ -#define elf_symtab__for_each_symbol(symtab, index, sym) \ - for (index = 0, gelf_getsym(symtab->syms, index, &sym);\ - index < symtab->nr_syms; \ - index++, gelf_getsym(symtab->syms, index, &sym)) +#define elf_symtab__for_each_symbol(symtab, index, sym) \ + for (index = 0; index < symtab->nr_syms; index++) \ + if (gelf_getsym(symtab->syms, index, &sym)) /** * elf_symtab__for_each_symbol_index - iterate through all the symbols, diff --git a/libctf.h b/libctf.h index 749be8955c52..ee5412bec77e 100644 --- a/libctf.h +++ b/libctf.h @@ -90,11 +90,9 @@ char *ctf__string(struct ctf *ctf, uint32_t ref); */ #define ctf__for_each_symtab_function(ctf, index, sym) \ elf_symtab__for_each_symbol(ctf->symtab, index, sym) \ - if (ctf__ignore_symtab_function(&sym, \ + if (!ctf__ignore_symtab_function(&sym, \ elf_sym__name(&sym, \ ctf->symtab))) \ - continue; \ - else /** * ctf__for_each_symtab_object - iterate thru all the symtab objects @@ -105,11 +103,9 @@ char *ctf__string(struct ctf *ctf, uint32_t ref); */ #define ctf__for_each_symtab_object(ctf, index, sym) \ elf_symtab__for_each_symbol(ctf->symtab, index, sym) \ - if (ctf__ignore_symtab_object(&sym, \ + if (!ctf__ignore_symtab_object(&sym, \ elf_sym__name(&sym, \ ctf->symtab))) \ - continue; \ - else #endif /* _LIBCTF_H */