import bpftrace-0.12.1-3.el8

This commit is contained in:
CentOS Sources 2021-10-06 04:33:00 -04:00 committed by Stepan Oksanichenko
parent e9624d6e0b
commit 7d6f9af53a
7 changed files with 27 additions and 356 deletions

View File

@ -1 +1 @@
6bb8d682de04ffd47d565eb2542bc7c7d7b5da84 SOURCES/bpftrace-0.11.1.tar.gz
9cc3a1b5d4efd1649753cdb374102440c6625b57 SOURCES/bpftrace-0.12.1.tar.gz

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/bpftrace-0.11.1.tar.gz
SOURCES/bpftrace-0.12.1.tar.gz

View File

@ -1,49 +0,0 @@
From ed9caea4efcffdd9f37c67b272324a87abfd20c8 Mon Sep 17 00:00:00 2001
From: Jerome Marchand <jmarchan@redhat.com>
Date: Thu, 5 Nov 2020 15:17:14 +0100
Subject: [PATCH] Fix clear() when called on an array
Fixes the following error:
Error looking up elem: -1
terminate called after throwing an instance of 'std::runtime_error'
what(): Could not clear map with ident "@", err=-1
Aborted (core dumped)
---
src/bpftrace.cpp | 5 +++++
src/imap.h | 4 ++++
2 files changed, 9 insertions(+)
diff --git a/src/bpftrace.cpp b/src/bpftrace.cpp
index 23b65a5..fe2fb66 100644
--- a/src/bpftrace.cpp
+++ b/src/bpftrace.cpp
@@ -1147,6 +1147,11 @@ int BPFtrace::print_maps()
int BPFtrace::clear_map(IMap &map)
{
std::vector<uint8_t> old_key;
+ if (map.is_array_type())
+ {
+ return zero_map(map);
+ }
+
try
{
if (map.type_.IsHistTy() || map.type_.IsLhistTy() ||
diff --git a/src/imap.h b/src/imap.h
index 27d0d74..ca9f424 100644
--- a/src/imap.h
+++ b/src/imap.h
@@ -27,6 +27,10 @@ class IMap
return map_type_ == BPF_MAP_TYPE_PERCPU_HASH ||
map_type_ == BPF_MAP_TYPE_PERCPU_ARRAY;
}
+ bool is_array_type()
+ {
+ return map_type_ == BPF_MAP_TYPE_PERCPU_ARRAY;
+ }
// unique id of this map. Used by (bpf) runtime to reference
// this map
--
2.25.4

View File

@ -1,282 +0,0 @@
From 0768e5f58d39ebb60c18813ea77953be00ce5830 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

View File

@ -1,4 +1,4 @@
From e9ebda9b3d14831df5e1c5174d21f322e084d074 Mon Sep 17 00:00:00 2001
From 69f6d7ff04f43451eea2fb028a84a76331bbf6ea Mon Sep 17 00:00:00 2001
From: Jerome Marchand <jmarchan@redhat.com>
Date: Thu, 11 Jun 2020 14:56:36 +0200
Subject: [PATCH] RHEL-8: aarch64: fixes statsnoop and opensnoop
@ -18,7 +18,7 @@ patches.
2 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/tools/opensnoop.bt b/tools/opensnoop.bt
index a7de802..d99db93 100755
index a7de8026..d99db93e 100755
--- a/tools/opensnoop.bt
+++ b/tools/opensnoop.bt
@@ -21,13 +21,11 @@ BEGIN
@ -36,7 +36,7 @@ index a7de802..d99db93 100755
/@filename[tid]/
{
diff --git a/tools/statsnoop.bt b/tools/statsnoop.bt
index b2d529e..f612ea9 100755
index b2d529e2..f612ea94 100755
--- a/tools/statsnoop.bt
+++ b/tools/statsnoop.bt
@@ -30,17 +30,13 @@ tracepoint:syscalls:sys_enter_statfs
@ -60,5 +60,5 @@ index b2d529e..f612ea9 100755
{
$ret = args->ret;
--
2.25.4
2.30.2

View File

@ -1,4 +1,4 @@
From 30cd8a899ec375ca0e46db51fa48ee80c5463470 Mon Sep 17 00:00:00 2001
From 3a7f0bf4f506014644cf935332346e3c227123c9 Mon Sep 17 00:00:00 2001
From: Jerome Marchand <jmarchan@redhat.com>
Date: Tue, 11 Jun 2019 16:41:59 +0200
Subject: [PATCH] RHEL 8 fixes
@ -11,7 +11,7 @@ Fixes the following RHEL 8 specific issues:
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/tools/gethostlatency.bt b/tools/gethostlatency.bt
index a1ac1b2..ade1005 100755
index 9f4ec31e..dd389c6f 100755
--- a/tools/gethostlatency.bt
+++ b/tools/gethostlatency.bt
@@ -26,17 +26,17 @@ BEGIN
@ -37,9 +37,9 @@ index a1ac1b2..ade1005 100755
+uretprobe:/lib64/libc.so.6:gethostbyname2
/@start[tid]/
{
$latms = (nsecs - @start[tid]) / 1000000;
$latms = (nsecs - @start[tid]) / 1e6;
diff --git a/tools/threadsnoop.bt b/tools/threadsnoop.bt
index e4d3875..c56b1ac 100755
index 3824bc6d..bdc6e4df 100755
--- a/tools/threadsnoop.bt
+++ b/tools/threadsnoop.bt
@@ -18,7 +18,7 @@ BEGIN
@ -47,10 +47,10 @@ index e4d3875..c56b1ac 100755
}
-uprobe:/lib/x86_64-linux-gnu/libpthread.so.0:pthread_create
+uprobe:/usr/lib64/libpthread.so:pthread_create
+uprobe:/usr/lib64/libpthread.so.0:pthread_create
{
printf("%-10u %-6d %-16s %s\n", elapsed / 1000000, pid, comm,
printf("%-10u %-6d %-16s %s\n", elapsed / 1e6, pid, comm,
usym(arg2));
--
2.25.4
2.30.2

View File

@ -1,7 +1,7 @@
%bcond_without llvm_static
Name: bpftrace
Version: 0.11.1
Version: 0.12.1
Release: 3%{?dist}
Summary: High-level tracing language for Linux eBPF
License: ASL 2.0
@ -9,8 +9,6 @@ License: ASL 2.0
URL: https://github.com/iovisor/bpftrace
Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
Patch0: %{name}-%{version}-RHEL-8-fixes.patch
Patch1: %{name}-%{version}-irbuilderbpf.cpp-bpforc.h-Fix-compilation-with-LLVM-.patch
Patch2: %{name}-%{version}-Fix-clear-when-called-on-an-array.patch
# WARNING: because of the arch-specific patch, no autosetup is used
# Remember to patch accordingly
Patch10: %{name}-%{version}-RHEL-8-aarch64-fixes-statsnoop-and-opensnoop.patch
@ -36,6 +34,9 @@ BuildRequires: binutils-devel
BuildRequires: llvm-static
%endif
# We don't need kernel-devel to use bpftrace, but some tools need it
Recommends: kernel-devel
%description
BPFtrace is a high-level tracing language for Linux enhanced Berkeley Packet
Filter (eBPF) available in recent Linux kernels (4.x). BPFtrace uses LLVM as a
@ -50,8 +51,6 @@ and predecessor tracers such as DTrace and SystemTap
%setup
%patch0 -p1
%patch1 -p1
%patch2 -p1
%ifarch aarch64
%patch10 -p1
@ -61,8 +60,7 @@ and predecessor tracers such as DTrace and SystemTap
%cmake . \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DBUILD_TESTING:BOOL=OFF \
-DBUILD_SHARED_LIBS:BOOL=OFF \
-DLIBBCC_LIBRARIES:PATH=%{_libdir}/libbcc-no-libbpf.so
-DBUILD_SHARED_LIBS:BOOL=OFF
%make_build
@ -79,11 +77,6 @@ and predecessor tracers such as DTrace and SystemTap
find %{buildroot}%{_datadir}/%{name}/tools -type f -exec \
sed -i -e '1s=^#!/usr/bin/env %{name}\([0-9.]\+\)\?$=#!%{_bindir}/%{name}=' {} \;
# Move man pages to the right location
#mkdir -p %{buildroot}%{_mandir}
#mv %{buildroot}%{_prefix}/man/* %{buildroot}%{_mandir}/
%files
%doc README.md CONTRIBUTING-TOOLS.md
%doc docs/reference_guide.md docs/tutorial_one_liners.md
@ -103,6 +96,15 @@ find %{buildroot}%{_datadir}/%{name}/tools -type f -exec \
%endif
%changelog
* Thu Jun 24 2021 Jerome Marchand <jmarchan@redhat.com> - 0.12.1-3
- Have threadsnoop points to libpthread.so.0
* Wed Jun 09 2021 Jerome Marchand <jmarchan@redhat.com> - 0.12.1-2
- Rebuild on LLVM12
* Fri Apr 30 2021 Jerome Marchand <jmarchan@redhat.com> - 0.12.1-1
- Rebase on bpftrace 0.12.1
* Thu Jan 28 2021 Jerome Marchand <jmarchan@redhat.com> - 0.11.1-3
- Add missing libbpf and binutils-dev dependencies