]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
libbpf: Add getters for BTF.ext func and line info
authorMykyta Yatsenko <yatsenko@meta.com>
Tue, 8 Apr 2025 23:44:16 +0000 (00:44 +0100)
committerAndrii Nakryiko <andrii@kernel.org>
Wed, 9 Apr 2025 23:16:56 +0000 (16:16 -0700)
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
tools/lib/bpf/libbpf.c
tools/lib/bpf/libbpf.h
tools/lib/bpf/libbpf.map

index 37d563e140515633bbcb80ba7c514050e757661c..b2591f5cab65a2816304c1ac0f9b8c490a718f6c 100644 (file)
@@ -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,                                 \
index e0605403f9773f868b16c7af626fa4ed5f1bab16..d39f19c8396dc41890813d98b2ed1364ca795692 100644 (file)
@@ -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:
index d8b71f22f197cfb3ca9bd8f74d7fa434fb1dbbce..1205f9a4fe0486c80462a354f5af96e2f6f74a81 100644 (file)
@@ -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;