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:
Mykyta Yatsenko
2025-04-09 00:44:16 +01:00
committed by Andrii Nakryiko
parent 7a1388d55f
commit abdb15bedd
3 changed files with 34 additions and 0 deletions

View 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, \

View 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:

View 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;