2023-05-16 12:39 UTC+0000 ~ Yafang Shao <laoar.shao@xxxxxxxxx> > The target_btf_id can help us understand which kernel function is > linked by a tracing prog. The target_btf_id and target_obj_id have > already been exposed to userspace, so we just need to show them. > > The result as follows, > > $ tools/bpf/bpftool/bpftool link show > 2: tracing prog 13 > prog_type tracing attach_type trace_fentry > target_obj_id 1 target_btf_id 13964 > pids trace(10673) > > $ tools/bpf/bpftool/bpftool link show -j > [{"id":2,"type":"tracing","prog_id":13,"prog_type":"tracing","attach_type":"trace_fentry","target_obj_id":1,"target_btf_id":13964,"pids":[{"pid":10673,"comm":"trace"}]}] > > Signed-off-by: Yafang Shao <laoar.shao@xxxxxxxxx> > Acked-by: Song Liu <song@xxxxxxxxxx> > --- > tools/bpf/bpftool/link.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/tools/bpf/bpftool/link.c b/tools/bpf/bpftool/link.c > index 243b74e..cfe896f 100644 > --- a/tools/bpf/bpftool/link.c > +++ b/tools/bpf/bpftool/link.c > @@ -195,6 +195,8 @@ static int show_link_close_json(int fd, struct bpf_link_info *info) > > show_link_attach_type_json(info->tracing.attach_type, > json_wtr); > + jsonw_uint_field(json_wtr, "target_obj_id", info->tracing.target_obj_id); > + jsonw_uint_field(json_wtr, "target_btf_id", info->tracing.target_btf_id); > break; > case BPF_LINK_TYPE_CGROUP: > jsonw_lluint_field(json_wtr, "cgroup_id", > @@ -375,6 +377,8 @@ static int show_link_close_plain(int fd, struct bpf_link_info *info) > printf("\n\tprog_type %u ", prog_info.type); > > show_link_attach_type_plain(info->tracing.attach_type); > + printf("\n\ttarget_obj_id %u target_btf_id %u ", > + info->tracing.target_obj_id, info->tracing.target_btf_id); Older kernels won't share this info, so maybe we can skip this printf() in plain output if the target object and BTF ids are 0? > break; > case BPF_LINK_TYPE_CGROUP: > printf("\n\tcgroup_id %zu ", (size_t)info->cgroup.cgroup_id);