Rebuild for LLVM 11
Resolves: bz#1897622
This commit is contained in:
parent
9d461237bb
commit
172a6f7d2f
150
bpftrace-0.11.0-Detect-7-arg-bpf_attach_uprobe-API.patch
Normal file
150
bpftrace-0.11.0-Detect-7-arg-bpf_attach_uprobe-API.patch
Normal file
@ -0,0 +1,150 @@
|
||||
From 62a2d7f199996ef8cb16e08854edb44445db8d67 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Xu <dxu@dxuuu.xyz>
|
||||
Date: Wed, 14 Oct 2020 17:09:46 -0700
|
||||
Subject: [PATCH 2/2] 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 ec21627..76ab3b3 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.
|
||||
@@ -92,5 +94,14 @@ 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)
|
||||
endif()
|
||||
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
||||
index 35d2400..b4eee17 100644
|
||||
--- a/src/CMakeLists.txt
|
||||
+++ b/src/CMakeLists.txt
|
||||
@@ -82,6 +82,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 afad9ed..811226a 100644
|
||||
--- a/src/attached_probe.cpp
|
||||
+++ b/src/attached_probe.cpp
|
||||
@@ -790,12 +790,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);
|
||||
@@ -904,8 +915,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 71a06c1..bf76da8 100644
|
||||
--- a/src/main.cpp
|
||||
+++ b/src/main.cpp
|
||||
@@ -155,6 +155,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 ed0ccf8..d94868a 100644
|
||||
--- a/tests/CMakeLists.txt
|
||||
+++ b/tests/CMakeLists.txt
|
||||
@@ -103,6 +103,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)
|
||||
|
||||
--
|
||||
2.25.4
|
||||
|
129
bpftrace-0.11.0-Feature-detect-bpf_attach_kprobe-signature.patch
Normal file
129
bpftrace-0.11.0-Feature-detect-bpf_attach_kprobe-signature.patch
Normal file
@ -0,0 +1,129 @@
|
||||
From 00687a3538755b60c2b205963c8ae49b4681e642 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 1/2] 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 9d30b04..ec21627 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 487fa9b..35d2400 100644
|
||||
--- a/src/CMakeLists.txt
|
||||
+++ b/src/CMakeLists.txt
|
||||
@@ -79,6 +79,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 587a115..afad9ed 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 4104a57..ed0ccf8 100644
|
||||
--- a/tests/CMakeLists.txt
|
||||
+++ b/tests/CMakeLists.txt
|
||||
@@ -100,6 +100,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)
|
||||
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,282 @@
|
||||
From d0f1159fafc52a31713d98d336d10e423e7eb5a0 Mon Sep 17 00:00:00 2001
|
||||
From: Ovidiu Panait <ovidiu.panait@windriver.com>
|
||||
Date: Thu, 6 Aug 2020 10:34:23 +0300
|
||||
Subject: [PATCH] irbuilderbpf.cpp, bpforc.h: Fix compilation with LLVM 11
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Fixes: #1384
|
||||
|
||||
Fix the following build errors when compiling with LLVM 11:
|
||||
|
||||
#1
|
||||
----
|
||||
/llvm/include/llvm/ExecutionEngine/Orc/Legacy.h:118:35: error: no match for call to ‘(bpftrace::BpfOrc::BpfOrc(llvm::TargetMachine*)::<lambda(const string&)>) (llvm::StringRef)’
|
||||
118 | if (JITSymbol Sym = FindSymbol(*S)) {
|
||||
| ~~~~~~~~~~^~~~
|
||||
/llvm/include/llvm/ExecutionEngine/Orc/Legacy.h:118:35: note: candidate: ‘llvm::JITSymbol (*)(const string&)’ {aka ‘llvm::JITSymbol (*)(const std::__cxx11::basic_string<char>&)’} <conversion>
|
||||
/llvm/include/llvm/ExecutionEngine/Orc/Legacy.h:118:35: note: candidate expects 2 arguments, 2 provided
|
||||
In file included from /work/src/github.com/iovisor/bpftrace/src/ast/codegen_llvm.cpp:5:
|
||||
/work/src/github.com/iovisor/bpftrace/src/bpforc.h:99:13: note: candidate: ‘bpftrace::BpfOrc::BpfOrc(llvm::TargetMachine*)::<lambda(const string&)>’
|
||||
99 | [](const std::string &Name __attribute__((unused))) -> JITSymbol {
|
||||
| ^
|
||||
/work/src/github.com/iovisor/bpftrace/src/bpforc.h:99:13: note: no known conversion for argument 1 from ‘llvm::StringRef’ to ‘const string&’ {aka ‘const std::__cxx11::basic_string<char>&’}
|
||||
In file included from /llvm/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h:23,
|
||||
|
||||
#2
|
||||
----
|
||||
| /src/ast/irbuilderbpf.cpp: In member function 'llvm::CallInst* bpftrace::ast::IRBuilderBPF::createMapLookup(int, llvm::AllocaInst*)':
|
||||
| /src/ast/irbuilderbpf.cpp:230:65: error: no matching function for call to 'bpftrace::ast::IRBuilderBPF::CreateCall(llvm::Constant*&, <brace-enclosed initializer list>, const char [12])'
|
||||
| 230 | return CreateCall(lookup_func, { map_ptr, key }, "lookup_elem");
|
||||
| | ^
|
||||
| In file included from /src/ast/irbuilderbpf.h:9,
|
||||
| from /src/ast/async_event_types.h:3,
|
||||
| from /src/ast/irbuilderbpf.cpp:5:
|
||||
| /usr/include/llvm/IR/IRBuilder.h:2324:13: note: candidate: 'llvm::CallInst* llvm::IRBuilderBase::CreateCall(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, const llvm::Twine&, llvm::MDNode*)'
|
||||
| 2324 | CallInst *CreateCall(FunctionType *FTy, Value *Callee,
|
||||
| | ^~~~~~~~~~
|
||||
| /usr/include/llvm/IR/IRBuilder.h:2324:38: note: no known conversion for argument 1 from 'llvm::Constant*' to 'llvm::FunctionType*'
|
||||
| 2324 | CallInst *CreateCall(FunctionType *FTy, Value *Callee,
|
||||
| | ~~~~~~~~~~~~~~^~~
|
||||
|
||||
The CreateCall part is based on the llvm 11 fix from bcc:
|
||||
https://github.com/iovisor/bcc/commit/45e63f2b316cdce2d8cc925f6f14a8726ade9ff6
|
||||
|
||||
Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
|
||||
---
|
||||
src/ast/irbuilderbpf.cpp | 55 ++++++++++++++++++++++++++--------------
|
||||
src/ast/irbuilderbpf.h | 1 +
|
||||
src/bpforc.h | 6 +++++
|
||||
3 files changed, 43 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/src/ast/irbuilderbpf.cpp b/src/ast/irbuilderbpf.cpp
|
||||
index 8ae055e..4498e0f 100644
|
||||
--- a/src/ast/irbuilderbpf.cpp
|
||||
+++ b/src/ast/irbuilderbpf.cpp
|
||||
@@ -201,10 +201,25 @@ llvm::Type *IRBuilderBPF::GetType(const SizedType &stype)
|
||||
return ty;
|
||||
}
|
||||
|
||||
+CallInst *IRBuilderBPF::createCall(Value *callee,
|
||||
+ ArrayRef<Value *> args,
|
||||
+ const Twine &Name)
|
||||
+{
|
||||
+#if LLVM_VERSION_MAJOR >= 11
|
||||
+ auto *calleePtrType = cast<PointerType>(callee->getType());
|
||||
+ auto *calleeType = cast<FunctionType>(calleePtrType->getElementType());
|
||||
+ return CreateCall(calleeType, callee, args, Name);
|
||||
+#else
|
||||
+ return CreateCall(callee, args, Name);
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
CallInst *IRBuilderBPF::CreateBpfPseudoCall(int mapfd)
|
||||
{
|
||||
Function *pseudo_func = module_.getFunction("llvm.bpf.pseudo");
|
||||
- return CreateCall(pseudo_func, {getInt64(BPF_PSEUDO_MAP_FD), getInt64(mapfd)}, "pseudo");
|
||||
+ return createCall(pseudo_func,
|
||||
+ { getInt64(BPF_PSEUDO_MAP_FD), getInt64(mapfd) },
|
||||
+ "pseudo");
|
||||
}
|
||||
|
||||
CallInst *IRBuilderBPF::CreateBpfPseudoCall(Map &map)
|
||||
@@ -227,7 +242,7 @@ CallInst *IRBuilderBPF::createMapLookup(int mapfd, AllocaInst *key)
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_map_lookup_elem),
|
||||
lookup_func_ptr_type);
|
||||
- return CreateCall(lookup_func, { map_ptr, key }, "lookup_elem");
|
||||
+ return createCall(lookup_func, { map_ptr, key }, "lookup_elem");
|
||||
}
|
||||
|
||||
CallInst *IRBuilderBPF::CreateGetJoinMap(Value *ctx, const location &loc)
|
||||
@@ -325,7 +340,7 @@ void IRBuilderBPF::CreateMapUpdateElem(Value *ctx,
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_map_update_elem),
|
||||
update_func_ptr_type);
|
||||
- CallInst *call = CreateCall(update_func,
|
||||
+ CallInst *call = createCall(update_func,
|
||||
{ map_ptr, key, val, flags },
|
||||
"update_elem");
|
||||
CreateHelperErrorCond(ctx, call, libbpf::BPF_FUNC_map_update_elem, loc);
|
||||
@@ -349,7 +364,7 @@ void IRBuilderBPF::CreateMapDeleteElem(Value *ctx,
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_map_delete_elem),
|
||||
delete_func_ptr_type);
|
||||
- CallInst *call = CreateCall(delete_func, { map_ptr, key }, "delete_elem");
|
||||
+ CallInst *call = createCall(delete_func, { map_ptr, key }, "delete_elem");
|
||||
CreateHelperErrorCond(ctx, call, libbpf::BPF_FUNC_map_delete_elem, loc);
|
||||
}
|
||||
|
||||
@@ -378,7 +393,7 @@ void IRBuilderBPF::CreateProbeRead(Value *ctx,
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_probe_read),
|
||||
proberead_func_ptr_type);
|
||||
- CallInst *call = CreateCall(proberead_func, { dst, size, src }, "probe_read");
|
||||
+ CallInst *call = createCall(proberead_func, { dst, size, src }, "probe_read");
|
||||
CreateHelperErrorCond(ctx, call, libbpf::BPF_FUNC_probe_read, loc);
|
||||
}
|
||||
|
||||
@@ -413,7 +428,7 @@ CallInst *IRBuilderBPF::CreateProbeReadStr(Value *ctx,
|
||||
{
|
||||
assert(ctx && ctx->getType() == getInt8PtrTy());
|
||||
Constant *fn = createProbeReadStrFn(dst->getType(), src->getType());
|
||||
- CallInst *call = CreateCall(fn,
|
||||
+ CallInst *call = createCall(fn,
|
||||
{ dst, getInt32(size), src },
|
||||
"probe_read_str");
|
||||
CreateHelperErrorCond(ctx, call, libbpf::BPF_FUNC_probe_read_str, loc);
|
||||
@@ -434,7 +449,7 @@ CallInst *IRBuilderBPF::CreateProbeReadStr(Value *ctx,
|
||||
auto *size_i32 = CreateIntCast(size, getInt32Ty(), false);
|
||||
|
||||
Constant *fn = createProbeReadStrFn(dst->getType(), src->getType());
|
||||
- CallInst *call = CreateCall(fn, { dst, size_i32, src }, "probe_read_str");
|
||||
+ CallInst *call = createCall(fn, { dst, size_i32, src }, "probe_read_str");
|
||||
CreateHelperErrorCond(ctx, call, libbpf::BPF_FUNC_probe_read_str, loc);
|
||||
return call;
|
||||
}
|
||||
@@ -717,7 +732,7 @@ CallInst *IRBuilderBPF::CreateGetNs()
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_ktime_get_ns),
|
||||
gettime_func_ptr_type);
|
||||
- return CreateCall(gettime_func, {}, "get_ns");
|
||||
+ return createCall(gettime_func, {}, "get_ns");
|
||||
}
|
||||
|
||||
CallInst *IRBuilderBPF::CreateGetPidTgid()
|
||||
@@ -730,7 +745,7 @@ CallInst *IRBuilderBPF::CreateGetPidTgid()
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_get_current_pid_tgid),
|
||||
getpidtgid_func_ptr_type);
|
||||
- return CreateCall(getpidtgid_func, {}, "get_pid_tgid");
|
||||
+ return createCall(getpidtgid_func, {}, "get_pid_tgid");
|
||||
}
|
||||
|
||||
CallInst *IRBuilderBPF::CreateGetCurrentCgroupId()
|
||||
@@ -744,7 +759,7 @@ CallInst *IRBuilderBPF::CreateGetCurrentCgroupId()
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_get_current_cgroup_id),
|
||||
getcgroupid_func_ptr_type);
|
||||
- return CreateCall(getcgroupid_func, {}, "get_cgroup_id");
|
||||
+ return createCall(getcgroupid_func, {}, "get_cgroup_id");
|
||||
}
|
||||
|
||||
CallInst *IRBuilderBPF::CreateGetUidGid()
|
||||
@@ -757,7 +772,7 @@ CallInst *IRBuilderBPF::CreateGetUidGid()
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_get_current_uid_gid),
|
||||
getuidgid_func_ptr_type);
|
||||
- return CreateCall(getuidgid_func, {}, "get_uid_gid");
|
||||
+ return createCall(getuidgid_func, {}, "get_uid_gid");
|
||||
}
|
||||
|
||||
CallInst *IRBuilderBPF::CreateGetCpuId()
|
||||
@@ -770,7 +785,7 @@ CallInst *IRBuilderBPF::CreateGetCpuId()
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_get_smp_processor_id),
|
||||
getcpuid_func_ptr_type);
|
||||
- return CreateCall(getcpuid_func, {}, "get_cpu_id");
|
||||
+ return createCall(getcpuid_func, {}, "get_cpu_id");
|
||||
}
|
||||
|
||||
CallInst *IRBuilderBPF::CreateGetCurrentTask()
|
||||
@@ -783,7 +798,7 @@ CallInst *IRBuilderBPF::CreateGetCurrentTask()
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_get_current_task),
|
||||
getcurtask_func_ptr_type);
|
||||
- return CreateCall(getcurtask_func, {}, "get_cur_task");
|
||||
+ return createCall(getcurtask_func, {}, "get_cur_task");
|
||||
}
|
||||
|
||||
CallInst *IRBuilderBPF::CreateGetRandom()
|
||||
@@ -796,7 +811,7 @@ CallInst *IRBuilderBPF::CreateGetRandom()
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_get_prandom_u32),
|
||||
getrandom_func_ptr_type);
|
||||
- return CreateCall(getrandom_func, {}, "get_random");
|
||||
+ return createCall(getrandom_func, {}, "get_random");
|
||||
}
|
||||
|
||||
CallInst *IRBuilderBPF::CreateGetStackId(Value *ctx,
|
||||
@@ -826,7 +841,7 @@ CallInst *IRBuilderBPF::CreateGetStackId(Value *ctx,
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_get_stackid),
|
||||
getstackid_func_ptr_type);
|
||||
- CallInst *call = CreateCall(getstackid_func,
|
||||
+ CallInst *call = createCall(getstackid_func,
|
||||
{ ctx, map_ptr, flags_val },
|
||||
"get_stackid");
|
||||
CreateHelperErrorCond(ctx, call, libbpf::BPF_FUNC_get_stackid, loc);
|
||||
@@ -852,7 +867,7 @@ void IRBuilderBPF::CreateGetCurrentComm(Value *ctx,
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_get_current_comm),
|
||||
getcomm_func_ptr_type);
|
||||
- CallInst *call = CreateCall(getcomm_func,
|
||||
+ CallInst *call = createCall(getcomm_func,
|
||||
{ buf, getInt64(size) },
|
||||
"get_comm");
|
||||
CreateHelperErrorCond(ctx, call, libbpf::BPF_FUNC_get_current_comm, loc);
|
||||
@@ -883,7 +898,9 @@ void IRBuilderBPF::CreatePerfEventOutput(Value *ctx, Value *data, size_t size)
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_perf_event_output),
|
||||
perfoutput_func_ptr_type);
|
||||
- CreateCall(perfoutput_func, {ctx, map_ptr, flags_val, data, size_val}, "perf_event_output");
|
||||
+ createCall(perfoutput_func,
|
||||
+ { ctx, map_ptr, flags_val, data, size_val },
|
||||
+ "perf_event_output");
|
||||
}
|
||||
|
||||
void IRBuilderBPF::CreateSignal(Value *ctx, Value *sig, const location &loc)
|
||||
@@ -899,7 +916,7 @@ void IRBuilderBPF::CreateSignal(Value *ctx, Value *sig, const location &loc)
|
||||
Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_send_signal),
|
||||
signal_func_ptr_type);
|
||||
- CallInst *call = CreateCall(signal_func, { sig }, "signal");
|
||||
+ CallInst *call = createCall(signal_func, { sig }, "signal");
|
||||
CreateHelperErrorCond(ctx, call, libbpf::BPF_FUNC_send_signal, loc);
|
||||
}
|
||||
|
||||
@@ -913,7 +930,7 @@ void IRBuilderBPF::CreateOverrideReturn(Value *ctx, Value *rc)
|
||||
Constant *override_func = ConstantExpr::getCast(Instruction::IntToPtr,
|
||||
getInt64(libbpf::BPF_FUNC_override_return),
|
||||
override_func_ptr_type);
|
||||
- CreateCall(override_func, { ctx, rc }, "override");
|
||||
+ createCall(override_func, { ctx, rc }, "override");
|
||||
}
|
||||
|
||||
Value *IRBuilderBPF::CreatKFuncArg(Value *ctx,
|
||||
diff --git a/src/ast/irbuilderbpf.h b/src/ast/irbuilderbpf.h
|
||||
index d4361a8..3111507 100644
|
||||
--- a/src/ast/irbuilderbpf.h
|
||||
+++ b/src/ast/irbuilderbpf.h
|
||||
@@ -80,6 +80,7 @@ class IRBuilderBPF : public IRBuilder<>
|
||||
CallInst *CreateGetRandom();
|
||||
CallInst *CreateGetStackId(Value *ctx, bool ustack, StackType stack_type, const location& loc);
|
||||
CallInst *CreateGetJoinMap(Value *ctx, const location& loc);
|
||||
+ CallInst *createCall(Value *callee, ArrayRef<Value *> args, const Twine &Name);
|
||||
void CreateGetCurrentComm(Value *ctx, AllocaInst *buf, size_t size, const location& loc);
|
||||
void CreatePerfEventOutput(Value *ctx, Value *data, size_t size);
|
||||
void CreateSignal(Value *ctx, Value *sig, const location &loc);
|
||||
diff --git a/src/bpforc.h b/src/bpforc.h
|
||||
index a42e031..295f703 100644
|
||||
--- a/src/bpforc.h
|
||||
+++ b/src/bpforc.h
|
||||
@@ -96,9 +96,15 @@ class BpfOrc
|
||||
: TM(TM_),
|
||||
Resolver(createLegacyLookupResolver(
|
||||
ES,
|
||||
+#if LLVM_VERSION_MAJOR >= 11
|
||||
+ [](llvm::StringRef Name __attribute__((unused))) -> JITSymbol {
|
||||
+ return nullptr;
|
||||
+ },
|
||||
+#else
|
||||
[](const std::string &Name __attribute__((unused))) -> JITSymbol {
|
||||
return nullptr;
|
||||
},
|
||||
+#endif
|
||||
[](Error Err) { cantFail(std::move(Err), "lookup failed"); })),
|
||||
#if LLVM_VERSION_MAJOR > 8
|
||||
ObjectLayer(AcknowledgeORCv1Deprecation,
|
||||
--
|
||||
2.25.4
|
||||
|
@ -1,11 +1,14 @@
|
||||
Name: bpftrace
|
||||
Version: 0.11.0
|
||||
Release: 4%{?dist}
|
||||
Release: 5%{?dist}
|
||||
Summary: High-level tracing language for Linux eBPF
|
||||
License: ASL 2.0
|
||||
|
||||
URL: https://github.com/iovisor/bpftrace
|
||||
Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
|
||||
Patch0: %{name}-%{version}-irbuilderbpf.cpp-bpforc.h-Fix-compilation-with-LLVM-.patch
|
||||
Patch1: %{name}-%{version}-Feature-detect-bpf_attach_kprobe-signature.patch
|
||||
Patch2: %{name}-%{version}-Detect-7-arg-bpf_attach_uprobe-API.patch
|
||||
|
||||
# Arches will be included as upstream support is added and dependencies are
|
||||
# satisfied in the respective arches
|
||||
@ -76,6 +79,9 @@ find %{buildroot}%{_datadir}/%{name}/tools -type f -exec \
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Nov 13 2020 Jerome Marchand <jmarchan@redhat.com> - 0.11.0-5
|
||||
- Rebuilt for LLVM 11
|
||||
|
||||
* Tue Aug 04 2020 Augusto Caringi <acaringi@redhat.com> - 0.11.0-4
|
||||
- Fix FTBFS due to cmake wide changes #1863295
|
||||
- Fix 'bpftrace symbols are stripped' #1865787
|
||||
|
Loading…
Reference in New Issue
Block a user