commit: 542f1c70470d93d8f66fb8ef04ece7fb83221512 Author: Patrick McLean <chutzpah <AT> gentoo <DOT> org> AuthorDate: Mon Aug 29 17:39:38 2022 +0000 Commit: Patrick McLean <chutzpah <AT> gentoo <DOT> org> CommitDate: Mon Aug 29 17:39:38 2022 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=542f1c70
dev-util/bpftrace: Add patch to build with bcc-0.25 (bug #866611) Closes: https://bugs.gentoo.org/866611 Signed-off-by: Patrick McLean <chutzpah <AT> gentoo.org> dev-util/bpftrace/bpftrace-0.15.0-r1.ebuild | 1 + .../bpftrace/files/bpftrace-0.15.0-bcc-025.patch | 88 ++++++++++++++++++++++ 2 files changed, 89 insertions(+) diff --git a/dev-util/bpftrace/bpftrace-0.15.0-r1.ebuild b/dev-util/bpftrace/bpftrace-0.15.0-r1.ebuild index 1b080a8637d2..51346cb3d38d 100644 --- a/dev-util/bpftrace/bpftrace-0.15.0-r1.ebuild +++ b/dev-util/bpftrace/bpftrace-0.15.0-r1.ebuild @@ -52,6 +52,7 @@ PATCHES=( "${FILESDIR}/bpftrace-0.15.0-install-libs.patch" "${FILESDIR}/bpftrace-0.15.0-dont-compress-man.patch" "${FILESDIR}/bpftrace-0.11.4-old-kernels.patch" + "${FILESDIR}/bpftrace-0.15.0-bcc-025.patch" ) pkg_pretend() { diff --git a/dev-util/bpftrace/files/bpftrace-0.15.0-bcc-025.patch b/dev-util/bpftrace/files/bpftrace-0.15.0-bcc-025.patch new file mode 100644 index 000000000000..ef2ca76e1c50 --- /dev/null +++ b/dev-util/bpftrace/files/bpftrace-0.15.0-bcc-025.patch @@ -0,0 +1,88 @@ +From f86c3bde84d9e75ec2780a51a1ca7dc20a4740e6 Mon Sep 17 00:00:00 2001 +From: Dominique Martinet <asmad...@codewreck.org> +Date: Thu, 25 Aug 2022 21:47:30 +0900 +Subject: [PATCH] Fix builds against bcc >= 0.25.0 + +libbpf 1.0.0 removed bpf_load_program_attr in +https://github.com/libbpf/libbpf/commit/9476dce6fe905a6bf1d4c483f7b2b8575c4ffb2d +and bcc 0.25.0 in turn changed bcc_prog_load_xattr to use +bpf_prog_load_opts instead in +https://github.com/iovisor/bcc/commit/185143bdec6134255363446f644acd766ffb3825 + +Add a compile check to use the appropriate version + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index c5c4c39630d2..f23b2ba52740 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -138,7 +138,7 @@ check_symbol_exists(bpf_attach_kfunc "${LIBBCC_INCLUDE_DIRS}/bcc/libbpf.h" HAVE_ + check_symbol_exists(bcc_usdt_addsem_probe "${LIBBCC_INCLUDE_DIRS}/bcc/bcc_usdt.h" HAVE_BCC_USDT_ADDSEM) + check_symbol_exists(bcc_procutils_which_so "${LIBBCC_INCLUDE_DIRS}/bcc/bcc_proc.h" HAVE_BCC_WHICH_SO) + +-# bcc_prog_load_xattr needs struct bpf_load_program_attr, ++# bcc_prog_load_xattr needs struct bpf_prog_load_opts or bpf_load_program_attr, + # which is defined in libbpf + if (LIBBPF_FOUND) + check_symbol_exists(bcc_prog_load_xattr "${LIBBCC_INCLUDE_DIRS}/bcc/libbpf.h" HAVE_BCC_PROG_LOAD_XATTR) +@@ -236,6 +236,10 @@ if(LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE) + set(BPFTRACE_FLAGS "${BPFTRACE_FLAGS}" LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE) + endif(LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE) + ++if(LIBBCC_PROG_LOAD_XATTRS_WITH_OPTS) ++ set(BPFTRACE_FLAGS "${BPFTRACE_FLAGS}" LIBBCC_PROG_LOAD_XATTRS_WITH_OPTS) ++endif(LIBBCC_PROG_LOAD_XATTRS_WITH_OPTS) ++ + if (HAVE_BCC_KFUNC) + set(BPFTRACE_FLAGS "${BPFTRACE_FLAGS}" HAVE_BCC_KFUNC) + endif(HAVE_BCC_KFUNC) +diff --git a/cmake/FindLibBcc.cmake b/cmake/FindLibBcc.cmake +index 7b4f12835786..20d2e68cd75f 100644 +--- a/cmake/FindLibBcc.cmake ++++ b/cmake/FindLibBcc.cmake +@@ -85,6 +85,16 @@ int main(void) { + return 0; + } + " LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE) ++CHECK_CXX_SOURCE_COMPILES(" ++#include <bcc/libbpf.h> ++ ++int main(void) { ++ struct bpf_prog_load_opts *opts = (struct bpf_prog_load_opts*) 1; ++ ++ bcc_prog_load_xattr(BPF_PROG_TYPE_UNSPEC, 0, 0, 0, opts, 0, 0, 0, true); ++ return 0; ++} ++" LIBBCC_PROG_LOAD_XATTRS_WITH_OPTS) + SET(CMAKE_REQUIRED_INCLUDES) + + SET(CMAKE_REQUIRED_LIBRARIES ${LIBBCC_BPF_LIBRARIES}) +diff --git a/src/attached_probe.cpp b/src/attached_probe.cpp +index 60778e53ce44..dd46f15fd8d2 100644 +--- a/src/attached_probe.cpp ++++ b/src/attached_probe.cpp +@@ -731,7 +731,24 @@ void AttachedProbe::load_prog() + continue; + } + +-#ifdef HAVE_BCC_PROG_LOAD_XATTR ++#ifdef LIBBCC_PROG_LOAD_XATTRS_WITH_OPTS ++ struct bpf_prog_load_opts opts = { }; ++ ++ opts.sz = sizeof(opts); ++ opts.log_level = log_level; ++ ++ progfd_ = bcc_prog_load_xattr( ++ progtype(probe_.type), ++ name.c_str(), ++ license, ++ reinterpret_cast<struct bpf_insn *>(insns), ++ &opts, ++ prog_len, ++ log_buf.get(), ++ log_buf_size, ++ true); ++ ++#elif HAVE_BCC_PROG_LOAD_XATTR + struct bpf_load_program_attr attr = {}; + + attr.prog_type = progtype(probe_.type);