import bcc-0.11.0-2.el8

This commit is contained in:
CentOS Sources 2020-01-21 17:48:13 -05:00 committed by Stepan Oksanichenko
parent 7c9a4e1014
commit 17140f6f7f
8 changed files with 1325 additions and 350 deletions

View File

@ -1 +1 @@
168b517240fd27aaa48f480d2470907fe1875dac SOURCES/bcc-0.8.0.tar.gz
e200806e56095091ff22a73c4c8ec294176527e2 SOURCES/bcc-0.11.0.tar.gz

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/bcc-0.8.0.tar.gz
SOURCES/bcc-0.11.0.tar.gz

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,25 @@
From 930846dc2c49281c693c2e39a0a2d21c650c61de Mon Sep 17 00:00:00 2001
From: Jerome Marchand <jmarchan@redhat.com>
Date: Fri, 9 Aug 2019 13:15:13 +0200
Subject: [PATCH] man: add missing -c option to tcpretrans synopsis
---
man/man8/tcpretrans.8 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/man/man8/tcpretrans.8 b/man/man8/tcpretrans.8
index e4f6fbf6..0ac82afa 100644
--- a/man/man8/tcpretrans.8
+++ b/man/man8/tcpretrans.8
@@ -2,7 +2,7 @@
.SH NAME
tcpretrans \- Trace or count TCP retransmits and TLPs. Uses Linux eBPF/bcc.
.SH SYNOPSIS
-.B tcpretrans [\-h] [\-l]
+.B tcpretrans [\-h] [\-l] [\-c]
.SH DESCRIPTION
This traces TCP retransmits, showing address, port, and TCP state information,
and sometimes the PID (although usually not, since retransmits are usually
--
2.23.0

View File

@ -1,50 +0,0 @@
From 3f7b59660037c0d5dea785d115df25d9b95f07dc Mon Sep 17 00:00:00 2001
From: Xiaozhou Liu <liuxiaozhou@bytedance.com>
Date: Mon, 21 Jan 2019 11:23:42 +0800
Subject: [PATCH] print_log2_hist(): check and skip possible paddings (#2155)
Address issue 2154.
When a struct S is used as key to a BPF_HISTOGRAM, it is assumed that the second
member of S holds the slot. But when S is converted to python from bpf C,
a padding may be inserted as a second member. This breaks print_log2_hist().
root@debian:~/bcc/tools# ./softirqs.py -d
Tracing soft irq event time... Hit Ctrl-C to end.
^C
Traceback (most recent call last):
File "./softirqs.py", line 144, in <module>
dist.print_log2_hist(label, "softirq", section_print_fn=vec_to_name)
File "/usr/local/lib/python2.7/dist-packages/bcc/table.py", line 326, in print_log2_hist
vals[slot] = v.value
TypeError: list indices must be integers, not str
Fix it by skipping the possible padding. Future work would be fixing/working
around in the library where the padding is introduced.
---
src/python/bcc/table.py | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/src/python/bcc/table.py b/src/python/bcc/table.py
index 6f598353..f6449de7 100644
--- a/src/python/bcc/table.py
+++ b/src/python/bcc/table.py
@@ -317,6 +317,15 @@ linear_index_max = 1025
tmp = {}
f1 = self.Key._fields_[0][0]
f2 = self.Key._fields_[1][0]
+
+ # The above code assumes that self.Key._fields_[1][0] holds the
+ # slot. But a padding member may have been inserted here, which
+ # breaks the assumption and leads to chaos.
+ # TODO: this is a quick fix. Fixing/working around in the BCC
+ # internal library is the right thing to do.
+ if f2 == '__pad_1' and len(self.Key._fields_) == 3:
+ f2 = self.Key._fields_[2][0]
+
for k, v in self.items():
bucket = getattr(k, f1)
if bucket_fn:
--
2.20.1

View File

@ -1,111 +0,0 @@
From f03beca4d6e6bc3fa7089416d752387bd26904dc Mon Sep 17 00:00:00 2001
From: Jerome Marchand <jmarchan@redhat.com>
Date: Fri, 15 Feb 2019 17:35:37 +0100
Subject: [PATCH] tools: fix some python3 bytes vs strings issues (#2205)
It fixes the following errors:
$ execsnoop.py -q
PCOMM PID PPID RET ARGS
Traceback (most recent call last):
File "_ctypes/callbacks.c", line 234, in 'calling callback function'
File "/usr/lib/python3.6/site-packages/bcc/table.py", line 572, in raw_cb_
callback(cpu, data, size)
File "tools/execsnoop.py", line 229, in print_event
for arg in argv[event.pid]
File "tools/execsnoop.py", line 229, in <listcomp>
for arg in argv[event.pid]
TypeError: a bytes-like object is required, not 'str'
$ offcputime.py -K -f 5
Traceback (most recent call last):
File "./tools/offcputime.py", line 298, in <module>
print("%s %d" % (";".join(line), v.value))
TypeError: sequence item 1: expected str instance, bytes found
$ offwaketime.py -f 5
Traceback (most recent call last):
File "./tools/offwaketime.py", line 350, in <module>
print("%s %d" % (";".join(line), v.value))
TypeError: sequence item 1: expected str instance, bytes found
---
tools/execsnoop.py | 2 +-
tools/offcputime.py | 6 ++++--
tools/offwaketime.py | 8 ++++----
3 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/tools/execsnoop.py b/tools/execsnoop.py
index c4021165..1ce83e07 100755
--- a/tools/execsnoop.py
+++ b/tools/execsnoop.py
@@ -210,7 +210,7 @@ argv = defaultdict(list)
skip = True
if args.quote:
argv[event.pid] = [
- "\"" + arg.replace("\"", "\\\"") + "\""
+ b"\"" + arg.replace(b"\"", b"\\\"") + b"\""
for arg in argv[event.pid]
]
diff --git a/tools/offcputime.py b/tools/offcputime.py
index d84ae529..ac3b7281 100755
--- a/tools/offcputime.py
+++ b/tools/offcputime.py
@@ -288,13 +288,15 @@ stack_traces = b.get_table("stack_traces")
if stack_id_err(k.user_stack_id):
line.append("[Missed User Stack]")
else:
- line.extend([b.sym(addr, k.tgid) for addr in reversed(user_stack)])
+ line.extend([b.sym(addr, k.tgid).decode('utf-8', 'replace')
+ for addr in reversed(user_stack)])
if not args.user_stacks_only:
line.extend(["-"] if (need_delimiter and k.kernel_stack_id >= 0 and k.user_stack_id >= 0) else [])
if stack_id_err(k.kernel_stack_id):
line.append("[Missed Kernel Stack]")
else:
- line.extend([b.ksym(addr) for addr in reversed(kernel_stack)])
+ line.extend([b.ksym(addr).decode('utf-8', 'replace')
+ for addr in reversed(kernel_stack)])
print("%s %d" % (";".join(line), v.value))
else:
# print default multi-line stack output
diff --git a/tools/offwaketime.py b/tools/offwaketime.py
index 38a9ff25..4a1cebab 100755
--- a/tools/offwaketime.py
+++ b/tools/offwaketime.py
@@ -323,28 +323,28 @@ need_delimiter = args.delimited and not (args.kernel_stacks_only or
if stack_id_err(k.t_u_stack_id):
line.append("[Missed User Stack]")
else:
- line.extend([b.sym(addr, k.t_tgid)
+ line.extend([b.sym(addr, k.t_tgid).decode('utf-8', 'replace')
for addr in reversed(list(target_user_stack)[1:])])
if not args.user_stacks_only:
line.extend(["-"] if (need_delimiter and k.t_k_stack_id > 0 and k.t_u_stack_id > 0) else [])
if stack_id_err(k.t_k_stack_id):
line.append("[Missed Kernel Stack]")
else:
- line.extend([b.ksym(addr)
+ line.extend([b.ksym(addr).decode('utf-8', 'replace')
for addr in reversed(list(target_kernel_stack)[1:])])
line.append("--")
if not args.user_stacks_only:
if stack_id_err(k.w_k_stack_id):
line.append("[Missed Kernel Stack]")
else:
- line.extend([b.ksym(addr)
+ line.extend([b.ksym(addr).decode('utf-8', 'replace')
for addr in reversed(list(waker_kernel_stack))])
if not args.kernel_stacks_only:
line.extend(["-"] if (need_delimiter and k.w_u_stack_id > 0 and k.w_k_stack_id > 0) else [])
if stack_id_err(k.w_u_stack_id):
line.append("[Missed User Stack]")
else:
- line.extend([b.sym(addr, k.w_tgid)
+ line.extend([b.sym(addr, k.w_tgid).decode('utf-8', 'replace')
for addr in reversed(list(waker_user_stack))])
line.append(k.waker.decode('utf-8', 'replace'))
print("%s %d" % (";".join(line), v.value))
--
2.20.1

View File

@ -1,180 +0,0 @@
From ba41501bb2ca89312061b31c08e570a11c092370 Mon Sep 17 00:00:00 2001
From: mephi42 <mephi42@gmail.com>
Date: Tue, 12 Mar 2019 07:02:56 +0100
Subject: [PATCH] Add basic USDT support for s390x (#2266)
Approach and code shamelessly borrowed from "422db709: Add basic USDT
support for powerpc64".
---
src/cc/usdt.h | 7 +++++
src/cc/usdt/usdt.cc | 2 ++
src/cc/usdt/usdt_args.cc | 53 ++++++++++++++++++++++++++++++++++++++
tests/cc/test_usdt_args.cc | 46 +++++++++++++++++++++++++++++++++
4 files changed, 108 insertions(+)
diff --git a/src/cc/usdt.h b/src/cc/usdt.h
index 6d89fd644..406cfd546 100644
--- a/src/cc/usdt.h
+++ b/src/cc/usdt.h
@@ -81,6 +81,7 @@ class Argument {
friend class ArgumentParser;
friend class ArgumentParser_aarch64;
friend class ArgumentParser_powerpc64;
+ friend class ArgumentParser_s390x;
friend class ArgumentParser_x64;
};
@@ -130,6 +131,12 @@ class ArgumentParser_powerpc64 : public ArgumentParser {
ArgumentParser_powerpc64(const char *arg) : ArgumentParser(arg) {}
};
+class ArgumentParser_s390x : public ArgumentParser {
+public:
+ bool parse(Argument *dest);
+ ArgumentParser_s390x(const char *arg) : ArgumentParser(arg) {}
+};
+
class ArgumentParser_x64 : public ArgumentParser {
private:
enum Register {
diff --git a/src/cc/usdt/usdt.cc b/src/cc/usdt/usdt.cc
index 0914fe3a5..c91faa016 100644
--- a/src/cc/usdt/usdt.cc
+++ b/src/cc/usdt/usdt.cc
@@ -40,6 +40,8 @@ Location::Location(uint64_t addr, const std::string &bin_path, const char *arg_f
ArgumentParser_aarch64 parser(arg_fmt);
#elif __powerpc64__
ArgumentParser_powerpc64 parser(arg_fmt);
+#elif __s390x__
+ ArgumentParser_s390x parser(arg_fmt);
#else
ArgumentParser_x64 parser(arg_fmt);
#endif
diff --git a/src/cc/usdt/usdt_args.cc b/src/cc/usdt/usdt_args.cc
index b27e515f4..3e2045575 100644
--- a/src/cc/usdt/usdt_args.cc
+++ b/src/cc/usdt/usdt_args.cc
@@ -285,6 +285,59 @@ bool ArgumentParser_powerpc64::parse(Argument *dest) {
return true;
}
+bool ArgumentParser_s390x::parse(Argument *dest) {
+ if (done())
+ return false;
+
+ bool matched;
+ std::cmatch matches;
+#define S390X_IMM "(-?[0-9]+)"
+ std::regex arg_n_regex("^" S390X_IMM "@");
+ // <imm>
+ std::regex arg_op_regex_imm("^" S390X_IMM "(?: +|$)");
+ // %r<N>
+#define S390X_REG "%r([0-9]|1[0-5])"
+ std::regex arg_op_regex_reg("^" S390X_REG "(?: +|$)");
+ // <disp>(%r<N>,%r<N>)
+ std::regex arg_op_regex_mem("^" S390X_IMM "?\\(" S390X_REG
+ "(?:," S390X_REG ")?\\)(?: +|$)");
+#undef S390X_IMM
+#undef S390X_REG
+
+ matched = std::regex_search(arg_ + cur_pos_, matches, arg_n_regex);
+ if (matched) {
+ dest->arg_size_ = stoi(matches.str(1));
+ cur_pos_ += matches.length(0);
+
+ if (std::regex_search(arg_ + cur_pos_, matches, arg_op_regex_imm)) {
+ dest->constant_ = stoi(matches.str(1));
+ } else if (std::regex_search(arg_ + cur_pos_, matches, arg_op_regex_reg)) {
+ dest->base_register_name_ = "gprs[" + matches.str(1) + "]";
+ } else if (std::regex_search(arg_ + cur_pos_, matches, arg_op_regex_mem)) {
+ if (matches.length(1) > 0) {
+ dest->deref_offset_ = stoi(matches.str(1));
+ }
+ dest->base_register_name_ = "gprs[" + matches.str(2) + "]";
+ if (matches.length(3) > 0) {
+ dest->index_register_name_ = "gprs[" + matches.str(3) + "]";
+ }
+ } else {
+ matched = false;
+ }
+ }
+
+ if (!matched) {
+ print_error(cur_pos_);
+ skip_until_whitespace_from(cur_pos_);
+ skip_whitespace_from(cur_pos_);
+ return false;
+ }
+
+ cur_pos_ += matches.length(0);
+ skip_whitespace_from(cur_pos_);
+ return true;
+}
+
ssize_t ArgumentParser_x64::parse_identifier(ssize_t pos,
optional<std::string> *result) {
if (isalpha(arg_[pos]) || arg_[pos] == '_') {
diff --git a/tests/cc/test_usdt_args.cc b/tests/cc/test_usdt_args.cc
index 3a96c5aac..db1f8c8e6 100644
--- a/tests/cc/test_usdt_args.cc
+++ b/tests/cc/test_usdt_args.cc
@@ -58,6 +58,8 @@ TEST_CASE("test usdt argument parsing", "[usdt]") {
USDT::ArgumentParser_aarch64 parser("4@[x32,200]");
#elif __powerpc64__
USDT::ArgumentParser_powerpc64 parser("4@-12(42)");
+#elif __s390x__
+ USDT::ArgumentParser_s390x parser("4@-12(%r42)");
#elif defined(__x86_64__)
USDT::ArgumentParser_x64 parser("4@i%ra+1r");
#endif
@@ -121,6 +123,50 @@ TEST_CASE("test usdt argument parsing", "[usdt]") {
verify_register(parser, 2, 1097);
verify_register(parser, 4, "gpr[30]", 108);
verify_register(parser, -2, "gpr[31]", -4);
+#elif __s390x__
+ USDT::ArgumentParser_s390x parser(
+ "-4@%r0 8@%r0 8@0 4@0(%r0) -2@0(%r0) "
+ "1@%r0 -2@%r3 -8@9 -1@0(%r4) -4@16(%r6) "
+ "2@%r7 4@%r11 4@-67 8@-16(%r15) 1@-52(%r11) "
+ "-8@%r4 -8@%r14 2@-11 -2@14(%r13) -8@-32(%r12) "
+ "4@%r5 2@%r11 -8@-693 -1@-23(%r10) 4@28(%r9) "
+ "-2@%r3 -4@%r8 2@1097 4@108(%r7) -2@-4(%r6)");
+
+ verify_register(parser, -4, "gprs[0]");
+ verify_register(parser, 8, "gprs[0]");
+ verify_register(parser, 8, 0);
+ verify_register(parser, 4, "gprs[0]", 0);
+ verify_register(parser, -2, "gprs[0]", 0);
+
+ verify_register(parser, 1, "gprs[0]");
+ verify_register(parser, -2, "gprs[3]");
+ verify_register(parser, -8, 9);
+ verify_register(parser, -1, "gprs[4]", 0);
+ verify_register(parser, -4, "gprs[6]", 16);
+
+ verify_register(parser, 2, "gprs[7]");
+ verify_register(parser, 4, "gprs[11]");
+ verify_register(parser, 4, -67);
+ verify_register(parser, 8, "gprs[15]", -16);
+ verify_register(parser, 1, "gprs[11]", -52);
+
+ verify_register(parser, -8, "gprs[4]");
+ verify_register(parser, -8, "gprs[14]");
+ verify_register(parser, 2, -11);
+ verify_register(parser, -2, "gprs[13]", 14);
+ verify_register(parser, -8, "gprs[12]", -32);
+
+ verify_register(parser, 4, "gprs[5]");
+ verify_register(parser, 2, "gprs[11]");
+ verify_register(parser, -8, -693);
+ verify_register(parser, -1, "gprs[10]", -23);
+ verify_register(parser, 4, "gprs[9]", 28);
+
+ verify_register(parser, -2, "gprs[3]");
+ verify_register(parser, -4, "gprs[8]");
+ verify_register(parser, 2, 1097);
+ verify_register(parser, 4, "gprs[7]", 108);
+ verify_register(parser, -2, "gprs[6]", -4);
#elif defined(__x86_64__)
USDT::ArgumentParser_x64 parser(
"-4@$0 8@$1234 %rdi %rax %rsi "

View File

@ -4,15 +4,23 @@
%bcond_without llvm_static
Name: bcc
Version: 0.8.0
Version: 0.11.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}-usdt-s390x.patch
Patch1: %{name}-%{version}-print_log2_hist-check-and-skip-possible-paddings-215.patch
Patch2: %{name}-%{version}-tools-fix-some-python3-bytes-vs-strings-issues-2205.patch
# Generate source tarball until upstream bug is fixed
# See https://github.com/iovisor/bcc/issues/2261
# To generate the tarball, use the following commands
# git clone -b "v0.11.0" --single-branch --depth 1 url bcc-0.11.0
# pushd bcc-0.11.0
# git submodule update --init
# popd
# tar zcvf bcc-0.11.0.tar.gz bcc-0.11.0/
#Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
Source0: %{name}-%{version}.tar.gz
Patch1: %{name}-%{version}-Manpages-remove-unstable-statement.patch
patch2: %{name}-%{version}-man-add-missing-c-option-to-tcpretrans-synopsis.patch
# Arches will be included as upstream support is added and dependencies are
# satisfied in the respective arches
@ -145,11 +153,11 @@ done
%doc README.md
%license LICENSE.txt
%{_libdir}/lib%{name}.so.*
%{_libdir}/libbpf.so.*
%{_libdir}/libbcc_bpf.so.*
%files devel
%{_libdir}/lib%{name}.so
%{_libdir}/libbpf.so
%{_libdir}/libbcc_bpf.so
%{_libdir}/pkgconfig/lib%{name}.pc
%{_includedir}/%{name}/
@ -181,6 +189,10 @@ done
%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 8
%exclude %{_datadir}/%{name}/tools/criticalstat
%exclude %{_datadir}/%{name}/tools/doc/criticalstat_example.txt
%exclude %{_mandir}/man8/criticalstat.8
%{_mandir}/man8/*
%if %{with lua}
@ -190,6 +202,26 @@ done
%changelog
* Wed Dec 04 2019 Jerome Marchand <jmarchan@redhat.com> - 0.11.0-2
- Add -c option ton the synopsis of tcpretrans manpage
* Tue Nov 26 2019 Jerome Marchand <jmarchan@redhat.com> - 0.11.0-1
- Rebase to bcc-0.11.0
- Reinstate the unstable comment patch that has been removed by mistake
* Thu Oct 17 2019 Jerome Marchand <jmarchan@redhat.com> - 0.10.0-1
- Rebase to bcc-0.10.0
- Drop criticalstat
- Fix regression on vfscount and runqslower
- Rebuild on LLVM 9
* Tue Aug 06 2019 Jerome Marchand <jmarchan@redhat.com> - 0.8.0-4
- remove unstable statement from the man pages
* Wed Jul 03 2019 Jerome Marchand <jmarchan@redhat.com> - 0.8.0-3
- fix b.support_raw_tracepoint
- fix runqslower warning
* Wed May 15 2019 Jerome Marchand <jmarchan@redhat.com> - 0.8.0-2
- Rebuild for llvm 8