From 37384b3ae291f16e6b13fac918e5a47715b579a3 Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Thu, 13 Apr 2023 20:16:56 +0300 Subject: [PATCH] import bcc-0.25.0-2.el9 --- .bcc.metadata | 1 + .gitignore | 1 + ...-bpf_pseudo_fd-type-conversion-error.patch | 77 +++ ...-15-int-to-pointer-conversion-errors.patch | 96 ++++ ...0-Fix-some-documentation-issues-4197.patch | 222 ++++++++ ...ding-with-external-libbpf-package-an.patch | 100 ++++ ...er-fix-an-uninitialized-struct-error.patch | 64 +++ SPECS/bcc.spec | 504 ++++++++++++++++++ 8 files changed, 1065 insertions(+) create mode 100644 .bcc.metadata create mode 100644 .gitignore create mode 100644 SOURCES/bcc-0.25.0-Fix-bpf_pseudo_fd-type-conversion-error.patch create mode 100644 SOURCES/bcc-0.25.0-Fix-clang-15-int-to-pointer-conversion-errors.patch create mode 100644 SOURCES/bcc-0.25.0-Fix-some-documentation-issues-4197.patch create mode 100644 SOURCES/bcc-0.25.0-bcc-support-building-with-external-libbpf-package-an.patch create mode 100644 SOURCES/bcc-0.25.0-tools-nfsslower-fix-an-uninitialized-struct-error.patch create mode 100644 SPECS/bcc.spec diff --git a/.bcc.metadata b/.bcc.metadata new file mode 100644 index 0000000..51078f8 --- /dev/null +++ b/.bcc.metadata @@ -0,0 +1 @@ +059187f62e915eb74ea7b18e19fcb185f9d18255 SOURCES/bcc-0.25.0.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9cf0677 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/bcc-0.25.0.tar.gz diff --git a/SOURCES/bcc-0.25.0-Fix-bpf_pseudo_fd-type-conversion-error.patch b/SOURCES/bcc-0.25.0-Fix-bpf_pseudo_fd-type-conversion-error.patch new file mode 100644 index 0000000..8463af4 --- /dev/null +++ b/SOURCES/bcc-0.25.0-Fix-bpf_pseudo_fd-type-conversion-error.patch @@ -0,0 +1,77 @@ +From c17a12ac030c5d9c812e611f8132570af0e795af Mon Sep 17 00:00:00 2001 +From: Yonghong Song +Date: Sat, 13 Aug 2022 17:50:07 -0700 +Subject: [PATCH 1/2] Fix bpf_pseudo_fd() type conversion error + +With llvm15 and llvm16, the following command line + sudo ./trace.py 'smp_call_function_single "%K", arg1' +will cause error: + /virtual/main.c:60:36: error: incompatible integer to pointer conversion passing 'u64' + (aka 'unsigned long long') to parameter of type 'void *' [-Wint-conversion] + bpf_perf_event_output(ctx, bpf_pseudo_fd(1, -1), CUR_CPU_IDENTIFIER, &__data, sizeof(__data)); + ^~~~~~~~~~~~~~~~~~~~ + 1 error generated. + Failed to compile BPF module + +In helpers.h, we have + u64 bpf_pseudo_fd(u64, u64) asm("llvm.bpf.pseudo"); +Apparently, <= llvm14 can tolerate u64 -> 'void *' conversion, but +llvm15 by default will cause an error. + +Let us explicitly convert bpf_pseudo_fd to 'void *' to avoid +such errors. + +Signed-off-by: Yonghong Song +--- + src/cc/frontends/clang/b_frontend_action.cc | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/cc/frontends/clang/b_frontend_action.cc b/src/cc/frontends/clang/b_frontend_action.cc +index a4e05b16..dbeba3e4 100644 +--- a/src/cc/frontends/clang/b_frontend_action.cc ++++ b/src/cc/frontends/clang/b_frontend_action.cc +@@ -957,7 +957,7 @@ bool BTypeVisitor::VisitCallExpr(CallExpr *Call) { + string arg0 = rewriter_.getRewrittenText(expansionRange(Call->getArg(0)->getSourceRange())); + string args_other = rewriter_.getRewrittenText(expansionRange(SourceRange(GET_BEGINLOC(Call->getArg(1)), + GET_ENDLOC(Call->getArg(2))))); +- txt = "bpf_perf_event_output(" + arg0 + ", bpf_pseudo_fd(1, " + fd + ")"; ++ txt = "bpf_perf_event_output(" + arg0 + ", (void *)bpf_pseudo_fd(1, " + fd + ")"; + txt += ", CUR_CPU_IDENTIFIER, " + args_other + ")"; + + // e.g. +@@ -986,7 +986,7 @@ bool BTypeVisitor::VisitCallExpr(CallExpr *Call) { + string meta_len = rewriter_.getRewrittenText(expansionRange(Call->getArg(3)->getSourceRange())); + txt = "bpf_perf_event_output(" + + skb + ", " + +- "bpf_pseudo_fd(1, " + fd + "), " + ++ "(void *)bpf_pseudo_fd(1, " + fd + "), " + + "((__u64)" + skb_len + " << 32) | BPF_F_CURRENT_CPU, " + + meta + ", " + + meta_len + ");"; +@@ -1006,12 +1006,12 @@ bool BTypeVisitor::VisitCallExpr(CallExpr *Call) { + string keyp = rewriter_.getRewrittenText(expansionRange(Call->getArg(1)->getSourceRange())); + string flag = rewriter_.getRewrittenText(expansionRange(Call->getArg(2)->getSourceRange())); + txt = "bpf_" + string(memb_name) + "(" + ctx + ", " + +- "bpf_pseudo_fd(1, " + fd + "), " + keyp + ", " + flag + ");"; ++ "(void *)bpf_pseudo_fd(1, " + fd + "), " + keyp + ", " + flag + ");"; + } else if (memb_name == "ringbuf_output") { + string name = string(Ref->getDecl()->getName()); + string args = rewriter_.getRewrittenText(expansionRange(SourceRange(GET_BEGINLOC(Call->getArg(0)), + GET_ENDLOC(Call->getArg(2))))); +- txt = "bpf_ringbuf_output(bpf_pseudo_fd(1, " + fd + ")"; ++ txt = "bpf_ringbuf_output((void *)bpf_pseudo_fd(1, " + fd + ")"; + txt += ", " + args + ")"; + + // e.g. +@@ -1033,7 +1033,7 @@ bool BTypeVisitor::VisitCallExpr(CallExpr *Call) { + } else if (memb_name == "ringbuf_reserve") { + string name = string(Ref->getDecl()->getName()); + string arg0 = rewriter_.getRewrittenText(expansionRange(Call->getArg(0)->getSourceRange())); +- txt = "bpf_ringbuf_reserve(bpf_pseudo_fd(1, " + fd + ")"; ++ txt = "bpf_ringbuf_reserve((void *)bpf_pseudo_fd(1, " + fd + ")"; + txt += ", " + arg0 + ", 0)"; // Flags in reserve are meaningless + } else if (memb_name == "ringbuf_discard") { + string name = string(Ref->getDecl()->getName()); +-- +2.38.1 + diff --git a/SOURCES/bcc-0.25.0-Fix-clang-15-int-to-pointer-conversion-errors.patch b/SOURCES/bcc-0.25.0-Fix-clang-15-int-to-pointer-conversion-errors.patch new file mode 100644 index 0000000..780975c --- /dev/null +++ b/SOURCES/bcc-0.25.0-Fix-clang-15-int-to-pointer-conversion-errors.patch @@ -0,0 +1,96 @@ +From 9ae3908ae38b3e8d8e36a52c0e5664c453d4c015 Mon Sep 17 00:00:00 2001 +From: Jerome Marchand +Date: Wed, 26 Oct 2022 14:41:54 +0200 +Subject: [PATCH 2/2] Fix clang 15 int to pointer conversion errors + +Since version 15, clang issues error for implicit conversion of +integer to pointer. Several tools are broken. This patch add explicit +pointer cast where needed. + +Fixes the following errors: +/virtual/main.c:37:18: error: incompatible integer to pointer conversion initializing 'struct request *' with an expression of type 'unsigned long' [-Wint-conversion] + struct request *req = ctx->di; + ^ ~~~~~~~ +/virtual/main.c:49:18: error: incompatible integer to pointer conversion initializing 'struct request *' with an expression of type 'unsigned long' [-Wint-conversion] + struct request *req = ctx->di; + ^ ~~~~~~~ +2 errors generated. + +/virtual/main.c:73:19: error: incompatible integer to pointer conversion initializing 'struct pt_regs *' with an expression of type 'unsigned long' [-Wint-conversion] + struct pt_regs * __ctx = ctx->di; + ^ ~~~~~~~ +/virtual/main.c:100:240: error: incompatible integer to pointer conversion passing 'u64' (aka 'unsigned long long') to parameter of type 'const void *' [-Wint-conversion] + data.ppid = ({ typeof(pid_t) _val; __builtin_memset(&_val, 0, sizeof(_val)); bpf_probe_read(&_val, sizeof(_val), (u64)&({ typeof(struct task_struct *) _val; __builtin_memset(&_val, 0, sizeof(_val)); bpf_probe_read(&_val, sizeof(_val), (u64)&task->real_parent); _val; })->tgid); _val; }); + ^~~~~~~~~~~~~~~~~~~~~~~ +/virtual/main.c:100:118: error: incompatible integer to pointer conversion passing 'u64' (aka 'unsigned long long') to parameter of type 'const void *' [-Wint-conversion] + data.ppid = ({ typeof(pid_t) _val; __builtin_memset(&_val, 0, sizeof(_val)); bpf_probe_read(&_val, sizeof(_val), (u64)&({ typeof(struct task_struct *) _val; __builtin_memset(&_val, 0, sizeof(_val)); bpf_probe_read(&_val, sizeof(_val), (u64)&task->real_parent); _val; })->tgid); _val; }); + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Signed-off-by: Jerome Marchand +--- + src/cc/frontends/clang/b_frontend_action.cc | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +diff --git a/src/cc/frontends/clang/b_frontend_action.cc b/src/cc/frontends/clang/b_frontend_action.cc +index dbeba3e4..c0582464 100644 +--- a/src/cc/frontends/clang/b_frontend_action.cc ++++ b/src/cc/frontends/clang/b_frontend_action.cc +@@ -517,9 +517,9 @@ bool ProbeVisitor::VisitUnaryOperator(UnaryOperator *E) { + string pre, post; + pre = "({ typeof(" + E->getType().getAsString() + ") _val; __builtin_memset(&_val, 0, sizeof(_val));"; + if (cannot_fall_back_safely) +- pre += " bpf_probe_read_kernel(&_val, sizeof(_val), (u64)"; ++ pre += " bpf_probe_read_kernel(&_val, sizeof(_val), (void *)"; + else +- pre += " bpf_probe_read(&_val, sizeof(_val), (u64)"; ++ pre += " bpf_probe_read(&_val, sizeof(_val), (void *)"; + post = "); _val; })"; + rewriter_.ReplaceText(expansionLoc(E->getOperatorLoc()), 1, pre); + rewriter_.InsertTextAfterToken(expansionLoc(GET_ENDLOC(sub)), post); +@@ -581,9 +581,9 @@ bool ProbeVisitor::VisitMemberExpr(MemberExpr *E) { + string pre, post; + pre = "({ typeof(" + E->getType().getAsString() + ") _val; __builtin_memset(&_val, 0, sizeof(_val));"; + if (cannot_fall_back_safely) +- pre += " bpf_probe_read_kernel(&_val, sizeof(_val), (u64)&"; ++ pre += " bpf_probe_read_kernel(&_val, sizeof(_val), (void *)&"; + else +- pre += " bpf_probe_read(&_val, sizeof(_val), (u64)&"; ++ pre += " bpf_probe_read(&_val, sizeof(_val), (void *)&"; + post = rhs + "); _val; })"; + rewriter_.InsertText(expansionLoc(GET_BEGINLOC(E)), pre); + rewriter_.ReplaceText(expansionRange(SourceRange(member, GET_ENDLOC(E))), post); +@@ -635,9 +635,9 @@ bool ProbeVisitor::VisitArraySubscriptExpr(ArraySubscriptExpr *E) { + + pre = "({ typeof(" + E->getType().getAsString() + ") _val; __builtin_memset(&_val, 0, sizeof(_val));"; + if (cannot_fall_back_safely) +- pre += " bpf_probe_read_kernel(&_val, sizeof(_val), (u64)(("; ++ pre += " bpf_probe_read_kernel(&_val, sizeof(_val), (void *)(("; + else +- pre += " bpf_probe_read(&_val, sizeof(_val), (u64)(("; ++ pre += " bpf_probe_read(&_val, sizeof(_val), (void *)(("; + if (isMemberDereference(base)) { + pre += "&"; + // If the base of the array subscript is a member dereference, we'll rewrite +@@ -747,8 +747,8 @@ void BTypeVisitor::genParamDirectAssign(FunctionDecl *D, string& preamble, + arg->addAttr(UnavailableAttr::CreateImplicit(C, "ptregs")); + size_t d = idx - 1; + const char *reg = calling_conv_regs[d]; +- preamble += " " + text + " = " + fn_args_[0]->getName().str() + "->" + +- string(reg) + ";"; ++ preamble += " " + text + " = (" + arg->getType().getAsString() + ")" + ++ fn_args_[0]->getName().str() + "->" + string(reg) + ";"; + } + } + } +@@ -762,7 +762,7 @@ void BTypeVisitor::genParamIndirectAssign(FunctionDecl *D, string& preamble, + + if (idx == 0) { + new_ctx = "__" + arg->getName().str(); +- preamble += " struct pt_regs * " + new_ctx + " = " + ++ preamble += " struct pt_regs * " + new_ctx + " = (void *)" + + arg->getName().str() + "->" + + string(calling_conv_regs[0]) + ";"; + } else { +-- +2.38.1 + diff --git a/SOURCES/bcc-0.25.0-Fix-some-documentation-issues-4197.patch b/SOURCES/bcc-0.25.0-Fix-some-documentation-issues-4197.patch new file mode 100644 index 0000000..9c879af --- /dev/null +++ b/SOURCES/bcc-0.25.0-Fix-some-documentation-issues-4197.patch @@ -0,0 +1,222 @@ +From 2f6565681e627d11dde0177503100669df020684 Mon Sep 17 00:00:00 2001 +From: Jerome Marchand +Date: Sun, 28 Aug 2022 07:44:01 +0200 +Subject: [PATCH] Fix some documentation issues (#4197) + +* compactsnoop-manpage: fix the name of the tool in the NAME section +In its manpage, compactsnoop tools is called compacstall in the NAME +section. I don't know where that name comes from, but it should be +compactsnoop. + +* dirtop-manpage: use '-d' option in the EXAMPLES section +The mandatory '-d' option of dirtop is missing in the EXAMPLES +section. Copy it from the usage message. Also remove '.py' suffixes. + +* funclatency-manpage: fix typo in one of the examples +There is a spurious colon in one of the manpage examples. Remove it. + +* tools/killsnoop: add '-s' option in the synopsis of the example file +Commit 33c8b1ac ("Update man page and example file") added '-s' option +to the manpage and an example in the example file, but missed the +sysnopsis in that later case. + +* trace-manpage: add missing options (-c,-n,-f and -B) to the synopsis +Copy the full sysopsis from the usage message. + +* tcptracer-manpage: add missing '-t' option in the manpage +Add '-t' option to the synopsis and description. + +* tcpsubnet-manpage: remove '--ebpf' option from the manpage +This option is explicitly suppressed in argparse and no manpage of +other tools mentions it. + +* manpages: remove '.py' suffix from the synopsis of some *snoop tools +Other manpages don't show the suffix, nor do the usage messages. +--- + man/man8/bindsnoop.8 | 2 +- + man/man8/compactsnoop.8 | 4 ++-- + man/man8/dirtop.8 | 8 ++++---- + man/man8/drsnoop.8 | 2 +- + man/man8/funclatency.8 | 2 +- + man/man8/opensnoop.8 | 2 +- + man/man8/tcpsubnet.8 | 5 +---- + man/man8/tcptracer.8 | 5 ++++- + man/man8/trace.8 | 6 ++++-- + tools/killsnoop_example.txt | 2 ++ + 10 files changed, 21 insertions(+), 17 deletions(-) + +diff --git a/man/man8/bindsnoop.8 b/man/man8/bindsnoop.8 +index f8fa1850..0eb42ccb 100644 +--- a/man/man8/bindsnoop.8 ++++ b/man/man8/bindsnoop.8 +@@ -2,7 +2,7 @@ + .SH NAME + bindsnoop \- Trace bind() system calls. + .SH SYNOPSIS +-.B bindsnoop.py [\fB-h\fP] [\fB-w\fP] [\fB-t\fP] [\fB-p\fP PID] [\fB-P\fP PORT] [\fB-E\fP] [\fB-U\fP] [\fB-u\fP UID] [\fB--count\fP] [\fB--cgroupmap MAP\fP] [\fB--mntnsmap MNTNSMAP\fP] ++.B bindsnoop [\fB-h\fP] [\fB-w\fP] [\fB-t\fP] [\fB-p\fP PID] [\fB-P\fP PORT] [\fB-E\fP] [\fB-U\fP] [\fB-u\fP UID] [\fB--count\fP] [\fB--cgroupmap MAP\fP] [\fB--mntnsmap MNTNSMAP\fP] + .SH DESCRIPTION + bindsnoop reports socket options set before the bind call that would impact this system call behavior. + .PP +diff --git a/man/man8/compactsnoop.8 b/man/man8/compactsnoop.8 +index a2933d7a..e9cde0ce 100644 +--- a/man/man8/compactsnoop.8 ++++ b/man/man8/compactsnoop.8 +@@ -1,8 +1,8 @@ + .TH compactsnoop 8 "2019-11-1" "USER COMMANDS" + .SH NAME +-compactstall \- Trace compact zone events. Uses Linux eBPF/bcc. ++compactsnoop \- Trace compact zone events. Uses Linux eBPF/bcc. + .SH SYNOPSIS +-.B compactsnoop.py [\-h] [\-T] [\-p PID] [\-d DURATION] [\-K] [\-e] ++.B compactsnoop [\-h] [\-T] [\-p PID] [\-d DURATION] [\-K] [\-e] + .SH DESCRIPTION + compactsnoop traces the compact zone events, showing which processes are + allocing pages with memory compaction. This can be useful for discovering +diff --git a/man/man8/dirtop.8 b/man/man8/dirtop.8 +index cc61a676..eaa0c0c4 100644 +--- a/man/man8/dirtop.8 ++++ b/man/man8/dirtop.8 +@@ -55,19 +55,19 @@ Number of interval summaries. + .TP + Summarize block device I/O by directory, 1 second screen refresh: + # +-.B dirtop.py ++.B dirtop -d '/hdfs/uuid/*/yarn' + .TP + Don't clear the screen, and top 8 rows only: + # +-.B dirtop.py -Cr 8 ++.B dirtop -d '/hdfs/uuid/*/yarn' -Cr 8 + .TP + 5 second summaries, 10 times only: + # +-.B dirtop.py 5 10 ++.B dirtop -d '/hdfs/uuid/*/yarn' 5 10 + .TP + Report read & write IOs generated in mutliple yarn and data directories: + # +-.B dirtop.py -d '/hdfs/uuid/*/yarn,/hdfs/uuid/*/data' ++.B dirtop -d '/hdfs/uuid/*/yarn,/hdfs/uuid/*/data' + .SH FIELDS + .TP + loadavg: +diff --git a/man/man8/drsnoop.8 b/man/man8/drsnoop.8 +index 90ca901f..8fb3789a 100644 +--- a/man/man8/drsnoop.8 ++++ b/man/man8/drsnoop.8 +@@ -2,7 +2,7 @@ + .SH NAME + drsnoop \- Trace direct reclaim events. Uses Linux eBPF/bcc. + .SH SYNOPSIS +-.B drsnoop.py [\-h] [\-T] [\-U] [\-p PID] [\-t TID] [\-u UID] [\-d DURATION] [-n name] [-v] ++.B drsnoop [\-h] [\-T] [\-U] [\-p PID] [\-t TID] [\-u UID] [\-d DURATION] [-n name] [-v] + .SH DESCRIPTION + drsnoop trace direct reclaim events, showing which processes are allocing pages + with direct reclaiming. This can be useful for discovering when allocstall (/p- +diff --git a/man/man8/funclatency.8 b/man/man8/funclatency.8 +index 9012b832..f96f6098 100644 +--- a/man/man8/funclatency.8 ++++ b/man/man8/funclatency.8 +@@ -89,7 +89,7 @@ Print the BPF program (for debugging purposes). + .TP + Time vfs_read() for process ID 181 only: + # +-.B funclatency \-p 181 vfs_read: ++.B funclatency \-p 181 vfs_read + .TP + Time both vfs_fstat() and vfs_fstatat() calls, by use of a wildcard: + # +diff --git a/man/man8/opensnoop.8 b/man/man8/opensnoop.8 +index fee83263..d1888772 100644 +--- a/man/man8/opensnoop.8 ++++ b/man/man8/opensnoop.8 +@@ -2,7 +2,7 @@ + .SH NAME + opensnoop \- Trace open() syscalls. Uses Linux eBPF/bcc. + .SH SYNOPSIS +-.B opensnoop.py [\-h] [\-T] [\-U] [\-x] [\-p PID] [\-t TID] [\-u UID] ++.B opensnoop [\-h] [\-T] [\-U] [\-x] [\-p PID] [\-t TID] [\-u UID] + [\-d DURATION] [\-n NAME] [\-e] [\-f FLAG_FILTER] + [--cgroupmap MAPPATH] [--mntnsmap MAPPATH] + .SH DESCRIPTION +diff --git a/man/man8/tcpsubnet.8 b/man/man8/tcpsubnet.8 +index 525b8082..ad5f1be1 100644 +--- a/man/man8/tcpsubnet.8 ++++ b/man/man8/tcpsubnet.8 +@@ -2,7 +2,7 @@ + .SH NAME + tcpsubnet \- Summarize and aggregate IPv4 TCP traffic by subnet. + .SH SYNOPSIS +-.B tcpsubnet [\-h] [\-v] [\--ebpf] [\-J] [\-f FORMAT] [\-i INTERVAL] [subnets] ++.B tcpsubnet [\-h] [\-v] [\-J] [\-f FORMAT] [\-i INTERVAL] [subnets] + .SH DESCRIPTION + This tool summarizes and aggregates IPv4 TCP sent to the subnets + passed in argument and prints to stdout on a fixed interval. +@@ -35,9 +35,6 @@ Interval between updates, seconds (default 1). + Format output units. Supported values are bkmBKM. When using + kmKM the output will be rounded to floor. + .TP +-\--ebpf +-Prints the BPF program. +-.TP + subnets + Comma separated list of subnets. Traffic will be categorized + in theses subnets. Order matters. +diff --git a/man/man8/tcptracer.8 b/man/man8/tcptracer.8 +index 59240f4b..19a6164d 100644 +--- a/man/man8/tcptracer.8 ++++ b/man/man8/tcptracer.8 +@@ -2,7 +2,7 @@ + .SH NAME + tcptracer \- Trace TCP established connections. Uses Linux eBPF/bcc. + .SH SYNOPSIS +-.B tcptracer [\-h] [\-v] [\-p PID] [\-N NETNS] [\-\-cgroupmap MAPPATH] [--mntnsmap MAPPATH] [\-4 | \-6] ++.B tcptracer [\-h] [\-v] [-t] [\-p PID] [\-N NETNS] [\-\-cgroupmap MAPPATH] [--mntnsmap MAPPATH] [\-4 | \-6] + .SH DESCRIPTION + This tool traces established TCP connections that open and close while tracing, + and prints a line of output per connect, accept and close events. This includes +@@ -23,6 +23,9 @@ Print usage message. + \-v + Print full lines, with long event type names and network namespace numbers. + .TP ++\-t ++Include timestamp on output ++.TP + \-p PID + Trace this process ID only (filtered in-kernel). + .TP +diff --git a/man/man8/trace.8 b/man/man8/trace.8 +index c4417e5f..64a5e799 100644 +--- a/man/man8/trace.8 ++++ b/man/man8/trace.8 +@@ -2,9 +2,11 @@ + .SH NAME + trace \- Trace a function and print its arguments or return value, optionally evaluating a filter. Uses Linux eBPF/bcc. + .SH SYNOPSIS +-.B trace [-h] [-b BUFFER_PAGES] [-p PID] [-L TID] [--uid UID] [-v] [-Z STRING_SIZE] [-S] [-s SYM_FILE_LIST] +- [-M MAX_EVENTS] [-t] [-u] [-T] [-C] [-K] [-U] [-a] [-I header] [-A] ++.B trace [-h] [-b BUFFER_PAGES] [-p PID] [-L TID] [--uid UID] [-v] [-Z STRING_SIZE] [-S] [-M MAX_EVENTS] [-t] ++ [-u] [-T] [-C] [-c CGROUP_PATH] [-n NAME] [-f MSG_FILTER] [-B] [-s SYM_FILE_LIST] [-K] [-U] [-a] ++ [-I header] [-A] + probe [probe ...] ++ + .SH DESCRIPTION + trace probes functions you specify and displays trace messages if a particular + condition is met. You can control the message format to display function +diff --git a/tools/killsnoop_example.txt b/tools/killsnoop_example.txt +index 7746f2a0..038d09c6 100644 +--- a/tools/killsnoop_example.txt ++++ b/tools/killsnoop_example.txt +@@ -27,6 +27,8 @@ Trace signals issued by the kill() syscall + -h, --help show this help message and exit + -x, --failed only show failed kill syscalls + -p PID, --pid PID trace this PID only ++ -s SIGNAL, --signal SIGNAL ++ trace this signal only + + examples: + ./killsnoop # trace all kill() signals +-- +2.38.1 + diff --git a/SOURCES/bcc-0.25.0-bcc-support-building-with-external-libbpf-package-an.patch b/SOURCES/bcc-0.25.0-bcc-support-building-with-external-libbpf-package-an.patch new file mode 100644 index 0000000..bb18031 --- /dev/null +++ b/SOURCES/bcc-0.25.0-bcc-support-building-with-external-libbpf-package-an.patch @@ -0,0 +1,100 @@ +From 2e14fbaf9105e0b504f243ffc6d7d5a16e13a2a7 Mon Sep 17 00:00:00 2001 +From: Alan Maguire +Date: Fri, 14 Oct 2022 13:01:58 +0000 +Subject: [PATCH] bcc: support building with external libbpf package and older + uapi linux/bpf.h + +When building bcc with a relatively new packaged libbpf (0.8.1) +and -DCMAKE_USE_LIBBPF_PACKAGE:BOOL=TRUE, multiple compilation +failures are encountered due the fact the system uapi header +in /usr/include/linux/bpf.h is not very recent (this is often +the case for distros, which sync it via a kernel headers +package quite conservatively due to use by glibc). + +With libbpf built via git submodule, the uapi header included in +the libbpf package is used, so here a similar approach is proposed +for the external package build. Instead of having to sync +another file the already present compat/linux/virtual_bpf.h +is used; we copy it to compat/linux/bpf.h (eliminating the +string prefix/suffix on first/last lines). + +From there, we ensure that places that assume the presence of +the libbpf git submodule point at compat/ as a location to +find the uapi header. + +Signed-off-by: Alan Maguire +--- + examples/cpp/CMakeLists.txt | 4 ++++ + introspection/CMakeLists.txt | 4 ++++ + src/cc/CMakeLists.txt | 6 ++++++ + tests/cc/CMakeLists.txt | 4 ++++ + 4 files changed, 18 insertions(+) + +diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt +index 801e6bad..8d09ae11 100644 +--- a/examples/cpp/CMakeLists.txt ++++ b/examples/cpp/CMakeLists.txt +@@ -4,7 +4,11 @@ + include_directories(${PROJECT_BINARY_DIR}/src/cc) + include_directories(${PROJECT_SOURCE_DIR}/src/cc) + include_directories(${PROJECT_SOURCE_DIR}/src/cc/api) ++if (CMAKE_USE_LIBBPF_PACKAGE AND LIBBPF_FOUND) ++include_directories(${PROJECT_SOURCE_DIR}/src/cc/compat) ++else() + include_directories(${PROJECT_SOURCE_DIR}/src/cc/libbpf/include/uapi) ++endif() + + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") +diff --git a/introspection/CMakeLists.txt b/introspection/CMakeLists.txt +index dcbe69a3..ce2d03dc 100644 +--- a/introspection/CMakeLists.txt ++++ b/introspection/CMakeLists.txt +@@ -3,7 +3,11 @@ + + include_directories(${PROJECT_SOURCE_DIR}/src/cc) + include_directories(${PROJECT_SOURCE_DIR}/src/cc/api) ++if (CMAKE_USE_LIBBPF_PACKAGE AND LIBBPF_FOUND) ++include_directories(${PROJECT_SOURCE_DIR}/src/cc/compat) ++else() + include_directories(${PROJECT_SOURCE_DIR}/src/cc/libbpf/include/uapi) ++endif() + + option(INSTALL_INTROSPECTION "Install BPF introspection tools" ON) + option(BPS_LINK_RT "Pass -lrt to linker when linking bps tool" ON) +diff --git a/src/cc/CMakeLists.txt b/src/cc/CMakeLists.txt +index ffe8feec..c7f53530 100644 +--- a/src/cc/CMakeLists.txt ++++ b/src/cc/CMakeLists.txt +@@ -15,6 +15,12 @@ endif (LIBDEBUGINFOD_FOUND) + # todo: if check for kernel version + if (CMAKE_USE_LIBBPF_PACKAGE AND LIBBPF_FOUND) + include_directories(${LIBBPF_INCLUDE_DIRS}) ++ # create up-to-date linux/bpf.h from virtual_bpf.h (remove string wrapper); ++ # when libbpf is built as a submodule we use its version of linux/bpf.h ++ # so this does similar for the libbpf package, removing reliance on the ++ # system uapi header which can be out of date. ++ execute_process(COMMAND sh -c "cd ${CMAKE_CURRENT_SOURCE_DIR}/compat/linux && grep -ve '\\*\\*\\*\\*' virtual_bpf.h > bpf.h") ++ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat) + else() + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/libbpf/include) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/libbpf/include/uapi) +diff --git a/tests/cc/CMakeLists.txt b/tests/cc/CMakeLists.txt +index 677867d7..47056455 100644 +--- a/tests/cc/CMakeLists.txt ++++ b/tests/cc/CMakeLists.txt +@@ -3,7 +3,11 @@ + + include_directories(${PROJECT_SOURCE_DIR}/src/cc) + include_directories(${PROJECT_SOURCE_DIR}/src/cc/api) ++if (CMAKE_USE_LIBBPF_PACKAGE AND LIBBPF_FOUND) ++include_directories(${PROJECT_SOURCE_DIR}/src/cc/compat) ++else() + include_directories(${PROJECT_SOURCE_DIR}/src/cc/libbpf/include/uapi) ++endif() + include_directories(${PROJECT_SOURCE_DIR}/tests/python/include) + + add_executable(test_static test_static.c) +-- +2.37.3 + diff --git a/SOURCES/bcc-0.25.0-tools-nfsslower-fix-an-uninitialized-struct-error.patch b/SOURCES/bcc-0.25.0-tools-nfsslower-fix-an-uninitialized-struct-error.patch new file mode 100644 index 0000000..dcd2937 --- /dev/null +++ b/SOURCES/bcc-0.25.0-tools-nfsslower-fix-an-uninitialized-struct-error.patch @@ -0,0 +1,64 @@ +From acc8800b6f4380b6f4c7f04ee9a1263cf11deb35 Mon Sep 17 00:00:00 2001 +From: Jerome Marchand +Date: Tue, 20 Dec 2022 11:33:51 +0100 +Subject: [PATCH] tools: nfsslower: fix an uninitialized struct error + +Fixes the following error: +bpf: Failed to load program: Permission denied +reg type unsupported for arg#0 function trace_read_return#22 +0: R1=ctx(off=0,imm=0) R10=fp0 +; int trace_read_return(struct pt_regs *ctx) +0: (bf) r6 = r1 ; R1=ctx(off=0,imm=0) R6_w=ctx(off=0,imm=0) + +[...] + +; bpf_probe_read_kernel(&data.file, sizeof(data.file), (void *)qs.name); +75: (b7) r2 = 32 ; R2_w=32 +76: (85) call bpf_probe_read_kernel#113 ; R0_w=scalar() fp-16=????mmmm fp-24=mmmmmmmm fp-32=mmmmmmmm fp-40=mmmmmmmm fp-48=mmmmmmmm +; bpf_perf_event_output(ctx, (void *)bpf_pseudo_fd(1, -2), CUR_CPU_IDENTIFIER, &data, sizeof(data)); +77: (18) r2 = 0xffff9a0a42177200 ; R2_w=map_ptr(off=0,ks=4,vs=4,imm=0) +79: (bf) r4 = r10 ; R4_w=fp0 R10=fp0 +; bpf_probe_read_kernel(&data.file, sizeof(data.file), (void *)qs.name); +80: (07) r4 += -104 ; R4_w=fp-104 +; bpf_perf_event_output(ctx, (void *)bpf_pseudo_fd(1, -2), CUR_CPU_IDENTIFIER, &data, sizeof(data)); +81: (bf) r1 = r6 ; R1_w=ctx(off=0,imm=0) R6=ctx(off=0,imm=0) +82: (18) r3 = 0xffffffff ; R3_w=4294967295 +84: (b7) r5 = 96 ; R5_w=96 +85: (85) call bpf_perf_event_output#25 +invalid indirect read from stack R4 off -104+92 size 96 +processed 82 insns (limit 1000000) max_states_per_insn 0 total_states 4 peak_states 4 mark_read 3 + +Traceback (most recent call last): + File "/usr/share/bcc/tools/nfsslower", line 283, in + b.attach_kretprobe(event="nfs_file_read", fn_name="trace_read_return") + File "/usr/lib/python3.9/site-packages/bcc/__init__.py", line 872, in attach_kretprobe + fn = self.load_func(fn_name, BPF.KPROBE) + File "/usr/lib/python3.9/site-packages/bcc/__init__.py", line 523, in load_func + raise Exception("Failed to load BPF program %s: %s" % +Exception: Failed to load BPF program b'trace_read_return': Permission denied +--- + tools/nfsslower.py | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/tools/nfsslower.py b/tools/nfsslower.py +index b5df8f19..682a3fb7 100755 +--- a/tools/nfsslower.py ++++ b/tools/nfsslower.py +@@ -179,8 +179,12 @@ static int trace_exit(struct pt_regs *ctx, int type) + + // populate output struct + u32 size = PT_REGS_RC(ctx); +- struct data_t data = {.type = type, .size = size, .delta_us = delta_us, +- .pid = pid}; ++ struct data_t data; ++ __builtin_memset(&data, 0, sizeof(data)); ++ data.type = type; ++ data.size = size; ++ data.delta_us = delta_us; ++ data.pid = pid; + data.ts_us = ts / 1000; + data.offset = valp->offset; + bpf_get_current_comm(&data.task, sizeof(data.task)); +-- +2.38.1 + diff --git a/SPECS/bcc.spec b/SPECS/bcc.spec new file mode 100644 index 0000000..94adad3 --- /dev/null +++ b/SPECS/bcc.spec @@ -0,0 +1,504 @@ +# We don't want to bring luajit in RHEL +%if 0%{?rhel} > 0 +%bcond_with lua +%else +# luajit is not available for some architectures +%ifarch ppc64 ppc64le s390x +%bcond_with lua +%else +%bcond_without lua +%endif +%endif + +%ifarch x86_64 ppc64 ppc64le aarch64 +%bcond_without libbpf_tools +%else +%bcond_with libbpf_tools +%endif + +%bcond_with llvm_static + +%if %{without llvm_static} +%global with_llvm_shared 1 +%endif + + +Name: bcc +Version: 0.25.0 +Release: 2%{?dist} +Summary: BPF Compiler Collection (BCC) +License: ASL 2.0 +URL: https://github.com/iovisor/bcc +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz +Patch0: %%{name}-%%{version}-bcc-support-building-with-external-libbpf-package-an.patch +Patch2: %%{name}-%%{version}-Fix-bpf_pseudo_fd-type-conversion-error.patch +Patch3: %%{name}-%%{version}-Fix-clang-15-int-to-pointer-conversion-errors.patch +Patch4: %%{name}-%%{version}-Fix-some-documentation-issues-4197.patch +Patch5: %%{name}-%%{version}-tools-nfsslower-fix-an-uninitialized-struct-error.patch + +# Arches will be included as upstream support is added and dependencies are +# satisfied in the respective arches +ExclusiveArch: x86_64 %{power64} aarch64 s390x armv7hl + +BuildRequires: bison +BuildRequires: cmake >= 2.8.7 +BuildRequires: flex +BuildRequires: libxml2-devel +BuildRequires: python3-devel +BuildRequires: elfutils-libelf-devel +BuildRequires: elfutils-debuginfod-client-devel +BuildRequires: llvm-devel +BuildRequires: clang-devel +%if %{with llvm_static} +BuildRequires: llvm-static +%endif +BuildRequires: ncurses-devel +%if %{with lua} +BuildRequires: pkgconfig(luajit) +%endif +BuildRequires: libbpf-devel >= 2:0.8.0, libbpf-static >= 2:0.8.0 + +Requires: libbpf >= 2:0.8.0 +Requires: tar +Recommends: kernel-devel + +Recommends: %{name}-tools = %{version}-%{release} + +%description +BCC is a toolkit for creating efficient kernel tracing and manipulation +programs, and includes several useful tools and examples. It makes use of +extended BPF (Berkeley Packet Filters), formally known as eBPF, a new feature +that was first added to Linux 3.15. BCC makes BPF programs easier to write, +with kernel instrumentation in C (and includes a C wrapper around LLVM), and +front-ends in Python and lua. It is suited for many tasks, including +performance analysis and network traffic control. + + +%package devel +Summary: Shared library for BPF Compiler Collection (BCC) +Requires: %{name}%{?_isa} = %{version}-%{release} +Suggests: elfutils-debuginfod-client + +%description devel +The %{name}-devel package contains libraries and header files for developing +application that use BPF Compiler Collection (BCC). + + +%package doc +Summary: Examples for BPF Compiler Collection (BCC) +Recommends: python3-%{name} = %{version}-%{release} +Recommends: %{name}-lua = %{version}-%{release} +BuildArch: noarch + +%description doc +Examples for BPF Compiler Collection (BCC) + + +%package -n python3-%{name} +Summary: Python3 bindings for BPF Compiler Collection (BCC) +Requires: %{name} = %{version}-%{release} +BuildArch: noarch + +%description -n python3-%{name} +Python3 bindings for BPF Compiler Collection (BCC) + + +%if %{with lua} +%package lua +Summary: Standalone tool to run BCC tracers written in Lua +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description lua +Standalone tool to run BCC tracers written in Lua +%endif + + +%package tools +Summary: Command line tools for BPF Compiler Collection (BCC) +Requires: bcc = %{version}-%{release} +Requires: python3-%{name} = %{version}-%{release} +Requires: python3-netaddr + +%description tools +Command line tools for BPF Compiler Collection (BCC) + +%if %{with libbpf_tools} +%package -n libbpf-tools +Summary: Command line libbpf tools for BPF Compiler Collection (BCC) +BuildRequires: bpftool + +%description -n libbpf-tools +Command line libbpf tools for BPF Compiler Collection (BCC) +%endif + +%prep +%autosetup -p1 + + +%build +%cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DREVISION_LAST=%{version} -DREVISION=%{version} -DPYTHON_CMD=python3 \ + -DCMAKE_USE_LIBBPF_PACKAGE:BOOL=TRUE \ + %{?with_llvm_shared:-DENABLE_LLVM_SHARED=1} +%cmake_build + +# It was discussed and agreed to package libbpf-tools with +# 'bpf-' prefix (https://github.com/iovisor/bcc/pull/3263) +# Installing libbpf-tools binaries in temp directory and +# renaming them in there and the install code will just +# take them. +%if %{with libbpf_tools} +pushd libbpf-tools; +make BPFTOOL=bpftool LIBBPF_OBJ=%{_libdir}/libbpf.a CFLAGS="%{optflags}" LDFLAGS="%{build_ldflags}" +make DESTDIR=./tmp-install prefix= install +( + cd tmp-install/bin + for file in *; do + mv $file bpf-$file + done + # now fix the broken symlinks + for file in `find . -type l`; do + dest=$(readlink "$file") + ln -s -f bpf-$dest $file + done +) +popd +%endif + +%install +%cmake_install + +# Fix python shebangs +find %{buildroot}%{_datadir}/%{name}/{tools,examples} -type f -exec \ + sed -i -e '1s=^#!/usr/bin/python\([0-9.]\+\)\?$=#!%{__python3}=' \ + -e '1s=^#!/usr/bin/env python\([0-9.]\+\)\?$=#!%{__python3}=' \ + -e '1s=^#!/usr/bin/env bcc-lua$=#!/usr/bin/bcc-lua=' {} \; + +# Move man pages to the right location +mkdir -p %{buildroot}%{_mandir} +mv %{buildroot}%{_datadir}/%{name}/man/* %{buildroot}%{_mandir}/ +# Avoid conflict with other manpages +# https://bugzilla.redhat.com/show_bug.cgi?id=1517408 +for i in `find %{buildroot}%{_mandir} -name "*.gz"`; do + tname=$(basename $i) + rename $tname %{name}-$tname $i +done +mkdir -p %{buildroot}%{_docdir}/%{name} +mv %{buildroot}%{_datadir}/%{name}/examples %{buildroot}%{_docdir}/%{name}/ + +# Delete old tools we don't want to ship +rm -rf %{buildroot}%{_datadir}/%{name}/tools/old/ + +# We cannot run the test suit since it requires root and it makes changes to +# the machine (e.g, IP address) +#%check + +%if %{with libbpf_tools} +mkdir -p %{buildroot}/%{_sbindir} +# We cannot use `install` because some of the tools are symlinks and `install` +# follows those. Since all the tools already have the correct permissions set, +# we just need to copy them to the right place while preserving those +cp -a libbpf-tools/tmp-install/bin/* %{buildroot}/%{_sbindir}/ +%endif + +%ldconfig_scriptlets + +%files +%doc README.md +%license LICENSE.txt +%{_libdir}/lib%{name}.so.* +%{_libdir}/libbcc_bpf.so.* + +%files devel +%exclude %{_libdir}/lib%{name}*.a +%exclude %{_libdir}/lib%{name}*.la +%{_libdir}/lib%{name}.so +%{_libdir}/libbcc_bpf.so +%{_libdir}/pkgconfig/lib%{name}.pc +%{_includedir}/%{name}/ + +%files -n python3-%{name} +%{python3_sitelib}/%{name}* + +%files doc +%dir %{_docdir}/%{name} +%doc %{_docdir}/%{name}/examples/ + +%files tools +%dir %{_datadir}/%{name} +%{_datadir}/%{name}/tools/ +%{_datadir}/%{name}/introspection/ +%if 0%{?rhel} > 0 +# inject relies on BPF_KPROBE_OVERRIDE which is not set on RHEL +%exclude %{_datadir}/%{name}/tools/inject +%exclude %{_datadir}/%{name}/tools/doc/inject_example.txt +%exclude %{_mandir}/man8/bcc-inject.8.gz +# Neither btrfs nor zfs are available on RHEL +%exclude %{_datadir}/%{name}/tools/btrfs* +%exclude %{_datadir}/%{name}/tools/doc/btrfs* +%exclude %{_mandir}/man8/bcc-btrfs* +%exclude %{_datadir}/%{name}/tools/zfs* +%exclude %{_datadir}/%{name}/tools/doc/zfs* +%exclude %{_mandir}/man8/bcc-zfs* +# criticalstat relies on CONFIG_PREEMPTIRQ_EVENTS which is disabled on RHEL +%exclude %{_datadir}/%{name}/tools/criticalstat +%exclude %{_datadir}/%{name}/tools/doc/criticalstat_example.txt +%exclude %{_mandir}/man8/bcc-criticalstat.8.gz +%endif +%{_mandir}/man8/* + +%if %{with lua} +%files lua +%{_bindir}/bcc-lua +%endif + +%if %{with libbpf_tools} +%files -n libbpf-tools +%{_sbindir}/bpf-* +%endif + +%changelog +* Thu Apr 13 2023 MSVSphere Packaging Team - 0.25.0-2 +- Rebuilt for MSVSphere 9.2 beta + +* Thu Jan 05 2023 Jerome Marchand - 0.25.0-2 +- Rebuild for libbpf 1.0 + +* Tue Dec 20 2022 Jerome Marchand - 0.25.0-1 +- Rebase to v0.25.0 +- Misc documentation and man pages fixes + +* Tue Aug 23 2022 Jerome Marchand - 0.24.1-4 +- Fix mdflush tool (rhbz#2108001) + +* Fri Jul 01 2022 Jerome Marchand - 0.24.1-3 +- Rebuild for libbpf 0.6.0 + +* Wed May 18 2022 Jerome Marchand - 0.24.1-2 +- Rebuild (previous build failed with UNKNOWN_KOJI_ERROR) + +* Thu Mar 24 2022 Jerome Marchand - 0.24.0-1 +- Rebase to v0.24.0 +- Fix cmake build + +* Fri Feb 25 2022 Jerome Marchand - 0.20.0-10 +- Remove deprecated python_provides macro (needed for gating) + +* Thu Feb 24 2022 Jerome Marchand - 0.20.0-9 +- Fix bio tools (rhbz#2039595) + +* Mon Nov 22 2021 Jerome Marchand - 0.20.0-8 +- Rebuild for LLVM 13 + +* Thu Oct 14 2021 Jerome Marchand - 0.20.0-7 +- Sync with latest libbpf (fixes BPF_F_BROADCAST breakages of rhbz#1992430) +- Fix cpudist, mdflush, readahead and threadsnoop (rhbz#1992430) +- Handle the renaming of task_struct_>state field +- Drop tools that relies on features disabled on RHEL + +* Mon Aug 09 2021 Mohan Boddu - 0.20.0-6 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Tue Aug 03 2021 Jerome Marchand - 0.20.0-5 +- Add gating + +* Mon Jul 26 2021 Jerome Marchand - 0.20.0-4 +- Don't require bcc-tools by default (#1967550) +- Add explicit bcc requirement to bcc-tools +- Build bcc from standard sources + +* Wed Jun 02 2021 Jerome Marchand - 0.20.0-3 +- Don't ignore LDFLAGS for libbpf-tools + +* Wed Jun 02 2021 Jerome Marchand - 0.20.0-2 +- Don't override cflags for libbpf-tools + +* Thu May 27 2021 Jerome Marchand - 0.20.0-1 +- Rebase to bcc 0.20.0 + +* Thu May 13 2021 Tom Stellard - 0.18.0-6 +- Rebuild for LLVM 12 + +* Thu Apr 15 2021 Mohan Boddu - 0.18.0-5 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Thu Feb 18 2021 Jerome Marchand - 0.18.0-4 +- Disable lua for RHEL + +* Tue Jan 26 2021 Fedora Release Engineering - 0.18.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Fri Jan 22 2021 Tom Stellard - 0.18.0-2 +- Rebuild for clang-11.1.0 + +* Tue Jan 5 15:08:26 CET 2021 Rafael dos Santos - 0.18.0-1 +- Rebase to latest upstream (#1912875) + +* Fri Oct 30 11:25:46 CET 2020 Rafael dos Santos - 0.17.0-1 +- Rebase to latest upstream (#1871417) + +* Mon Oct 12 2020 Jerome Marchand - 0.16.0.3 +- Rebuild for LLVM 11.0.0-rc6 + +* Fri Aug 28 2020 Rafael dos Santos - 0.16.0-2 +- Enable build for armv7hl + +* Sun Aug 23 2020 Rafael dos Santos - 0.16.0-1 +- Rebase to latest upstream (#1871417) + +* Tue Aug 04 2020 Rafael dos Santos - 0.15.0-6 +- Fix build with cmake (#1863243) + +* Sat Aug 01 2020 Fedora Release Engineering - 0.15.0-5 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 0.15.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Thu Jul 09 2020 Tom Stellard - 0.15.0-3 +- Drop llvm-static dependency +- https://docs.fedoraproject.org/en-US/packaging-guidelines/#_statically_linking_executables + +* Thu Jul 02 2020 Rafael dos Santos - 0.15.0-2 +- Reinstate a function needed by bpftrace + +* Tue Jun 23 2020 Rafael dos Santos - 0.15.0-1 +- Rebase to latest upstream version (#1849239) + +* Tue May 26 2020 Miro Hrončok - 0.14.0-2 +- Rebuilt for Python 3.9 + +* Tue Apr 21 2020 Rafael dos Santos - 0.14.0-1 +- Rebase to latest upstream version (#1826281) + +* Wed Feb 26 2020 Rafael dos Santos - 0.13.0-1 +- Rebase to latest upstream version (#1805072) + +* Tue Jan 28 2020 Fedora Release Engineering - 0.12.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Mon Jan 06 2020 Tom Stellard - 0.12.0-2 +- Link against libclang-cpp.so +- https://fedoraproject.org/wiki/Changes/Stop-Shipping-Individual-Component-Libraries-In-clang-lib-Package + +* Tue Dec 17 2019 Rafael dos Santos - 0.12.0-1 +- Rebase to latest upstream version (#1758417) + +* Thu Dec 05 2019 Jiri Olsa - 0.11.0-2 +- Add libbpf support + +* Fri Oct 04 2019 Rafael dos Santos - 0.11.0-1 +- Rebase to latest upstream version (#1758417) + +* Thu Oct 03 2019 Miro Hrončok - 0.10.0-4 +- Rebuilt for Python 3.8.0rc1 (#1748018) + +* Mon Aug 19 2019 Miro Hrončok - 0.10.0-3 +- Rebuilt for Python 3.8 + +* Wed Jul 24 2019 Fedora Release Engineering - 0.10.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Wed May 29 2019 Rafael dos Santos - 0.10.0-1 +- Rebase to latest upstream version (#1714902) + +* Thu Apr 25 2019 Rafael dos Santos - 0.9.0-1 +- Rebase to latest upstream version (#1686626) +- Rename libbpf header to libbcc_bpf + +* Mon Apr 22 2019 Neal Gompa - 0.8.0-5 +- Make the Python 3 bindings package noarch +- Small cleanups to the spec + +* Tue Mar 19 2019 Rafael dos Santos - 0.8.0-4 +- Add s390x support (#1679310) + +* Wed Feb 20 2019 Rafael dos Santos - 0.8.0-3 +- Add aarch64 support (#1679310) + +* Thu Jan 31 2019 Fedora Release Engineering - 0.8.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Thu Jan 17 2019 Rafael dos Santos - 0.8.0-1 +- Rebase to new released version + +* Thu Nov 01 2018 Rafael dos Santos - 0.7.0-4 +- Fix attaching to usdt probes (#1634684) + +* Mon Oct 22 2018 Rafael dos Santos - 0.7.0-3 +- Fix encoding of non-utf8 characters (#1516678) +- Fix str-bytes conversion in killsnoop (#1637515) + +* Sat Oct 06 2018 Rafael dos Santos - 0.7.0-2 +- Fix str/bytes conversion in uflow (#1636293) + +* Tue Sep 25 2018 Rafael Fonseca - 0.7.0-1 +- Rebase to new released version + +* Wed Aug 22 2018 Rafael Fonseca - 0.6.1-2 +- Fix typo when mangling shebangs. + +* Thu Aug 16 2018 Rafael Fonseca - 0.6.1-1 +- Rebase to new released version (#1609485) + +* Thu Jul 12 2018 Fedora Release Engineering - 0.6.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jun 19 2018 Miro Hrončok - 0.6.0-2 +- Rebuilt for Python 3.7 + +* Mon Jun 18 2018 Rafael dos Santos - 0.6.0-1 +- Rebase to new released version (#1591989) + +* Thu Apr 05 2018 Rafael Santos - 0.5.0-4 +- Resolves #1555627 - fix compilation error with latest llvm/clang + +* Wed Feb 07 2018 Fedora Release Engineering - 0.5.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Fri Feb 02 2018 Igor Gnatenko - 0.5.0-2 +- Switch to %%ldconfig_scriptlets + +* Wed Jan 03 2018 Rafael Santos - 0.5.0-1 +- Rebase to new released version + +* Thu Nov 16 2017 Rafael Santos - 0.4.0-4 +- Resolves #1517408 - avoid conflict with other manpages + +* Thu Nov 02 2017 Rafael Santos - 0.4.0-3 +- Use weak deps to not require lua subpkg on ppc64(le) + +* Wed Nov 01 2017 Igor Gnatenko - 0.4.0-2 +- Rebuild for LLVM5 + +* Wed Nov 01 2017 Rafael Fonseca - 0.4.0-1 +- Resolves #1460482 - rebase to new release +- Resolves #1505506 - add support for LLVM 5.0 +- Resolves #1460482 - BPF module compilation issue +- Partially address #1479990 - location of man pages +- Enable ppc64(le) support without lua +- Soname versioning for libbpf by ignatenkobrain + +* Wed Aug 02 2017 Fedora Release Engineering - 0.3.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 0.3.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Thu Mar 30 2017 Igor Gnatenko - 0.3.0-2 +- Rebuild for LLVM4 +- Trivial fixes in spec + +* Fri Mar 10 2017 Rafael Fonseca - 0.3.0-1 +- Rebase to new release. + +* Fri Feb 10 2017 Fedora Release Engineering - 0.2.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Tue Jan 10 2017 Rafael Fonseca - 0.2.0-2 +- Fix typo + +* Tue Nov 29 2016 Rafael Fonseca - 0.2.0-1 +- Initial import