On Tue, Oct 27, 2020 at 04:13:46PM -0700, Andrii Nakryiko wrote: > On Mon, Oct 26, 2020 at 5:07 PM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > > > hi, > > because of gcc bug [1] we can no longer rely on DW_AT_declaration > > attribute to filter out declarations and end up with just > > one copy of the function in the BTF data. > > > > It seems this bug is not easy to fix, but regardless if the > > it's coming soon, it's probably good idea not to depend so > > much only on dwarf data and make some extra checks. > > > > Thus for function encoding we are now doing following checks: > > - argument names are defined for the function > > - there's symbol and address defined for the function > > - function is generated only once > > > > These checks ensure that we encode function with defined > > symbol/address and argument names. > > > > I marked this post as RFC, because with this workaround in > > place we are also encoding assembly functions, which were > > not present when using the previous gcc version. > > > > Full functions diff to previous gcc working version: > > > > http://people.redhat.com/~jolsa/functions.diff.txt > > > > I'm not sure this does not break some rule for functions in > > BTF data, becuse those assembly functions are not attachable > > by bpf trampolines, so I don't think there's any use for them. > > What will happen if we do try to attach to those assembly functions? > Will there be some corruption or crash, or will it just fail and the attach code checks for the __fentry__ nop, so it will fail probably with EBUSY > return error cleanly? What we actually want in BTF is all the > functions that are attachable through BPF trampoline, which is all the > functions that ftrace subsystem can attach to, right? So how does > ftrace system know what can or cannot be attached to? not sure, I think it records all the functions with __fentry__ calls, perhaps we could take these records as base for FUNCs, I'll check jirka > > > > > thoughts? > > jirka > > > > > > [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97060 > > --- > > Jiri Olsa (3): > > btf_encoder: Move find_all_percpu_vars in generic config function > > btf_encoder: Change functions check due to broken dwarf > > btf_encoder: Include static functions to BTF data > > > > btf_encoder.c | 221 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------- > > elf_symtab.h | 8 +++++ > > 2 files changed, 170 insertions(+), 59 deletions(-) > > >