On Sat, Jun 3, 2023 at 4:38 AM Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> wrote: > > On Fri, Jun 02, 2023 at 08:52:39AM +0000, Yafang Shao wrote: > > Show the exposed perf_event link info in bpftool. The result as follows, > > > > $ bpftool link show > > 1: perf_event prog 5 > > func kernel_clone addr ffffffffb40bc310 offset 0 > > bpf_cookie 0 > > pids trace(9726) > > $ bpftool link show -j > > [{"id":1,"type":"perf_event","prog_id":5,"func":"kernel_clone","addr":18446744072435254032,"offset":0,"bpf_cookie":0,"pids":[{"pid":9726,"comm":"trace"}]}] > > > > Signed-off-by: Yafang Shao <laoar.shao@xxxxxxxxx> > > --- > > tools/bpf/bpftool/link.c | 21 ++++++++++++++++++++- > > 1 file changed, 20 insertions(+), 1 deletion(-) > > > > diff --git a/tools/bpf/bpftool/link.c b/tools/bpf/bpftool/link.c > > index 3b00c07..045f59f 100644 > > --- a/tools/bpf/bpftool/link.c > > +++ b/tools/bpf/bpftool/link.c > > @@ -280,6 +280,12 @@ static int show_link_close_json(int fd, struct bpf_link_info *info) > > kernel_syms_show(addrs, info->kprobe_multi.count, 0); > > jsonw_end_array(json_wtr); > > break; > > + case BPF_LINK_TYPE_PERF_EVENT: > > + jsonw_string_field(json_wtr, "func", > > + u64_to_ptr(info->perf_event.name)); > > + jsonw_uint_field(json_wtr, "addr", info->perf_event.addr); > > + jsonw_uint_field(json_wtr, "offset", info->perf_event.offset); > > + break; > > default: > > break; > > } > > @@ -416,7 +422,7 @@ void netfilter_dump_plain(const struct bpf_link_info *info) > > static int show_link_close_plain(int fd, struct bpf_link_info *info) > > { > > struct bpf_prog_info prog_info; > > - const char *prog_type_str; > > + const char *prog_type_str, *buf; > > int err; > > > > show_link_header_plain(info); > > @@ -472,6 +478,12 @@ static int show_link_close_plain(int fd, struct bpf_link_info *info) > > addrs = (const __u64 *)u64_to_ptr(info->kprobe_multi.addrs); > > kernel_syms_show(addrs, cnt, indent); > > break; > > + case BPF_LINK_TYPE_PERF_EVENT: > > + buf = (const char *)u64_to_ptr(info->perf_event.name); > > + if (buf[0] != '\0' || info->perf_event.addr) > > + printf("\n\tfunc %s addr %llx offset %d ", buf, > > + info->perf_event.addr, info->perf_event.offset); > > Let's print the name here as well? Sure, I will use 'name' instead. -- Regards Yafang