diff options
Diffstat (limited to 'tools/lib/bpf/bpf.c')
| -rw-r--r-- | tools/lib/bpf/bpf.c | 19 | 
1 files changed, 16 insertions, 3 deletions
diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c index 97ec005c3c47..2a4c71501a17 100644 --- a/tools/lib/bpf/bpf.c +++ b/tools/lib/bpf/bpf.c @@ -105,7 +105,7 @@ int sys_bpf_prog_load(union bpf_attr *attr, unsigned int size, int attempts)   */  int probe_memcg_account(int token_fd)  { -	const size_t attr_sz = offsetofend(union bpf_attr, attach_btf_obj_fd); +	const size_t attr_sz = offsetofend(union bpf_attr, prog_token_fd);  	struct bpf_insn insns[] = {  		BPF_EMIT_CALL(BPF_FUNC_ktime_get_coarse_ns),  		BPF_EXIT_INSN(), @@ -766,6 +766,7 @@ int bpf_link_create(int prog_fd, int target_fd,  			return libbpf_err(-EINVAL);  		break;  	case BPF_TRACE_KPROBE_MULTI: +	case BPF_TRACE_KPROBE_SESSION:  		attr.link_create.kprobe_multi.flags = OPTS_GET(opts, kprobe_multi.flags, 0);  		attr.link_create.kprobe_multi.cnt = OPTS_GET(opts, kprobe_multi.cnt, 0);  		attr.link_create.kprobe_multi.syms = ptr_to_u64(OPTS_GET(opts, kprobe_multi.syms, 0)); @@ -785,6 +786,7 @@ int bpf_link_create(int prog_fd, int target_fd,  		if (!OPTS_ZEROED(opts, uprobe_multi))  			return libbpf_err(-EINVAL);  		break; +	case BPF_TRACE_RAW_TP:  	case BPF_TRACE_FENTRY:  	case BPF_TRACE_FEXIT:  	case BPF_MODIFY_RETURN: @@ -1173,20 +1175,31 @@ int bpf_link_get_info_by_fd(int link_fd, struct bpf_link_info *info, __u32 *info  	return bpf_obj_get_info_by_fd(link_fd, info, info_len);  } -int bpf_raw_tracepoint_open(const char *name, int prog_fd) +int bpf_raw_tracepoint_open_opts(int prog_fd, struct bpf_raw_tp_opts *opts)  {  	const size_t attr_sz = offsetofend(union bpf_attr, raw_tracepoint);  	union bpf_attr attr;  	int fd; +	if (!OPTS_VALID(opts, bpf_raw_tp_opts)) +		return libbpf_err(-EINVAL); +  	memset(&attr, 0, attr_sz); -	attr.raw_tracepoint.name = ptr_to_u64(name);  	attr.raw_tracepoint.prog_fd = prog_fd; +	attr.raw_tracepoint.name = ptr_to_u64(OPTS_GET(opts, tp_name, NULL)); +	attr.raw_tracepoint.cookie = OPTS_GET(opts, cookie, 0);  	fd = sys_bpf_fd(BPF_RAW_TRACEPOINT_OPEN, &attr, attr_sz);  	return libbpf_err_errno(fd);  } +int bpf_raw_tracepoint_open(const char *name, int prog_fd) +{ +	LIBBPF_OPTS(bpf_raw_tp_opts, opts, .tp_name = name); + +	return bpf_raw_tracepoint_open_opts(prog_fd, &opts); +} +  int bpf_btf_load(const void *btf_data, size_t btf_size, struct bpf_btf_load_opts *opts)  {  	const size_t attr_sz = offsetofend(union bpf_attr, btf_token_fd);  | 
