On Mon, Nov 14, 2022 at 05:57:33PM +0800, Hou Tao wrote: > From: Hou Tao <houtao1@xxxxxxxxxx> > > Since commit bfea9a8574f3 ("bpf: Add name to struct bpf_ksym"), when > reporting subprog ksymbol to perf, prog name instead of subprog name is > used. The backtrace of bpf program with subprogs will be incorrect as > shown below: > > ffffffffc02deace bpf_prog_e44a3057dcb151f8_overwrite+0x66 > ffffffffc02de9f7 bpf_prog_e44a3057dcb151f8_overwrite+0x9f > ffffffffa71d8d4e trace_call_bpf+0xce > ffffffffa71c2938 perf_call_bpf_enter.isra.0+0x48 > > overwrite is the entry program and it invokes the overwrite_htab subprog > through bpf_loop, but in above backtrace, overwrite program just jumps > inside itself. > > Fixing it by using subprog name when reporting subprog ksymbol. After > the fix, the output of perf script will be correct as shown below: > > ffffffffc031aad2 bpf_prog_37c0bec7d7c764a4_overwrite_htab+0x66 > ffffffffc031a9e7 bpf_prog_c7eb827ef4f23e71_overwrite+0x9f > ffffffffa3dd8d4e trace_call_bpf+0xce > ffffffffa3dc2938 perf_call_bpf_enter.isra.0+0x48 > > Fixes: bfea9a8574f3 ("bpf: Add name to struct bpf_ksym") > Signed-off-by: Hou Tao <houtao1@xxxxxxxxxx> Acked-by: Jiri Olsa <jolsa@xxxxxxxxxx> thanks, jirka > --- > kernel/events/core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/events/core.c b/kernel/events/core.c > index 4ec3717003d5..8b50ef2569d9 100644 > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -9030,7 +9030,7 @@ static void perf_event_bpf_emit_ksymbols(struct bpf_prog *prog, > PERF_RECORD_KSYMBOL_TYPE_BPF, > (u64)(unsigned long)subprog->bpf_func, > subprog->jited_len, unregister, > - prog->aux->ksym.name); > + subprog->aux->ksym.name); > } > } > } > -- > 2.29.2 >