mirror of
https://github.com/netdata/libbpf.git
synced 2026-03-22 09:19:06 +08:00
libbpf: Add getters for BTF.ext func and line info
Introducing new libbpf API getters for BTF.ext func and line info, namely: bpf_program__func_info bpf_program__func_info_cnt bpf_program__line_info bpf_program__line_info_cnt This change enables scenarios, when user needs to load bpf_program directly using `bpf_prog_load`, instead of higher-level `bpf_object__load`. Line and func info are required for checking BTF info in verifier; verification may fail without these fields if, for example, program calls `bpf_obj_new`. Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20250408234417.452565-2-mykyta.yatsenko5@gmail.com
This commit is contained in:
committed by
Andrii Nakryiko
parent
7a1388d55f
commit
abdb15bedd
24
src/libbpf.c
24
src/libbpf.c
@@ -9446,6 +9446,30 @@ int bpf_program__set_log_buf(struct bpf_program *prog, char *log_buf, size_t log
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct bpf_func_info *bpf_program__func_info(const struct bpf_program *prog)
|
||||
{
|
||||
if (prog->func_info_rec_size != sizeof(struct bpf_func_info))
|
||||
return libbpf_err_ptr(-EOPNOTSUPP);
|
||||
return prog->func_info;
|
||||
}
|
||||
|
||||
__u32 bpf_program__func_info_cnt(const struct bpf_program *prog)
|
||||
{
|
||||
return prog->func_info_cnt;
|
||||
}
|
||||
|
||||
struct bpf_line_info *bpf_program__line_info(const struct bpf_program *prog)
|
||||
{
|
||||
if (prog->line_info_rec_size != sizeof(struct bpf_line_info))
|
||||
return libbpf_err_ptr(-EOPNOTSUPP);
|
||||
return prog->line_info;
|
||||
}
|
||||
|
||||
__u32 bpf_program__line_info_cnt(const struct bpf_program *prog)
|
||||
{
|
||||
return prog->line_info_cnt;
|
||||
}
|
||||
|
||||
#define SEC_DEF(sec_pfx, ptype, atype, flags, ...) { \
|
||||
.sec = (char *)sec_pfx, \
|
||||
.prog_type = BPF_PROG_TYPE_##ptype, \
|
||||
|
||||
@@ -940,6 +940,12 @@ LIBBPF_API int bpf_program__set_log_level(struct bpf_program *prog, __u32 log_le
|
||||
LIBBPF_API const char *bpf_program__log_buf(const struct bpf_program *prog, size_t *log_size);
|
||||
LIBBPF_API int bpf_program__set_log_buf(struct bpf_program *prog, char *log_buf, size_t log_size);
|
||||
|
||||
LIBBPF_API struct bpf_func_info *bpf_program__func_info(const struct bpf_program *prog);
|
||||
LIBBPF_API __u32 bpf_program__func_info_cnt(const struct bpf_program *prog);
|
||||
|
||||
LIBBPF_API struct bpf_line_info *bpf_program__line_info(const struct bpf_program *prog);
|
||||
LIBBPF_API __u32 bpf_program__line_info_cnt(const struct bpf_program *prog);
|
||||
|
||||
/**
|
||||
* @brief **bpf_program__set_attach_target()** sets BTF-based attach target
|
||||
* for supported BPF program types:
|
||||
|
||||
@@ -437,6 +437,10 @@ LIBBPF_1.6.0 {
|
||||
bpf_linker__add_fd;
|
||||
bpf_linker__new_fd;
|
||||
bpf_object__prepare;
|
||||
bpf_program__func_info;
|
||||
bpf_program__func_info_cnt;
|
||||
bpf_program__line_info;
|
||||
bpf_program__line_info_cnt;
|
||||
btf__add_decl_attr;
|
||||
btf__add_type_attr;
|
||||
} LIBBPF_1.5.0;
|
||||
|
||||
Reference in New Issue
Block a user