bpftrace: update to 0.11.4.
This commit is contained in:
parent
704ab1bb32
commit
181b421906
|
@ -1,126 +0,0 @@
|
||||||
From 52fb793c6423c19696e07cc14ad5f9182f7eca0e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Viktor Malik <viktor.malik@gmail.com>
|
|
||||||
Date: Wed, 12 Aug 2020 09:45:29 +0200
|
|
||||||
Subject: [PATCH] Feature-detect bpf_attach_kprobe signature
|
|
||||||
|
|
||||||
The function has 6 parameters in current versions of BCC and 5
|
|
||||||
parameters in older versions.
|
|
||||||
|
|
||||||
This is detected in CMake using CHECK_CXX_SOURCE_COMPILES. For static
|
|
||||||
compilation, we also need to retrieve and link static libbpf, libelf,
|
|
||||||
and libz. This may cause libbpf, libelf and libz to be searched for
|
|
||||||
twice, but it should be fine since CMake caches results.
|
|
||||||
|
|
||||||
Fixes iovisor#1027.
|
|
||||||
---
|
|
||||||
cmake/FindLibBcc.cmake | 24 ++++++++++++++++++++++++
|
|
||||||
src/CMakeLists.txt | 3 +++
|
|
||||||
src/attached_probe.cpp | 31 ++++++++++++++-----------------
|
|
||||||
tests/CMakeLists.txt | 3 +++
|
|
||||||
4 files changed, 44 insertions(+), 17 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/cmake/FindLibBcc.cmake b/cmake/FindLibBcc.cmake
|
|
||||||
index 9d30b04bc..ec216271d 100644
|
|
||||||
--- a/cmake/FindLibBcc.cmake
|
|
||||||
+++ b/cmake/FindLibBcc.cmake
|
|
||||||
@@ -70,3 +70,27 @@ include (FindPackageHandleStandardArgs)
|
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibBcc "Please install the bcc library package, which is required. Depending on your distro, it may be called bpfcclib or bcclib (Ubuntu), bcc-devel (Fedora), or something else. If unavailable, install bcc from source (github.com/iovisor/bcc)."
|
|
||||||
LIBBCC_LIBRARIES
|
|
||||||
LIBBCC_INCLUDE_DIRS)
|
|
||||||
+
|
|
||||||
+# Check bpf_attach_kprobe signature
|
|
||||||
+if(${LIBBCC_FOUND})
|
|
||||||
+if(STATIC_LINKING)
|
|
||||||
+ # libbcc.a is not statically linked with libbpf.a, libelf.a, and libz.a.
|
|
||||||
+ # If we do a static bpftrace build, we must link them in.
|
|
||||||
+ find_package(LibBpf)
|
|
||||||
+ find_package(LibElf)
|
|
||||||
+ find_package(LibZ)
|
|
||||||
+ SET(CMAKE_REQUIRED_LIBRARIES ${LIBBCC_BPF_LIBRARY_STATIC} ${LIBBPF_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBZ_LIBRARIES})
|
|
||||||
+else()
|
|
||||||
+ SET(CMAKE_REQUIRED_LIBRARIES ${LIBBCC_LIBRARIES})
|
|
||||||
+endif()
|
|
||||||
+INCLUDE(CheckCXXSourceCompiles)
|
|
||||||
+CHECK_CXX_SOURCE_COMPILES("
|
|
||||||
+#include <bcc/libbpf.h>
|
|
||||||
+
|
|
||||||
+int main(void) {
|
|
||||||
+ bpf_attach_kprobe(0, BPF_PROBE_ENTRY, \"\", \"\", 0, 0);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+" LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
+SET(CMAKE_REQUIRED_LIBRARIES)
|
|
||||||
+endif()
|
|
||||||
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
|
||||||
index 647a23f1c..448a045fc 100644
|
|
||||||
--- a/src/CMakeLists.txt
|
|
||||||
+++ b/src/CMakeLists.txt
|
|
||||||
@@ -80,6 +80,9 @@ if(HAVE_BFD_DISASM)
|
|
||||||
target_link_libraries(bpftrace ${LIBOPCODES_LIBRARIES})
|
|
||||||
endif(STATIC_LINKING)
|
|
||||||
endif(HAVE_BFD_DISASM)
|
|
||||||
+if(LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
+ target_compile_definitions(bpftrace PRIVATE LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
+endif(LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
|
|
||||||
if (ALLOW_UNSAFE_PROBE)
|
|
||||||
target_compile_definitions(bpftrace PRIVATE HAVE_UNSAFE_PROBE)
|
|
||||||
diff --git a/src/attached_probe.cpp b/src/attached_probe.cpp
|
|
||||||
index 587a11576..afad9ed18 100644
|
|
||||||
--- a/src/attached_probe.cpp
|
|
||||||
+++ b/src/attached_probe.cpp
|
|
||||||
@@ -754,26 +754,23 @@ void AttachedProbe::load_prog()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-// XXX(mmarchini): bcc changed the signature of bpf_attach_kprobe, adding a new
|
|
||||||
-// int parameter at the end. Since there's no reliable way to feature-detect
|
|
||||||
-// this, we create a function pointer with the long signature and cast
|
|
||||||
-// bpf_attach_kprobe to this function pointer. If we're on an older bcc
|
|
||||||
-// version, bpf_attach_kprobe call will be augmented with an extra register
|
|
||||||
-// being used for the last parameter, even though this register won't be used
|
|
||||||
-// inside the function. Since the register won't be used this is kinda safe,
|
|
||||||
-// although not ideal.
|
|
||||||
-typedef int (*attach_probe_wrapper_signature)(int, enum bpf_probe_attach_type, const char*, const char*, uint64_t, int);
|
|
||||||
-
|
|
||||||
void AttachedProbe::attach_kprobe(bool safe_mode)
|
|
||||||
{
|
|
||||||
resolve_offset_kprobe(safe_mode);
|
|
||||||
- int perf_event_fd = cast_signature<attach_probe_wrapper_signature>(
|
|
||||||
- &bpf_attach_kprobe)(progfd_,
|
|
||||||
- attachtype(probe_.type),
|
|
||||||
- eventname().c_str(),
|
|
||||||
- probe_.attach_point.c_str(),
|
|
||||||
- offset_,
|
|
||||||
- 0);
|
|
||||||
+#ifdef LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE
|
|
||||||
+ int perf_event_fd = bpf_attach_kprobe(progfd_,
|
|
||||||
+ attachtype(probe_.type),
|
|
||||||
+ eventname().c_str(),
|
|
||||||
+ probe_.attach_point.c_str(),
|
|
||||||
+ offset_,
|
|
||||||
+ 0);
|
|
||||||
+#else
|
|
||||||
+ int perf_event_fd = bpf_attach_kprobe(progfd_,
|
|
||||||
+ attachtype(probe_.type),
|
|
||||||
+ eventname().c_str(),
|
|
||||||
+ probe_.attach_point.c_str(),
|
|
||||||
+ offset_);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if (perf_event_fd < 0) {
|
|
||||||
if (probe_.orig_name != probe_.name) {
|
|
||||||
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
|
|
||||||
index 3688b8487..84daeb2aa 100644
|
|
||||||
--- a/tests/CMakeLists.txt
|
|
||||||
+++ b/tests/CMakeLists.txt
|
|
||||||
@@ -102,6 +102,9 @@ if(HAVE_BFD_DISASM)
|
|
||||||
target_link_libraries(bpftrace_test ${LIBOPCODES_LIBRARIES})
|
|
||||||
endif(STATIC_LINKING)
|
|
||||||
endif(HAVE_BFD_DISASM)
|
|
||||||
+if(LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
+ target_compile_definitions(bpftrace_test PRIVATE LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
+endif(LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
|
|
||||||
target_link_libraries(bpftrace_test arch ast parser resources)
|
|
||||||
|
|
|
@ -1,148 +0,0 @@
|
||||||
From c7dbab451484b96178da1a8c43330154ce4c9d7a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Daniel Xu <dxu@dxuuu.xyz>
|
|
||||||
Date: Wed, 14 Oct 2020 17:09:46 -0700
|
|
||||||
Subject: [PATCH] Detect 7 arg bpf_attach_uprobe() API
|
|
||||||
|
|
||||||
The 7th arg allows us to specify the usdt semaphore location.
|
|
||||||
---
|
|
||||||
cmake/FindLibBcc.cmake | 11 +++++++++++
|
|
||||||
src/CMakeLists.txt | 3 +++
|
|
||||||
src/attached_probe.cpp | 42 ++++++++++++++++++++++++++++++++++--------
|
|
||||||
src/main.cpp | 6 ++++++
|
|
||||||
tests/CMakeLists.txt | 3 +++
|
|
||||||
5 files changed, 57 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/cmake/FindLibBcc.cmake b/cmake/FindLibBcc.cmake
|
|
||||||
index 4c09a8ca2..92cedab5e 100644
|
|
||||||
--- a/cmake/FindLibBcc.cmake
|
|
||||||
+++ b/cmake/FindLibBcc.cmake
|
|
||||||
@@ -7,6 +7,8 @@
|
|
||||||
# LIBBCC_DEFINITIONS - Compiler switches required for using libbcc
|
|
||||||
# LIBBCC_BPF_LIBRARY_STATIC - libbpf static library (for static compilation)
|
|
||||||
# LIBBCC_LOADER_LIBRARY_STATIC - libbcc helper static library (for static compilation)
|
|
||||||
+# LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE
|
|
||||||
+# LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE
|
|
||||||
#
|
|
||||||
# Note that the shared libbcc binary has libbpf and bcc_loader already compiled in but
|
|
||||||
# the static doesn't. So when creating a static build those have to be included too.
|
|
||||||
@@ -94,6 +96,15 @@ int main(void) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
" LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
+
|
|
||||||
+CHECK_CXX_SOURCE_COMPILES("
|
|
||||||
+#include <bcc/libbpf.h>
|
|
||||||
+
|
|
||||||
+int main(void) {
|
|
||||||
+ bpf_attach_uprobe(0, BPF_PROBE_ENTRY, \"\", \"\", 0, 0, 0);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+" LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE)
|
|
||||||
SET(CMAKE_REQUIRED_LIBRARIES)
|
|
||||||
SET(CMAKE_REQUIRED_INCLUDES)
|
|
||||||
endif()
|
|
||||||
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
|
||||||
index 9162356e3..cef94d144 100644
|
|
||||||
--- a/src/CMakeLists.txt
|
|
||||||
+++ b/src/CMakeLists.txt
|
|
||||||
@@ -88,6 +88,9 @@ endif(HAVE_BFD_DISASM)
|
|
||||||
if(LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
target_compile_definitions(bpftrace PRIVATE LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
endif(LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
+if(LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE)
|
|
||||||
+ target_compile_definitions(bpftrace PRIVATE LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE)
|
|
||||||
+endif(LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE)
|
|
||||||
|
|
||||||
if (ALLOW_UNSAFE_PROBE)
|
|
||||||
target_compile_definitions(bpftrace PRIVATE HAVE_UNSAFE_PROBE)
|
|
||||||
diff --git a/src/attached_probe.cpp b/src/attached_probe.cpp
|
|
||||||
index 93fbfa876..a5d8bc56d 100644
|
|
||||||
--- a/src/attached_probe.cpp
|
|
||||||
+++ b/src/attached_probe.cpp
|
|
||||||
@@ -698,12 +698,23 @@ void AttachedProbe::attach_uprobe(bool safe_mode)
|
|
||||||
{
|
|
||||||
resolve_offset_uprobe(safe_mode);
|
|
||||||
|
|
||||||
- int perf_event_fd = bpf_attach_uprobe(progfd_,
|
|
||||||
- attachtype(probe_.type),
|
|
||||||
- eventname().c_str(),
|
|
||||||
- probe_.path.c_str(),
|
|
||||||
- offset_,
|
|
||||||
- probe_.pid);
|
|
||||||
+ int perf_event_fd =
|
|
||||||
+#ifdef LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE
|
|
||||||
+ bpf_attach_uprobe(progfd_,
|
|
||||||
+ attachtype(probe_.type),
|
|
||||||
+ eventname().c_str(),
|
|
||||||
+ probe_.path.c_str(),
|
|
||||||
+ offset_,
|
|
||||||
+ probe_.pid,
|
|
||||||
+ 0);
|
|
||||||
+#else
|
|
||||||
+ bpf_attach_uprobe(progfd_,
|
|
||||||
+ attachtype(probe_.type),
|
|
||||||
+ eventname().c_str(),
|
|
||||||
+ probe_.path.c_str(),
|
|
||||||
+ offset_,
|
|
||||||
+ probe_.pid);
|
|
||||||
+#endif // LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE
|
|
||||||
|
|
||||||
if (perf_event_fd < 0)
|
|
||||||
throw std::runtime_error("Error attaching probe: " + probe_.name);
|
|
||||||
@@ -812,8 +823,23 @@ void AttachedProbe::attach_usdt(int pid)
|
|
||||||
|
|
||||||
offset_ = resolve_offset(probe_.path, probe_.attach_point, probe_.loc);
|
|
||||||
|
|
||||||
- int perf_event_fd = bpf_attach_uprobe(progfd_, attachtype(probe_.type),
|
|
||||||
- eventname().c_str(), probe_.path.c_str(), offset_, pid == 0 ? -1 : pid);
|
|
||||||
+ int perf_event_fd =
|
|
||||||
+#ifdef LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE
|
|
||||||
+ bpf_attach_uprobe(progfd_,
|
|
||||||
+ attachtype(probe_.type),
|
|
||||||
+ eventname().c_str(),
|
|
||||||
+ probe_.path.c_str(),
|
|
||||||
+ offset_,
|
|
||||||
+ pid == 0 ? -1 : pid,
|
|
||||||
+ 0);
|
|
||||||
+#else
|
|
||||||
+ bpf_attach_uprobe(progfd_,
|
|
||||||
+ attachtype(probe_.type),
|
|
||||||
+ eventname().c_str(),
|
|
||||||
+ probe_.path.c_str(),
|
|
||||||
+ offset_,
|
|
||||||
+ pid == 0 ? -1 : pid);
|
|
||||||
+#endif // LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE
|
|
||||||
|
|
||||||
if (perf_event_fd < 0)
|
|
||||||
{
|
|
||||||
diff --git a/src/main.cpp b/src/main.cpp
|
|
||||||
index 48fcf5aa0..09f4d9677 100644
|
|
||||||
--- a/src/main.cpp
|
|
||||||
+++ b/src/main.cpp
|
|
||||||
@@ -162,6 +162,12 @@ static int info()
|
|
||||||
<< "yes" << std::endl;
|
|
||||||
#else
|
|
||||||
<< "no" << std::endl;
|
|
||||||
+#endif
|
|
||||||
+ std::cerr << " bcc bpf_attach_uprobe refcount: "
|
|
||||||
+#ifdef LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE
|
|
||||||
+ << "yes" << std::endl;
|
|
||||||
+#else
|
|
||||||
+ << "no" << std::endl;
|
|
||||||
#endif
|
|
||||||
std::cerr << " libbpf: "
|
|
||||||
#ifdef HAVE_LIBBPF
|
|
||||||
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
|
|
||||||
index ace5ff106..332eba2b5 100644
|
|
||||||
--- a/tests/CMakeLists.txt
|
|
||||||
+++ b/tests/CMakeLists.txt
|
|
||||||
@@ -116,6 +116,9 @@ endif(HAVE_BFD_DISASM)
|
|
||||||
if(LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
target_compile_definitions(bpftrace_test PRIVATE LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
endif(LIBBCC_ATTACH_KPROBE_SIX_ARGS_SIGNATURE)
|
|
||||||
+if(LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE)
|
|
||||||
+ target_compile_definitions(bpftrace_test PRIVATE LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE)
|
|
||||||
+endif(LIBBCC_ATTACH_UPROBE_SEVEN_ARGS_SIGNATURE)
|
|
||||||
|
|
||||||
target_link_libraries(bpftrace_test arch ast parser resources)
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Template file for 'bpftrace'
|
# Template file for 'bpftrace'
|
||||||
pkgname=bpftrace
|
pkgname=bpftrace
|
||||||
version=0.11.2
|
version=0.11.4
|
||||||
revision=1
|
revision=1
|
||||||
archs="x86_64* aarch64* ppc64*"
|
archs="x86_64* aarch64* ppc64*"
|
||||||
build_style=cmake
|
build_style=cmake
|
||||||
|
@ -12,13 +12,7 @@ maintainer="Leah Neukirchen <leah@vuxu.org>"
|
||||||
license="Apache-2.0"
|
license="Apache-2.0"
|
||||||
homepage="https://github.com/iovisor/bpftrace/"
|
homepage="https://github.com/iovisor/bpftrace/"
|
||||||
distfiles="https://github.com/iovisor/bpftrace/archive/v${version}.tar.gz"
|
distfiles="https://github.com/iovisor/bpftrace/archive/v${version}.tar.gz"
|
||||||
checksum=1f0fc30073547e3b285e1a373aa469bb18d3ba27f8c05f91016df0ca84f77f90
|
checksum=5b9c7509887e4337841e3188eabcc7247bc2c1cc312c983cbb8b77e341d20242
|
||||||
|
|
||||||
post_extract() {
|
|
||||||
for i in ${FILESDIR}/bpftrace-*.patch; do
|
|
||||||
patch -sNp1 -i ${i}
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
post_install() {
|
post_install() {
|
||||||
# clashes with bcc-tools
|
# clashes with bcc-tools
|
||||||
|
|
Loading…
Reference in New Issue