Skip to content

Commit 5054a30

Browse files
olsajiriAlexei Starovoitov
authored andcommitted
libbpf: Add bpf_link_create support for multi uprobes
Adding new uprobe_multi struct to bpf_link_create_opts object to pass multiple uprobe data to link_create attr uapi. Acked-by: Andrii Nakryiko <andrii@kernel.org> Signed-off-by: Jiri Olsa <jolsa@kernel.org> Link: https://lore.kernel.org/r/20230809083440.3209381-14-jolsa@kernel.org Signed-off-by: Alexei Starovoitov <ast@kernel.org>
1 parent e613d1d commit 5054a30

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

tools/lib/bpf/bpf.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,17 @@ int bpf_link_create(int prog_fd, int target_fd,
767767
if (!OPTS_ZEROED(opts, kprobe_multi))
768768
return libbpf_err(-EINVAL);
769769
break;
770+
case BPF_TRACE_UPROBE_MULTI:
771+
attr.link_create.uprobe_multi.flags = OPTS_GET(opts, uprobe_multi.flags, 0);
772+
attr.link_create.uprobe_multi.cnt = OPTS_GET(opts, uprobe_multi.cnt, 0);
773+
attr.link_create.uprobe_multi.path = ptr_to_u64(OPTS_GET(opts, uprobe_multi.path, 0));
774+
attr.link_create.uprobe_multi.offsets = ptr_to_u64(OPTS_GET(opts, uprobe_multi.offsets, 0));
775+
attr.link_create.uprobe_multi.ref_ctr_offsets = ptr_to_u64(OPTS_GET(opts, uprobe_multi.ref_ctr_offsets, 0));
776+
attr.link_create.uprobe_multi.cookies = ptr_to_u64(OPTS_GET(opts, uprobe_multi.cookies, 0));
777+
attr.link_create.uprobe_multi.pid = OPTS_GET(opts, uprobe_multi.pid, 0);
778+
if (!OPTS_ZEROED(opts, uprobe_multi))
779+
return libbpf_err(-EINVAL);
780+
break;
770781
case BPF_TRACE_FENTRY:
771782
case BPF_TRACE_FEXIT:
772783
case BPF_MODIFY_RETURN:

tools/lib/bpf/bpf.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,15 @@ struct bpf_link_create_opts {
392392
const unsigned long *addrs;
393393
const __u64 *cookies;
394394
} kprobe_multi;
395+
struct {
396+
__u32 flags;
397+
__u32 cnt;
398+
const char *path;
399+
const unsigned long *offsets;
400+
const unsigned long *ref_ctr_offsets;
401+
const __u64 *cookies;
402+
__u32 pid;
403+
} uprobe_multi;
395404
struct {
396405
__u64 cookie;
397406
} tracing;
@@ -409,7 +418,7 @@ struct bpf_link_create_opts {
409418
};
410419
size_t :0;
411420
};
412-
#define bpf_link_create_opts__last_field kprobe_multi.cookies
421+
#define bpf_link_create_opts__last_field uprobe_multi.pid
413422

414423
LIBBPF_API int bpf_link_create(int prog_fd, int target_fd,
415424
enum bpf_attach_type attach_type,

0 commit comments

Comments
 (0)