> On Mar 18, 2019, at 9:43 AM, Arnaldo Carvalho de Melo <arnaldo.melo@xxxxxxxxx> wrote: > > Em Mon, Mar 18, 2019 at 01:38:48PM -0300, Arnaldo Carvalho de Melo escreveu: >> Em Mon, Mar 11, 2019 at 10:30:48PM -0700, Song Liu escreveu: >>> This patch enables the annotation of bpf program. >>> >>> A new dso type DSO_BINARY_TYPE__BPF_PROG_INFO is introduced to for BPF >>> programs. In symbol__disassemble(), DSO_BINARY_TYPE__BPF_PROG_INFO dso >>> calls into a new function symbol__disassemble_bpf(), where annotation >>> line information is filled based bpf_prog_info and btf saved in given >>> perf_env. >>> >>> symbol__disassemble_bpf() uses libbfd to disassemble bpf programs. >>> >>> Signed-off-by: Song Liu <songliubraving@xxxxxx> >>> --- >>> tools/build/Makefile.feature | 6 +- >>> tools/perf/Makefile.config | 4 + >> >> I see the changes to these two files, but I can't see the feature test >> that it triggers, forgot to do a git-add? Or is it in an upcoming patch >> in this series? >> >> After applying this test it "works": >> >> make: Entering directory '/home/acme/git/perf/tools/perf' >> BUILD: Doing 'make -j8' parallel build >> >> Auto-detecting system features: >> ... dwarf: [ on ] >> ... dwarf_getlocations: [ on ] >> <SNIP> >> ... bpf: [ on ] >> ... libaio: [ on ] >> ... disassembler-four-args: [ on ] >> >> Because you added it to FEATURE_TESTS_BASIC, and this means that if >> tools/build/feature/test-all.c builds, then what is in >> FEATURE_TESTS_BASIC is set to 'on', but you didn't add anything to >> tools/build/feature/test-all.c, so it works because all the other >> features are present. >> >> Take a look at: >> >> 2a07d814747b ("tools build feature: Check if libaio is available") >> >> To see what needs to be done. >> >> Either way, its interesting to break this patch in two, one adding the >> feature test and another to use it, i.e. the second patch out of this >> should have the commit log message in this patch. >> >> I've applied the patches up to before this one and will continue >> processing other patches while you address this. > > Ok, to continue processing the other patches I chunked out the part > below into a 3rd patch from the above one and have it applied already. Could you please push applied patches to the tmp.perf/bpf-annotation branch? Thanks, Song > > commit f326de312abc3657b0397817c66cd7e1540655f7 > Author: Song Liu <songliubraving@xxxxxx> > Date: Mon Mar 11 22:30:48 2019 -0700 > > perf symbols: Introduce DSO_BINARY_TYPE__BPF_PROG_INFO > > Introduce a new dso type DSO_BINARY_TYPE__BPF_PROG_INFO for BPF programs. In > symbol__disassemble(), DSO_BINARY_TYPE__BPF_PROG_INFO dso will call into a new > function symbol__disassemble_bpf() in an upcoming patch, where annotation line > information is filled based bpf_prog_info and btf saved in given perf_env. > > Signed-off-by: Song Liu <songliubraving@xxxxxx> > Reviewed-by: Jiri Olsa <jolsa@xxxxxxxxxx> > Cc: Alexei Starovoitov <ast@xxxxxxxxxx> > Cc: Daniel Borkmann <daniel@xxxxxxxxxxxxx> > Cc: Namhyung Kim <namhyung@xxxxxxxxxx> > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > Cc: Stanislav Fomichev <sdf@xxxxxxxxxx> > Cc: kernel-team@xxxxxx > Link: http://lkml.kernel.org/r/20190312053051.2690567-13-songliubraving@xxxxxx > [ split from a larger patch ] > Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> > > diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c > index ba58ba603b69..58547c468c65 100644 > --- a/tools/perf/util/dso.c > +++ b/tools/perf/util/dso.c > @@ -184,6 +184,7 @@ int dso__read_binary_type_filename(const struct dso *dso, > case DSO_BINARY_TYPE__KALLSYMS: > case DSO_BINARY_TYPE__GUEST_KALLSYMS: > case DSO_BINARY_TYPE__JAVA_JIT: > + case DSO_BINARY_TYPE__BPF_PROG_INFO: > case DSO_BINARY_TYPE__NOT_FOUND: > ret = -1; > break; > diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h > index bb417c54c25a..c274b5aa839d 100644 > --- a/tools/perf/util/dso.h > +++ b/tools/perf/util/dso.h > @@ -14,6 +14,7 @@ > > struct machine; > struct map; > +struct perf_env; > > enum dso_binary_type { > DSO_BINARY_TYPE__KALLSYMS = 0, > @@ -35,6 +36,7 @@ enum dso_binary_type { > DSO_BINARY_TYPE__KCORE, > DSO_BINARY_TYPE__GUEST_KCORE, > DSO_BINARY_TYPE__OPENEMBEDDED_DEBUGINFO, > + DSO_BINARY_TYPE__BPF_PROG_INFO, > DSO_BINARY_TYPE__NOT_FOUND, > }; > > @@ -178,17 +180,25 @@ struct dso { > struct auxtrace_cache *auxtrace_cache; > int comp; > > - /* dso data file */ > - struct { > - struct rb_root cache; > - int fd; > - int status; > - u32 status_seen; > - size_t file_size; > - struct list_head open_entry; > - u64 debug_frame_offset; > - u64 eh_frame_hdr_offset; > - } data; > + union { > + /* dso data file */ > + struct { > + struct rb_root cache; > + int fd; > + int status; > + u32 status_seen; > + size_t file_size; > + struct list_head open_entry; > + u64 debug_frame_offset; > + u64 eh_frame_hdr_offset; > + } data; > + /* bpf prog information */ > + struct { > + u32 id; > + u32 sub_id; > + struct perf_env *env; > + } bpf_prog; > + }; > > union { /* Tool specific area */ > void *priv; > diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c > index 58442ca5e3c4..5cbad55cd99d 100644 > --- a/tools/perf/util/symbol.c > +++ b/tools/perf/util/symbol.c > @@ -1455,6 +1455,7 @@ static bool dso__is_compatible_symtab_type(struct dso *dso, bool kmod, > case DSO_BINARY_TYPE__BUILD_ID_CACHE_DEBUGINFO: > return true; > > + case DSO_BINARY_TYPE__BPF_PROG_INFO: > case DSO_BINARY_TYPE__NOT_FOUND: > default: > return false;