On Fri, Oct 23, 2020 at 01:32:44PM -0700, Andrii Nakryiko wrote: SNIP > > right, we can generate them in bpftrace, but it's a shame > > > > > > > > > > But otherwise, I don't really have a good feeling what's the perfect > > > solution here... > > > > I tried the check of dwarf record against function symbols > > with adresses mentioned earlier (attached) > > > > getting more functions of course ;-) > > > > $ bpftool btf dump file ./vmlinux | grep 'FUNC ' | wc -l > > 46606 > > > > compared to 22869 on the same .config with working gcc > > and current pahole > > Just curious, what's the change in BTF size due to this? current: 3342279 new: 4361045 so about 1MB > > > > > and resolve_btfids is happy, because there are no duplications > > > > jirka > > > > > > --- > > [...] > > > static int btf_var_secinfo_cmp(const void *a, const void *b) > > { > > const struct btf_var_secinfo *av = a; > > @@ -72,6 +157,7 @@ struct btf_elf *btf_elf__new(const char *filename, Elf *elf) > > if (!btfe) > > return NULL; > > > > + btfe->symbols = RB_ROOT; > > Can you please check what we do for per-cpu variables with ELF > symbols? Perhaps we can unify approaches. I'd also favor using a sort > + bsearch approach instead of rb_tree, given we don't really need to > dynamically add/delete elements, it's a one-time operation to iterate > and initialize everything. Also binary search of linear arrays would > be more memory-efficient and cache-efficient, most probably. ok, will check jirka > > > btfe->in_fd = -1; > > btfe->filename = strdup(filename); > > if (btfe->filename == NULL) > > @@ -177,6 +263,7 @@ void btf_elf__delete(struct btf_elf *btfe) > > elf_end(btfe->elf); > > } > > > > + btfe__delete_symbols(btfe); > > elf_symtab__delete(btfe->symtab); > > __gobuffer__delete(&btfe->percpu_secinfo); > > btf__free(btfe->btf); > > [...] >