From 092eaa77f61f8ab6ceeb0429030d750a2618b1ab Mon Sep 17 00:00:00 2001 From: Soumya Sambu Date: Wed, 26 Mar 2025 06:45:06 +0000 Subject: libbpf: Backport bpf_btf_get_info_by_fd bcc v0.29.1 depends on bpf_btf_get_info_by_fd, which was introduced in libbpf v1.2.0. Since meta-oe kirkstone provides libbpf v0.7.0, this function was missing, resulting in a linker error in the bcc build: undefined reference to `bpf_btf_get_info_by_fd` This patch backports the necessary commit from libbpf v1.2.0 to v0.7.0, allowing bcc v0.29.1 to build successfully. Upstream patch: https://github.com/libbpf/libbpf/commit/30f6bc3c0a296638e3b6930dbcff6f1547f13997 Signed-off-by: Soumya Sambu --- ...oduce-bpf_-btf-link-map-prog-_get_info_by.patch | 88 ++++++++++++++++++++++ recipes-kernel/libbpf/libbpf_%.bbappend | 10 +++ 2 files changed, 98 insertions(+) create mode 100644 recipes-kernel/libbpf/libbpf/0001-libbpf-Introduce-bpf_-btf-link-map-prog-_get_info_by.patch create mode 100644 recipes-kernel/libbpf/libbpf_%.bbappend diff --git a/recipes-kernel/libbpf/libbpf/0001-libbpf-Introduce-bpf_-btf-link-map-prog-_get_info_by.patch b/recipes-kernel/libbpf/libbpf/0001-libbpf-Introduce-bpf_-btf-link-map-prog-_get_info_by.patch new file mode 100644 index 0000000..ad67791 --- /dev/null +++ b/recipes-kernel/libbpf/libbpf/0001-libbpf-Introduce-bpf_-btf-link-map-prog-_get_info_by.patch @@ -0,0 +1,88 @@ +From 30f6bc3c0a296638e3b6930dbcff6f1547f13997 Mon Sep 17 00:00:00 2001 +From: Ilya Leoshkevich +Date: Wed, 15 Feb 2023 00:12:14 +0100 +Subject: [PATCH] libbpf: Introduce bpf_{btf,link,map,prog}_get_info_by_fd() + +These are type-safe wrappers around bpf_obj_get_info_by_fd(). They +found one problem in selftests, and are also useful for adding +Memory Sanitizer annotations. + +Signed-off-by: Ilya Leoshkevich +Signed-off-by: Andrii Nakryiko +Link: https://lore.kernel.org/bpf/20230214231221.249277-2-iii@linux.ibm.com + +Upstream-Status: Backport [https://github.com/libbpf/libbpf/commit/30f6bc3c0a296638e3b6930dbcff6f1547f13997] + +Signed-off-by: Soumya Sambu +--- + src/bpf.c | 20 ++++++++++++++++++++ + src/bpf.h | 9 +++++++++ + src/libbpf.map | 4 ++++ + 3 files changed, 33 insertions(+) + +diff --git a/src/bpf.c b/src/bpf.c +index 418b259..7f4f4f7 100644 +--- a/src/bpf.c ++++ b/src/bpf.c +@@ -1118,6 +1118,26 @@ int bpf_obj_get_info_by_fd(int bpf_fd, void *info, __u32 *info_len) + return libbpf_err_errno(err); + } + ++int bpf_prog_get_info_by_fd(int prog_fd, struct bpf_prog_info *info, __u32 *info_len) ++{ ++ return bpf_obj_get_info_by_fd(prog_fd, info, info_len); ++} ++ ++int bpf_map_get_info_by_fd(int map_fd, struct bpf_map_info *info, __u32 *info_len) ++{ ++ return bpf_obj_get_info_by_fd(map_fd, info, info_len); ++} ++ ++int bpf_btf_get_info_by_fd(int btf_fd, struct bpf_btf_info *info, __u32 *info_len) ++{ ++ return bpf_obj_get_info_by_fd(btf_fd, info, info_len); ++} ++ ++int bpf_link_get_info_by_fd(int link_fd, struct bpf_link_info *info, __u32 *info_len) ++{ ++ return bpf_obj_get_info_by_fd(link_fd, info, info_len); ++} ++ + int bpf_raw_tracepoint_open(const char *name, int prog_fd) + { + union bpf_attr attr; +diff --git a/src/bpf.h b/src/bpf.h +index 16b2175..8b78c62 100644 +--- a/src/bpf.h ++++ b/src/bpf.h +@@ -473,6 +473,15 @@ LIBBPF_API int bpf_map_get_fd_by_id(__u32 id); + LIBBPF_API int bpf_btf_get_fd_by_id(__u32 id); + LIBBPF_API int bpf_link_get_fd_by_id(__u32 id); + LIBBPF_API int bpf_obj_get_info_by_fd(int bpf_fd, void *info, __u32 *info_len); ++/* Type-safe variants of bpf_obj_get_info_by_fd(). The callers still needs to ++ * pass info_len, which should normally be ++ * sizeof(struct bpf_{prog,map,btf,link}_info), in order to be compatible with ++ * different libbpf and kernel versions. ++ */ ++LIBBPF_API int bpf_prog_get_info_by_fd(int prog_fd, struct bpf_prog_info *info, __u32 *info_len); ++LIBBPF_API int bpf_map_get_info_by_fd(int map_fd, struct bpf_map_info *info, __u32 *info_len); ++LIBBPF_API int bpf_btf_get_info_by_fd(int btf_fd, struct bpf_btf_info *info, __u32 *info_len); ++LIBBPF_API int bpf_link_get_info_by_fd(int link_fd, struct bpf_link_info *info, __u32 *info_len); + LIBBPF_API int bpf_prog_query(int target_fd, enum bpf_attach_type type, + __u32 query_flags, __u32 *attach_flags, + __u32 *prog_ids, __u32 *prog_cnt); +diff --git a/src/libbpf.map b/src/libbpf.map +index 47e70c9..c2df7aa 100644 +--- a/src/libbpf.map ++++ b/src/libbpf.map +@@ -438,4 +438,8 @@ LIBBPF_0.7.0 { + libbpf_probe_bpf_map_type; + libbpf_probe_bpf_prog_type; + libbpf_set_memlock_rlim_max; ++ bpf_btf_get_info_by_fd; ++ bpf_link_get_info_by_fd; ++ bpf_map_get_info_by_fd; ++ bpf_prog_get_info_by_fd; + } LIBBPF_0.6.0; +-- +2.40.0 diff --git a/recipes-kernel/libbpf/libbpf_%.bbappend b/recipes-kernel/libbpf/libbpf_%.bbappend new file mode 100644 index 0000000..b5a6319 --- /dev/null +++ b/recipes-kernel/libbpf/libbpf_%.bbappend @@ -0,0 +1,10 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/libbpf:" + +LIC_FILES_CHKSUM = "file://LICENSE.LGPL-2.1;md5=b370887980db5dd40659b50909238dbd" + +SRC_URI += "\ + file://0001-libbpf-Introduce-bpf_-btf-link-map-prog-_get_info_by.patch" + +S = "${WORKDIR}/git" + +EXTRA_OEMAKE += " -C ${S}/src" -- cgit v1.2.3-54-g00ecf