From: Mykyta Yatsenko <yatsenko@xxxxxxxx> Introducing new libbpf API getters for BTF.ext func and line info, namely: bpf_program__func_info bpf_program__func_info_cnt bpf_program__func_info_rec_size bpf_program__line_info bpf_program__line_info_cnt bpf_program__line_info_rec_size 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@xxxxxxxx> --- tools/lib/bpf/libbpf.c | 30 ++++++++++++++++++++++++++++++ tools/lib/bpf/libbpf.h | 8 ++++++++ tools/lib/bpf/libbpf.map | 6 ++++++ 3 files changed, 44 insertions(+) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 6b85060f07b3..bc15526ed84c 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -9455,6 +9455,36 @@ int bpf_program__set_log_buf(struct bpf_program *prog, char *log_buf, size_t log return 0; } +void *bpf_program__func_info(struct bpf_program *prog) +{ + return prog->func_info; +} + +__u32 bpf_program__func_info_cnt(struct bpf_program *prog) +{ + return prog->func_info_cnt; +} + +__u32 bpf_program__func_info_rec_size(struct bpf_program *prog) +{ + return prog->func_info_rec_size; +} + +void *bpf_program__line_info(struct bpf_program *prog) +{ + return prog->line_info; +} + +__u32 bpf_program__line_info_cnt(struct bpf_program *prog) +{ + return prog->line_info_cnt; +} + +__u32 bpf_program__line_info_rec_size(struct bpf_program *prog) +{ + return prog->line_info_rec_size; +} + #define SEC_DEF(sec_pfx, ptype, atype, flags, ...) { \ .sec = (char *)sec_pfx, \ .prog_type = BPF_PROG_TYPE_##ptype, \ diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index e0605403f977..29a5fd7f51f0 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h @@ -940,6 +940,14 @@ 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 void *bpf_program__func_info(struct bpf_program *prog); +LIBBPF_API __u32 bpf_program__func_info_cnt(struct bpf_program *prog); +LIBBPF_API __u32 bpf_program__func_info_rec_size(struct bpf_program *prog); + +LIBBPF_API void *bpf_program__line_info(struct bpf_program *prog); +LIBBPF_API __u32 bpf_program__line_info_cnt(struct bpf_program *prog); +LIBBPF_API __u32 bpf_program__line_info_rec_size(struct bpf_program *prog); + /** * @brief **bpf_program__set_attach_target()** sets BTF-based attach target * for supported BPF program types: diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map index d8b71f22f197..a5d83189c084 100644 --- a/tools/lib/bpf/libbpf.map +++ b/tools/lib/bpf/libbpf.map @@ -437,6 +437,12 @@ 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__func_info_rec_size; + bpf_program__line_info; + bpf_program__line_info_cnt; + bpf_program__line_info_rec_size; btf__add_decl_attr; btf__add_type_attr; } LIBBPF_1.5.0; -- 2.48.1