import bcc-0.24.0-4.el9

c9 imports/c9/bcc-0.24.0-4.el9
CentOS Sources 2 years ago committed by MSVSphere Packaging Team
commit 58145b1cff

@ -0,0 +1 @@
896d0249470dedfabfcc9a4c8b4089a55b793277 SOURCES/bcc-0.24.0.tar.gz

1
.gitignore vendored

@ -0,0 +1 @@
SOURCES/bcc-0.24.0.tar.gz

@ -0,0 +1,44 @@
From 5e7543d35596fabd9e5b02b58f8910bf572ca2fa Mon Sep 17 00:00:00 2001
From: Jerome Marchand <jmarchan@redhat.com>
Date: Thu, 7 Oct 2021 17:31:53 +0200
Subject: [PATCH] C9S: Fix mdflush
Since kernel commit 309dca309fc ("block: store a block_device pointer
in struct bio") struct bio points again to a block_device and not to a
gendisk directly. However mdflush is looking at the presence or not of
the bio_dev macro to check whether to get the gendisk directly from
the bio or not, which doesn't work anymore since the bio_dev macro
still exists. Since we don't have to deal other ekrnel kernel version
but our own, just use the definition that we use in our kernels.
Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
---
tools/mdflush.py | 11 -----------
1 file changed, 11 deletions(-)
diff --git a/tools/mdflush.py b/tools/mdflush.py
index 8a23520b..3581d1bf 100755
--- a/tools/mdflush.py
+++ b/tools/mdflush.py
@@ -35,18 +35,7 @@ int kprobe__md_flush_request(struct pt_regs *ctx, void *mddev, struct bio *bio)
u32 pid = bpf_get_current_pid_tgid() >> 32;
data.pid = pid;
bpf_get_current_comm(&data.comm, sizeof(data.comm));
-/*
- * The following deals with a kernel version change (in mainline 4.14, although
- * it may be backported to earlier kernels) with how the disk name is accessed.
- * We handle both pre- and post-change versions here. Please avoid kernel
- * version tests like this as much as possible: they inflate the code, test,
- * and maintenance burden.
- */
-#ifdef bio_dev
- struct gendisk *bi_disk = bio->bi_disk;
-#else
struct gendisk *bi_disk = bio->bi_bdev->bd_disk;
-#endif
bpf_probe_read_kernel(&data.disk, sizeof(data.disk), bi_disk->disk_name);
events.perf_submit(ctx, &data, sizeof(data));
return 0;
--
2.35.1

@ -0,0 +1,297 @@
From a81f219d7f2bfc70dba1eb12208e3e6ab7c81b50 Mon Sep 17 00:00:00 2001
From: Jerome Marchand <jmarchan@redhat.com>
Date: Thu, 24 Mar 2022 16:08:17 +0100
Subject: [PATCH] C9S: libpbf version fixes
Revert "bcc: Replace deprecated libbpf APIs" since the libbpf version
provided in C9S doesn't provide the new APIs.
Remove BPF_MAP_TYPE_BLOOM_FILTER from bps since the libbpf version in
C9S, doesn't provide bloom filter map.
Add definition of struct bpf_core_relo.
---
introspection/bps.c | 1 -
src/cc/bcc_btf.cc | 73 +++++++++++++++++++++++++++++++++++++++-
src/cc/libbpf.c | 82 ++++++---------------------------------------
3 files changed, 83 insertions(+), 73 deletions(-)
diff --git a/introspection/bps.c b/introspection/bps.c
index 232b23d4..6ec02e6c 100644
--- a/introspection/bps.c
+++ b/introspection/bps.c
@@ -80,7 +80,6 @@ static const char * const map_type_strings[] = {
[BPF_MAP_TYPE_RINGBUF] = "ringbuf",
[BPF_MAP_TYPE_INODE_STORAGE] = "inode_storage",
[BPF_MAP_TYPE_TASK_STORAGE] = "task_storage",
- [BPF_MAP_TYPE_BLOOM_FILTER] = "bloom_filter",
};
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x)))
diff --git a/src/cc/bcc_btf.cc b/src/cc/bcc_btf.cc
index 7f551ae8..c78ba823 100644
--- a/src/cc/bcc_btf.cc
+++ b/src/cc/bcc_btf.cc
@@ -170,6 +170,77 @@ static int btf_ext_setup_line_info(struct btf_ext *btf_ext)
return btf_ext_setup_info(btf_ext, &param);
}
+/* bpf_core_relo_kind encodes which aspect of captured field/type/enum value
+ * has to be adjusted by relocations.
+ */
+enum bpf_core_relo_kind {
+ BPF_FIELD_BYTE_OFFSET = 0, /* field byte offset */
+ BPF_FIELD_BYTE_SIZE = 1, /* field size in bytes */
+ BPF_FIELD_EXISTS = 2, /* field existence in target kernel */
+ BPF_FIELD_SIGNED = 3, /* field signedness (0 - unsigned, 1 - signed) */
+ BPF_FIELD_LSHIFT_U64 = 4, /* bitfield-specific left bitshift */
+ BPF_FIELD_RSHIFT_U64 = 5, /* bitfield-specific right bitshift */
+ BPF_TYPE_ID_LOCAL = 6, /* type ID in local BPF object */
+ BPF_TYPE_ID_TARGET = 7, /* type ID in target kernel */
+ BPF_TYPE_EXISTS = 8, /* type existence in target kernel */
+ BPF_TYPE_SIZE = 9, /* type size in bytes */
+ BPF_ENUMVAL_EXISTS = 10, /* enum value existence in target kernel */
+ BPF_ENUMVAL_VALUE = 11, /* enum value integer value */
+};
+
+/* The minimum bpf_core_relo checked by the loader
+ *
+ * CO-RE relocation captures the following data:
+ * - insn_off - instruction offset (in bytes) within a BPF program that needs
+ * its insn->imm field to be relocated with actual field info;
+ * - type_id - BTF type ID of the "root" (containing) entity of a relocatable
+ * type or field;
+ * - access_str_off - offset into corresponding .BTF string section. String
+ * interpretation depends on specific relocation kind:
+ * - for field-based relocations, string encodes an accessed field using
+ * a sequence of field and array indices, separated by colon (:). It's
+ * conceptually very close to LLVM's getelementptr ([0]) instruction's
+ * arguments for identifying offset to a field.
+ * - for type-based relocations, strings is expected to be just "0";
+ * - for enum value-based relocations, string contains an index of enum
+ * value within its enum type;
+ *
+ * Example to provide a better feel.
+ *
+ * struct sample {
+ * int a;
+ * struct {
+ * int b[10];
+ * };
+ * };
+ *
+ * struct sample *s = ...;
+ * int x = &s->a; // encoded as "0:0" (a is field #0)
+ * int y = &s->b[5]; // encoded as "0:1:0:5" (anon struct is field #1,
+ * // b is field #0 inside anon struct, accessing elem #5)
+ * int z = &s[10]->b; // encoded as "10:1" (ptr is used as an array)
+ *
+ * type_id for all relocs in this example will capture BTF type id of
+ * `struct sample`.
+ *
+ * Such relocation is emitted when using __builtin_preserve_access_index()
+ * Clang built-in, passing expression that captures field address, e.g.:
+ *
+ * bpf_probe_read(&dst, sizeof(dst),
+ * __builtin_preserve_access_index(&src->a.b.c));
+ *
+ * In this case Clang will emit field relocation recording necessary data to
+ * be able to find offset of embedded `a.b.c` field within `src` struct.
+ *
+ * [0] https://llvm.org/docs/LangRef.html#getelementptr-instruction
+ */
+struct bpf_core_relo {
+ __u32 insn_off;
+ __u32 type_id;
+ __u32 access_str_off;
+ enum bpf_core_relo_kind kind;
+};
+
static int btf_ext_setup_core_relos(struct btf_ext *btf_ext)
{
struct btf_ext_sec_setup_param param = {
@@ -597,7 +668,7 @@ int BTF::load(uint8_t *btf_sec, uintptr_t btf_sec_size,
return -1;
}
- if (btf__load_into_kernel(btf)) {
+ if (btf__load(btf)) {
btf__free(btf);
warning("Loading .BTF section failed\n");
return -1;
diff --git a/src/cc/libbpf.c b/src/cc/libbpf.c
index e6403299..68af4b35 100644
--- a/src/cc/libbpf.c
+++ b/src/cc/libbpf.c
@@ -297,25 +297,6 @@ static uint64_t ptr_to_u64(void *ptr)
return (uint64_t) (unsigned long) ptr;
}
-static int libbpf_bpf_map_create(struct bpf_create_map_attr *create_attr)
-{
- LIBBPF_OPTS(bpf_map_create_opts, p);
-
- p.map_flags = create_attr->map_flags;
- p.numa_node = create_attr->numa_node;
- p.btf_fd = create_attr->btf_fd;
- p.btf_key_type_id = create_attr->btf_key_type_id;
- p.btf_value_type_id = create_attr->btf_value_type_id;
- p.map_ifindex = create_attr->map_ifindex;
- if (create_attr->map_type == BPF_MAP_TYPE_STRUCT_OPS)
- p.btf_vmlinux_value_type_id = create_attr->btf_vmlinux_value_type_id;
- else
- p.inner_map_fd = create_attr->inner_map_fd;
-
- return bpf_map_create(create_attr->map_type, create_attr->name, create_attr->key_size,
- create_attr->value_size, create_attr->max_entries, &p);
-}
-
int bcc_create_map_xattr(struct bpf_create_map_attr *attr, bool allow_rlimit)
{
unsigned name_len = attr->name ? strlen(attr->name) : 0;
@@ -323,7 +304,7 @@ int bcc_create_map_xattr(struct bpf_create_map_attr *attr, bool allow_rlimit)
memcpy(map_name, attr->name, min(name_len, BPF_OBJ_NAME_LEN - 1));
attr->name = map_name;
- int ret = libbpf_bpf_map_create(attr);
+ int ret = bpf_create_map_xattr(attr);
if (ret < 0 && errno == EPERM) {
if (!allow_rlimit)
@@ -335,7 +316,7 @@ int bcc_create_map_xattr(struct bpf_create_map_attr *attr, bool allow_rlimit)
rl.rlim_max = RLIM_INFINITY;
rl.rlim_cur = rl.rlim_max;
if (setrlimit(RLIMIT_MEMLOCK, &rl) == 0)
- ret = libbpf_bpf_map_create(attr);
+ ret = bpf_create_map_xattr(attr);
}
}
@@ -345,12 +326,12 @@ int bcc_create_map_xattr(struct bpf_create_map_attr *attr, bool allow_rlimit)
attr->btf_fd = 0;
attr->btf_key_type_id = 0;
attr->btf_value_type_id = 0;
- ret = libbpf_bpf_map_create(attr);
+ ret = bpf_create_map_xattr(attr);
}
if (ret < 0 && name_len && (errno == E2BIG || errno == EINVAL)) {
map_name[0] = '\0';
- ret = libbpf_bpf_map_create(attr);
+ ret = bpf_create_map_xattr(attr);
}
if (ret < 0 && errno == EPERM) {
@@ -363,7 +344,7 @@ int bcc_create_map_xattr(struct bpf_create_map_attr *attr, bool allow_rlimit)
rl.rlim_max = RLIM_INFINITY;
rl.rlim_cur = rl.rlim_max;
if (setrlimit(RLIMIT_MEMLOCK, &rl) == 0)
- ret = libbpf_bpf_map_create(attr);
+ ret = bpf_create_map_xattr(attr);
}
}
return ret;
@@ -627,47 +608,6 @@ int bpf_prog_get_tag(int fd, unsigned long long *ptag)
return 0;
}
-static int libbpf_bpf_prog_load(const struct bpf_load_program_attr *load_attr,
- char *log_buf, size_t log_buf_sz)
-{
- LIBBPF_OPTS(bpf_prog_load_opts, p);
-
- if (!load_attr || !log_buf != !log_buf_sz) {
- errno = EINVAL;
- return -EINVAL;
- }
-
- p.expected_attach_type = load_attr->expected_attach_type;
- switch (load_attr->prog_type) {
- case BPF_PROG_TYPE_STRUCT_OPS:
- case BPF_PROG_TYPE_LSM:
- p.attach_btf_id = load_attr->attach_btf_id;
- break;
- case BPF_PROG_TYPE_TRACING:
- case BPF_PROG_TYPE_EXT:
- p.attach_btf_id = load_attr->attach_btf_id;
- p.attach_prog_fd = load_attr->attach_prog_fd;
- break;
- default:
- p.prog_ifindex = load_attr->prog_ifindex;
- p.kern_version = load_attr->kern_version;
- }
- p.log_level = load_attr->log_level;
- p.log_buf = log_buf;
- p.log_size = log_buf_sz;
- p.prog_btf_fd = load_attr->prog_btf_fd;
- p.func_info_rec_size = load_attr->func_info_rec_size;
- p.func_info_cnt = load_attr->func_info_cnt;
- p.func_info = load_attr->func_info;
- p.line_info_rec_size = load_attr->line_info_rec_size;
- p.line_info_cnt = load_attr->line_info_cnt;
- p.line_info = load_attr->line_info;
- p.prog_flags = load_attr->prog_flags;
-
- return bpf_prog_load(load_attr->prog_type, load_attr->name, load_attr->license,
- load_attr->insns, load_attr->insns_cnt, &p);
-}
-
int bcc_prog_load_xattr(struct bpf_load_program_attr *attr, int prog_len,
char *log_buf, unsigned log_buf_size, bool allow_rlimit)
{
@@ -750,7 +690,7 @@ int bcc_prog_load_xattr(struct bpf_load_program_attr *attr, int prog_len,
attr->name = prog_name;
}
- ret = libbpf_bpf_prog_load(attr, attr_log_buf, attr_log_buf_size);
+ ret = bpf_load_program_xattr(attr, attr_log_buf, attr_log_buf_size);
// func_info/line_info may not be supported in old kernels.
if (ret < 0 && attr->func_info && errno == EINVAL) {
@@ -761,14 +701,14 @@ int bcc_prog_load_xattr(struct bpf_load_program_attr *attr, int prog_len,
attr->line_info = NULL;
attr->line_info_cnt = 0;
attr->line_info_rec_size = 0;
- ret = libbpf_bpf_prog_load(attr, attr_log_buf, attr_log_buf_size);
+ ret = bpf_load_program_xattr(attr, attr_log_buf, attr_log_buf_size);
}
// BPF object name is not supported on older Kernels.
// If we failed due to this, clear the name and try again.
if (ret < 0 && name_len && (errno == E2BIG || errno == EINVAL)) {
prog_name[0] = '\0';
- ret = libbpf_bpf_prog_load(attr, attr_log_buf, attr_log_buf_size);
+ ret = bpf_load_program_xattr(attr, attr_log_buf, attr_log_buf_size);
}
if (ret < 0 && errno == EPERM) {
@@ -787,7 +727,7 @@ int bcc_prog_load_xattr(struct bpf_load_program_attr *attr, int prog_len,
rl.rlim_max = RLIM_INFINITY;
rl.rlim_cur = rl.rlim_max;
if (setrlimit(RLIMIT_MEMLOCK, &rl) == 0)
- ret = libbpf_bpf_prog_load(attr, attr_log_buf, attr_log_buf_size);
+ ret = bpf_load_program_xattr(attr, attr_log_buf, attr_log_buf_size);
}
}
@@ -805,7 +745,7 @@ int bcc_prog_load_xattr(struct bpf_load_program_attr *attr, int prog_len,
// If logging is not already enabled, enable it and do the syscall again.
if (attr->log_level == 0) {
attr->log_level = 1;
- ret = libbpf_bpf_prog_load(attr, log_buf, log_buf_size);
+ ret = bpf_load_program_xattr(attr, log_buf, log_buf_size);
}
// Print the log message and return.
bpf_print_hints(ret, log_buf);
@@ -829,7 +769,7 @@ int bcc_prog_load_xattr(struct bpf_load_program_attr *attr, int prog_len,
goto return_result;
}
tmp_log_buf[0] = 0;
- ret = libbpf_bpf_prog_load(attr, tmp_log_buf, tmp_log_buf_size);
+ ret = bpf_load_program_xattr(attr, tmp_log_buf, tmp_log_buf_size);
if (ret < 0 && errno == ENOSPC) {
// Temporary buffer size is not enough. Double it and try again.
free(tmp_log_buf);
--
2.36.1

File diff suppressed because it is too large Load Diff

@ -0,0 +1,125 @@
From 879792d2d47c1308e884fb59d92fe535f7bb8d71 Mon Sep 17 00:00:00 2001
From: Tejun Heo <tj@kernel.org>
Date: Thu, 10 Mar 2022 08:37:21 -1000
Subject: [PATCH 1/2] biolatency, biolatpcts, biosnoop, biotop: Build fix for
v5.17+
During 5.17 dev cycle, the kernel dropped request->rq_disk. It can now be
accessed through request->q->disk. Fix the python ones in tools/. There are
more usages in other places which need to be fixed too.
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
---
tools/biolatency.py | 8 ++++++--
tools/biolatpcts.py | 11 ++++++++---
tools/biosnoop.py | 6 +++++-
tools/biotop.py | 9 +++++++--
4 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/tools/biolatency.py b/tools/biolatency.py
index 427cee47..10c852ac 100755
--- a/tools/biolatency.py
+++ b/tools/biolatency.py
@@ -128,12 +128,16 @@ storage_str = ""
store_str = ""
if args.disks:
storage_str += "BPF_HISTOGRAM(dist, disk_key_t);"
- store_str += """
+ disks_str = """
disk_key_t key = {.slot = bpf_log2l(delta)};
- void *__tmp = (void *)req->rq_disk->disk_name;
+ void *__tmp = (void *)req->__RQ_DISK__->disk_name;
bpf_probe_read(&key.disk, sizeof(key.disk), __tmp);
dist.atomic_increment(key);
"""
+ if BPF.kernel_struct_has_field(b'request', b'rq_disk'):
+ store_str += disks_str.replace('__RQ_DISK__', 'rq_disk')
+ else:
+ store_str += disks_str.replace('__RQ_DISK__', 'q->disk')
elif args.flags:
storage_str += "BPF_HISTOGRAM(dist, flag_key_t);"
store_str += """
diff --git a/tools/biolatpcts.py b/tools/biolatpcts.py
index 0f334419..ea8b1ce6 100755
--- a/tools/biolatpcts.py
+++ b/tools/biolatpcts.py
@@ -72,9 +72,9 @@ void kprobe_blk_account_io_done(struct pt_regs *ctx, struct request *rq, u64 now
if (!rq->__START_TIME_FIELD__)
return;
- if (!rq->rq_disk ||
- rq->rq_disk->major != __MAJOR__ ||
- rq->rq_disk->first_minor != __MINOR__)
+ if (!rq->__RQ_DISK__ ||
+ rq->__RQ_DISK__->major != __MAJOR__ ||
+ rq->__RQ_DISK__->first_minor != __MINOR__)
return;
cmd_flags = rq->cmd_flags;
@@ -142,6 +142,11 @@ bpf_source = bpf_source.replace('__START_TIME_FIELD__', start_time_field)
bpf_source = bpf_source.replace('__MAJOR__', str(major))
bpf_source = bpf_source.replace('__MINOR__', str(minor))
+if BPF.kernel_struct_has_field(b'request', b'rq_disk'):
+ bpf_source = bpf_source.replace('__RQ_DISK__', 'rq_disk')
+else:
+ bpf_source = bpf_source.replace('__RQ_DISK__', 'q->disk')
+
bpf = BPF(text=bpf_source)
if BPF.get_kprobe_functions(b'__blk_account_io_done'):
bpf.attach_kprobe(event="__blk_account_io_done", fn_name="kprobe_blk_account_io_done")
diff --git a/tools/biosnoop.py b/tools/biosnoop.py
index ae38e384..a2b636aa 100755
--- a/tools/biosnoop.py
+++ b/tools/biosnoop.py
@@ -125,7 +125,7 @@ int trace_req_completion(struct pt_regs *ctx, struct request *req)
data.pid = valp->pid;
data.sector = req->__sector;
bpf_probe_read_kernel(&data.name, sizeof(data.name), valp->name);
- struct gendisk *rq_disk = req->rq_disk;
+ struct gendisk *rq_disk = req->__RQ_DISK__;
bpf_probe_read_kernel(&data.disk_name, sizeof(data.disk_name),
rq_disk->disk_name);
}
@@ -156,6 +156,10 @@ int trace_req_completion(struct pt_regs *ctx, struct request *req)
bpf_text = bpf_text.replace('##QUEUE##', '1')
else:
bpf_text = bpf_text.replace('##QUEUE##', '0')
+if BPF.kernel_struct_has_field(b'request', b'rq_disk'):
+ bpf_text = bpf_text.replace('__RQ_DISK__', 'rq_disk')
+else:
+ bpf_text = bpf_text.replace('__RQ_DISK__', 'q->disk')
if debug or args.ebpf:
print(bpf_text)
if args.ebpf:
diff --git a/tools/biotop.py b/tools/biotop.py
index b3e3ea00..882835f6 100755
--- a/tools/biotop.py
+++ b/tools/biotop.py
@@ -129,8 +129,8 @@ int trace_req_completion(struct pt_regs *ctx, struct request *req)
// setup info_t key
struct info_t info = {};
- info.major = req->rq_disk->major;
- info.minor = req->rq_disk->first_minor;
+ info.major = req->__RQ_DISK__->major;
+ info.minor = req->__RQ_DISK__->first_minor;
/*
* The following deals with a kernel version change (in mainline 4.7, although
* it may be backported to earlier kernels) with how block request write flags
@@ -174,6 +174,11 @@ int trace_req_completion(struct pt_regs *ctx, struct request *req)
print(bpf_text)
exit()
+if BPF.kernel_struct_has_field(b'request', b'rq_disk'):
+ bpf_text = bpf_text.replace('__RQ_DISK__', 'rq_disk')
+else:
+ bpf_text = bpf_text.replace('__RQ_DISK__', 'q->disk')
+
b = BPF(text=bpf_text)
if BPF.get_kprobe_functions(b'__blk_account_io_start'):
b.attach_kprobe(event="__blk_account_io_start", fn_name="trace_pid_start")
--
2.35.1

@ -0,0 +1,60 @@
From 2ada4cee035c4d07391faa870a5df1874d657b65 Mon Sep 17 00:00:00 2001
From: Tejun Heo <tj@kernel.org>
Date: Thu, 27 Jan 2022 06:25:31 -1000
Subject: [PATCH 2/3] biolatpcts: Build fixes on recent kernels
* `struct request` definition recently moved from blkdev.h to blk-mq.h
breaking both tools/biolatpcts and examples/tracing/biolatpcts. Fix them
by also including blk-mq.h.
* blk_account_io_done() got split into two parts - inline condition checks
and the actual accounting with the latter now done in
__blk_account_io_done(). The kprobe attachment needs to be conditionalized
to work across the change. tools/biolatpcts was already updated but
examples/tracing/biolatpcts wasn't. Fix it.
Signed-off-by: Tejun Heo <tj@kernel.org>
---
examples/tracing/biolatpcts.py | 6 +++++-
tools/biolatpcts.py | 1 +
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/examples/tracing/biolatpcts.py b/examples/tracing/biolatpcts.py
index c9bb834e..68a59516 100755
--- a/examples/tracing/biolatpcts.py
+++ b/examples/tracing/biolatpcts.py
@@ -11,6 +11,7 @@ from time import sleep
bpf_source = """
#include <linux/blk_types.h>
+#include <linux/blk-mq.h>
#include <linux/blkdev.h>
#include <linux/time64.h>
@@ -45,7 +46,10 @@ void kprobe_blk_account_io_done(struct pt_regs *ctx, struct request *rq, u64 now
"""
bpf = BPF(text=bpf_source)
-bpf.attach_kprobe(event='blk_account_io_done', fn_name='kprobe_blk_account_io_done')
+if BPF.get_kprobe_functions(b'__blk_account_io_done'):
+ bpf.attach_kprobe(event="__blk_account_io_done", fn_name="kprobe_blk_account_io_done")
+else:
+ bpf.attach_kprobe(event="blk_account_io_done", fn_name="kprobe_blk_account_io_done")
cur_lat_100ms = bpf['lat_100ms']
cur_lat_1ms = bpf['lat_1ms']
diff --git a/tools/biolatpcts.py b/tools/biolatpcts.py
index a2f59592..0f334419 100755
--- a/tools/biolatpcts.py
+++ b/tools/biolatpcts.py
@@ -56,6 +56,7 @@ parser.add_argument('--verbose', '-v', action='count', default = 0)
bpf_source = """
#include <linux/blk_types.h>
#include <linux/blkdev.h>
+#include <linux/blk-mq.h>
#include <linux/time64.h>
BPF_PERCPU_ARRAY(rwdf_100ms, u64, 400);
--
2.35.1

@ -0,0 +1,49 @@
From a6a5dba23d19f6a900b0359a7390df4a6b9a42f4 Mon Sep 17 00:00:00 2001
From: Jerome Marchand <jmarchan@redhat.com>
Date: Tue, 15 Mar 2022 17:59:24 +0100
Subject: [PATCH 1/3] libbpf-tools: Allow to use different cflags for bpf
targets
commit 531b698cdc20 ("libbpf-tools: Enable compilation warnings for
BPF programs") applies CFLAGS to all targets. However, some of the c
flags typically used by distribution are not available to the bpf
target. Add a new BPFCFLAGS macro to take care of that.
Fixes the following compilation error on fedora:
BPF bashreadline.bpf.o
clang-13: warning: optimization flag '-ffat-lto-objects' is not supported [-Wignored-optimization-argument]
clang-13: warning: argument unused during compilation: '-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1' [-Wunused-command-line-argument]
clang-13: warning: argument unused during compilation: '-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1' [-Wunused-command-line-argument]
clang-13: warning: argument unused during compilation: '-fstack-clash-protection' [-Wunused-command-line-argument]
error: option 'cf-protection=return' cannot be specified on this target
error: option 'cf-protection=branch' cannot be specified on this target
2 errors generated.
---
libbpf-tools/Makefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libbpf-tools/Makefile b/libbpf-tools/Makefile
index 6bf1ed08..39af95ec 100644
--- a/libbpf-tools/Makefile
+++ b/libbpf-tools/Makefile
@@ -7,6 +7,7 @@ LIBBPF_SRC := $(abspath ../src/cc/libbpf/src)
LIBBPF_OBJ := $(abspath $(OUTPUT)/libbpf.a)
INCLUDES := -I$(OUTPUT) -I../src/cc/libbpf/include/uapi
CFLAGS := -g -O2 -Wall
+BPFCFLAGS := -g -O2 -Wall
INSTALL ?= install
prefix ?= /usr/local
ARCH := $(shell uname -m | sed 's/x86_64/x86/' | sed 's/aarch64/arm64/' | sed 's/ppc64le/powerpc/' | sed 's/mips.*/mips/')
@@ -106,7 +107,7 @@ $(OUTPUT)/%.skel.h: $(OUTPUT)/%.bpf.o | $(OUTPUT)
$(OUTPUT)/%.bpf.o: %.bpf.c $(LIBBPF_OBJ) $(wildcard %.h) $(ARCH)/vmlinux.h | $(OUTPUT)
$(call msg,BPF,$@)
- $(Q)$(CLANG) $(CFLAGS) -target bpf -D__TARGET_ARCH_$(ARCH) \
+ $(Q)$(CLANG) $(BPFCFLAGS) -target bpf -D__TARGET_ARCH_$(ARCH) \
-I$(ARCH)/ $(INCLUDES) -c $(filter %.c,$^) -o $@ && \
$(LLVM_STRIP) -g $@
--
2.35.1

@ -0,0 +1,158 @@
From 50480835adf15a389267393674504551b68987a2 Mon Sep 17 00:00:00 2001
From: xingfeng2510 <xingfeng25100@163.com>
Date: Wed, 30 Mar 2022 16:10:51 +0800
Subject: [PATCH 2/2] libbpf-tools: Fix dropped request->rq_disk for kernel
5.17+
Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
---
libbpf-tools/biolatency.bpf.c | 20 ++++++++++++++++++--
libbpf-tools/biosnoop.bpf.c | 12 +++++++++++-
libbpf-tools/biostacks.bpf.c | 12 +++++++++++-
libbpf-tools/bitesize.bpf.c | 12 +++++++++++-
4 files changed, 51 insertions(+), 5 deletions(-)
diff --git a/libbpf-tools/biolatency.bpf.c b/libbpf-tools/biolatency.bpf.c
index 648dda78..8f325046 100644
--- a/libbpf-tools/biolatency.bpf.c
+++ b/libbpf-tools/biolatency.bpf.c
@@ -19,6 +19,10 @@ const volatile bool targ_ms = false;
const volatile bool filter_dev = false;
const volatile __u32 targ_dev = 0;
+struct request_queue___x {
+ struct gendisk *disk;
+} __attribute__((preserve_access_index));
+
struct {
__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
__type(key, u32);
@@ -53,9 +57,15 @@ int trace_rq_start(struct request *rq, int issue)
u64 ts = bpf_ktime_get_ns();
if (filter_dev) {
- struct gendisk *disk = BPF_CORE_READ(rq, rq_disk);
+ struct request_queue___x *q = (void *)BPF_CORE_READ(rq, q);
+ struct gendisk *disk;
u32 dev;
+ if (bpf_core_field_exists(q->disk))
+ disk = BPF_CORE_READ(q, disk);
+ else
+ disk = BPF_CORE_READ(rq, rq_disk);
+
dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
BPF_CORE_READ(disk, first_minor)) : 0;
if (targ_dev != dev)
@@ -119,7 +129,13 @@ int BPF_PROG(block_rq_complete, struct request *rq, int error,
goto cleanup;
if (targ_per_disk) {
- struct gendisk *disk = BPF_CORE_READ(rq, rq_disk);
+ struct request_queue___x *q = (void *)BPF_CORE_READ(rq, q);
+ struct gendisk *disk;
+
+ if (bpf_core_field_exists(q->disk))
+ disk = BPF_CORE_READ(q, disk);
+ else
+ disk = BPF_CORE_READ(rq, rq_disk);
hkey.dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
BPF_CORE_READ(disk, first_minor)) : 0;
diff --git a/libbpf-tools/biosnoop.bpf.c b/libbpf-tools/biosnoop.bpf.c
index 54226e43..05903473 100644
--- a/libbpf-tools/biosnoop.bpf.c
+++ b/libbpf-tools/biosnoop.bpf.c
@@ -15,6 +15,10 @@ const volatile __u32 targ_dev = 0;
extern __u32 LINUX_KERNEL_VERSION __kconfig;
+struct request_queue___x {
+ struct gendisk *disk;
+} __attribute__((preserve_access_index));
+
struct {
__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
__type(key, u32);
@@ -92,7 +96,13 @@ int trace_rq_start(struct request *rq, bool insert)
stagep = bpf_map_lookup_elem(&start, &rq);
if (!stagep) {
- struct gendisk *disk = BPF_CORE_READ(rq, rq_disk);
+ struct request_queue___x *q = (void *)BPF_CORE_READ(rq, q);
+ struct gendisk *disk;
+
+ if (bpf_core_field_exists(q->disk))
+ disk = BPF_CORE_READ(q, disk);
+ else
+ disk = BPF_CORE_READ(rq, rq_disk);
stage.dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
BPF_CORE_READ(disk, first_minor)) : 0;
diff --git a/libbpf-tools/biostacks.bpf.c b/libbpf-tools/biostacks.bpf.c
index 01993737..c13975fa 100644
--- a/libbpf-tools/biostacks.bpf.c
+++ b/libbpf-tools/biostacks.bpf.c
@@ -14,6 +14,10 @@ const volatile bool targ_ms = false;
const volatile bool filter_dev = false;
const volatile __u32 targ_dev = -1;
+struct request_queue___x {
+ struct gendisk *disk;
+} __attribute__((preserve_access_index));
+
struct internal_rqinfo {
u64 start_ts;
struct rqinfo rqinfo;
@@ -41,9 +45,15 @@ static __always_inline
int trace_start(void *ctx, struct request *rq, bool merge_bio)
{
struct internal_rqinfo *i_rqinfop = NULL, i_rqinfo = {};
- struct gendisk *disk = BPF_CORE_READ(rq, rq_disk);
+ struct request_queue___x *q = (void *)BPF_CORE_READ(rq, q);
+ struct gendisk *disk;
u32 dev;
+ if (bpf_core_field_exists(q->disk))
+ disk = BPF_CORE_READ(q, disk);
+ else
+ disk = BPF_CORE_READ(rq, rq_disk);
+
dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
BPF_CORE_READ(disk, first_minor)) : 0;
if (filter_dev && targ_dev != dev)
diff --git a/libbpf-tools/bitesize.bpf.c b/libbpf-tools/bitesize.bpf.c
index 80672c9b..5066ca33 100644
--- a/libbpf-tools/bitesize.bpf.c
+++ b/libbpf-tools/bitesize.bpf.c
@@ -13,6 +13,10 @@ const volatile __u32 targ_dev = 0;
extern __u32 LINUX_KERNEL_VERSION __kconfig;
+struct request_queue___x {
+ struct gendisk *disk;
+} __attribute__((preserve_access_index));
+
struct {
__uint(type, BPF_MAP_TYPE_HASH);
__uint(max_entries, 10240);
@@ -41,9 +45,15 @@ static int trace_rq_issue(struct request *rq)
u64 slot;
if (filter_dev) {
- struct gendisk *disk = BPF_CORE_READ(rq, rq_disk);
+ struct request_queue___x *q = (void *)BPF_CORE_READ(rq, q);
+ struct gendisk *disk;
u32 dev;
+ if (bpf_core_field_exists(q->disk))
+ disk = BPF_CORE_READ(q, disk);
+ else
+ disk = BPF_CORE_READ(rq, rq_disk);
+
dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
BPF_CORE_READ(disk, first_minor)) : 0;
if (targ_dev != dev)
--
2.35.1

@ -0,0 +1,66 @@
From 1eafb1f5aa0d3a9f60f89aad0ea55ae93899baff Mon Sep 17 00:00:00 2001
From: Jerome Marchand <jmarchan@redhat.com>
Date: Wed, 23 Feb 2022 16:04:30 +0100
Subject: [PATCH 3/3] tools: include blk-mq.h in bio tools
Kernel commit 24b83deb29b ("block: move struct request to blk-mq.h")
has moved struct request from blkdev.h to blk-mq.h. It results in
several bio tools to fail with errors of the following type:
error: incomplete definition of type 'struct request'
Since blk-mq.h had always included blkdev.h. it is safe to simply
replace the inclusion of blkdev.h by blk-mq-h. It works on both older
and newer kernel.
Fixes: #3869
Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
---
tools/biolatency.py | 2 +-
tools/biosnoop.py | 2 +-
tools/biotop.py | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/tools/biolatency.py b/tools/biolatency.py
index f4e2c9ea..427cee47 100755
--- a/tools/biolatency.py
+++ b/tools/biolatency.py
@@ -64,7 +64,7 @@ debug = 0
# define BPF program
bpf_text = """
#include <uapi/linux/ptrace.h>
-#include <linux/blkdev.h>
+#include <linux/blk-mq.h>
typedef struct disk_key {
char disk[DISK_NAME_LEN];
diff --git a/tools/biosnoop.py b/tools/biosnoop.py
index 2b954ac9..ae38e384 100755
--- a/tools/biosnoop.py
+++ b/tools/biosnoop.py
@@ -37,7 +37,7 @@ debug = 0
# define BPF program
bpf_text="""
#include <uapi/linux/ptrace.h>
-#include <linux/blkdev.h>
+#include <linux/blk-mq.h>
// for saving the timestamp and __data_len of each request
struct start_req_t {
diff --git a/tools/biotop.py b/tools/biotop.py
index eac4dab9..b3e3ea00 100755
--- a/tools/biotop.py
+++ b/tools/biotop.py
@@ -54,7 +54,7 @@ diskstats = "/proc/diskstats"
# load BPF program
bpf_text = """
#include <uapi/linux/ptrace.h>
-#include <linux/blkdev.h>
+#include <linux/blk-mq.h>
// for saving the timestamp and __data_len of each request
struct start_req_t {
--
2.35.1

@ -0,0 +1,30 @@
From 93a464e2ef05b7ef78b5679e366b89fcddf6a575 Mon Sep 17 00:00:00 2001
From: Jerome Marchand <jmarchan@redhat.com>
Date: Mon, 1 Aug 2022 11:45:41 +0200
Subject: [PATCH] tools/mdflush: include blkdev.h instead of genhd.h
In recent kernels, i.e. since commit 322cbb50de71 ("block: remove
genhd.h"), genhd.h header has been removed and its content moved to
blkdev.h. Since genhd.h has been included in blkdev.h since forever,
including blkdev instead of genhd in the mdflush tool works for both
older and newer kernel.
---
tools/mdflush.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/mdflush.py b/tools/mdflush.py
index 3581d1bf..6741d563 100755
--- a/tools/mdflush.py
+++ b/tools/mdflush.py
@@ -19,7 +19,7 @@ from time import strftime
b = BPF(text="""
#include <uapi/linux/ptrace.h>
#include <linux/sched.h>
-#include <linux/genhd.h>
+#include <linux/blkdev.h>
#include <linux/bio.h>
struct data_t {
--
2.37.1

@ -0,0 +1,498 @@
# 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.24.0
Release: 4%{?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}-libbpf-tools-Allow-to-use-different-cflags-for-bpf-t.patch
Patch1: %{name}-%{version}-biolatpcts-Build-fixes-on-recent-kernels.patch
Patch2: %{name}-%{version}-tools-include-blk-mq.h-in-bio-tools.patch
Patch3: %{name}-%{version}-C9S-libpbf-version-fixes.patch
Patch4: %{name}-%{version}-Revert-libbpf-1.0-changes.patch
Patch5: %{name}-%{version}-C9S-Fix-mdflush.patch
Patch6: %{name}-%{version}-biolatency-biolatpcts-biosnoop-biotop-Build-fix-for-.patch
Patch7: %{name}-%{version}-libbpf-tools-Fix-dropped-request-rq_disk-for-kernel-.patch
Patch8: %{name}-%{version}-tools-mdflush-include-blkdev.h-instead-of-genhd.h.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 >= 0.6.0, libbpf-static >= 0.6.0
Requires: libbpf >= 0.6.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
* Tue Aug 23 2022 Jerome Marchand <jmarchan@redhat.com> - 0.24.1-4
- Fix mdflush tool (rhbz#2108001)
* Fri Jul 01 2022 Jerome Marchand <jmarchan@redhat.com> - 0.24.1-3
- Rebuild for libbpf 0.6.0
* Wed May 18 2022 Jerome Marchand <jmarchan@redhat.com> - 0.24.1-2
- Rebuild (previous build failed with UNKNOWN_KOJI_ERROR)
* Thu Mar 24 2022 Jerome Marchand <jmarchan@redhat.com> - 0.24.0-1
- Rebase to v0.24.0
- Fix cmake build
* Fri Feb 25 2022 Jerome Marchand <jmarchan@redhat.com> - 0.20.0-10
- Remove deprecated python_provides macro (needed for gating)
* Thu Feb 24 2022 Jerome Marchand <jmarchan@redhat.com> - 0.20.0-9
- Fix bio tools (rhbz#2039595)
* Mon Nov 22 2021 Jerome Marchand <jmarchan@redhat.com> - 0.20.0-8
- Rebuild for LLVM 13
* Thu Oct 14 2021 Jerome Marchand <jmarchan@redhat.com> - 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 <mboddu@redhat.com> - 0.20.0-6
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Tue Aug 03 2021 Jerome Marchand <jmarchan@redhat.com> - 0.20.0-5
- Add gating
* Mon Jul 26 2021 Jerome Marchand <jmarchan@redhat.com> - 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 <jmarchan@redhat.com> - 0.20.0-3
- Don't ignore LDFLAGS for libbpf-tools
* Wed Jun 02 2021 Jerome Marchand <jmarchan@redhat.com> - 0.20.0-2
- Don't override cflags for libbpf-tools
* Thu May 27 2021 Jerome Marchand <jmarchan@redhat.com> - 0.20.0-1
- Rebase to bcc 0.20.0
* Thu May 13 2021 Tom Stellard <tstellar@redhat.com> - 0.18.0-6
- Rebuild for LLVM 12
* Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com> - 0.18.0-5
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Thu Feb 18 2021 Jerome Marchand <jmarchan@redhat.com> - 0.18.0-4
- Disable lua for RHEL
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.18.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Fri Jan 22 2021 Tom Stellard <tstellar@redhat.com> - 0.18.0-2
- Rebuild for clang-11.1.0
* Tue Jan 5 15:08:26 CET 2021 Rafael dos Santos <rdossant@redhat.com> - 0.18.0-1
- Rebase to latest upstream (#1912875)
* Fri Oct 30 11:25:46 CET 2020 Rafael dos Santos <rdossant@redhat.com> - 0.17.0-1
- Rebase to latest upstream (#1871417)
* Mon Oct 12 2020 Jerome Marchand <jmarchan@redhat.com> - 0.16.0.3
- Rebuild for LLVM 11.0.0-rc6
* Fri Aug 28 2020 Rafael dos Santos <rdossant@redhat.com> - 0.16.0-2
- Enable build for armv7hl
* Sun Aug 23 2020 Rafael dos Santos <rdossant@redhat.com> - 0.16.0-1
- Rebase to latest upstream (#1871417)
* Tue Aug 04 2020 Rafael dos Santos <rdossant@redhat.com> - 0.15.0-6
- Fix build with cmake (#1863243)
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.15.0-5
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.15.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Thu Jul 09 2020 Tom Stellard <tstellar@redhat.com> - 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 <rdossant@redhat.com> - 0.15.0-2
- Reinstate a function needed by bpftrace
* Tue Jun 23 2020 Rafael dos Santos <rdossant@redhat.com> - 0.15.0-1
- Rebase to latest upstream version (#1849239)
* Tue May 26 2020 Miro Hrončok <mhroncok@redhat.com> - 0.14.0-2
- Rebuilt for Python 3.9
* Tue Apr 21 2020 Rafael dos Santos <rdossant@redhat.com> - 0.14.0-1
- Rebase to latest upstream version (#1826281)
* Wed Feb 26 2020 Rafael dos Santos <rdossant@redhat.com> - 0.13.0-1
- Rebase to latest upstream version (#1805072)
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.12.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Mon Jan 06 2020 Tom Stellard <tstellar@redhat.com> - 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 <rdossant@redhat.com> - 0.12.0-1
- Rebase to latest upstream version (#1758417)
* Thu Dec 05 2019 Jiri Olsa <jolsa@redhat.com> - 0.11.0-2
- Add libbpf support
* Fri Oct 04 2019 Rafael dos Santos <rdossant@redhat.com> - 0.11.0-1
- Rebase to latest upstream version (#1758417)
* Thu Oct 03 2019 Miro Hrončok <mhroncok@redhat.com> - 0.10.0-4
- Rebuilt for Python 3.8.0rc1 (#1748018)
* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 0.10.0-3
- Rebuilt for Python 3.8
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.10.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Wed May 29 2019 Rafael dos Santos <rdossant@redhat.com> - 0.10.0-1
- Rebase to latest upstream version (#1714902)
* Thu Apr 25 2019 Rafael dos Santos <rdossant@redhat.com> - 0.9.0-1
- Rebase to latest upstream version (#1686626)
- Rename libbpf header to libbcc_bpf
* Mon Apr 22 2019 Neal Gompa <ngompa@datto.com> - 0.8.0-5
- Make the Python 3 bindings package noarch
- Small cleanups to the spec
* Tue Mar 19 2019 Rafael dos Santos <rdossant@redhat.com> - 0.8.0-4
- Add s390x support (#1679310)
* Wed Feb 20 2019 Rafael dos Santos <rdossant@redhat.com> - 0.8.0-3
- Add aarch64 support (#1679310)
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.8.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Thu Jan 17 2019 Rafael dos Santos <rdossant@redhat.com> - 0.8.0-1
- Rebase to new released version
* Thu Nov 01 2018 Rafael dos Santos <rdossant@redhat.com> - 0.7.0-4
- Fix attaching to usdt probes (#1634684)
* Mon Oct 22 2018 Rafael dos Santos <rdossant@redhat.com> - 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 <rdossant@redhat.com> - 0.7.0-2
- Fix str/bytes conversion in uflow (#1636293)
* Tue Sep 25 2018 Rafael Fonseca <r4f4rfs@gmail.com> - 0.7.0-1
- Rebase to new released version
* Wed Aug 22 2018 Rafael Fonseca <r4f4rfs@gmail.com> - 0.6.1-2
- Fix typo when mangling shebangs.
* Thu Aug 16 2018 Rafael Fonseca <r4f4rfs@gmail.com> - 0.6.1-1
- Rebase to new released version (#1609485)
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Tue Jun 19 2018 Miro Hrončok <mhroncok@redhat.com> - 0.6.0-2
- Rebuilt for Python 3.7
* Mon Jun 18 2018 Rafael dos Santos <rdossant@redhat.com> - 0.6.0-1
- Rebase to new released version (#1591989)
* Thu Apr 05 2018 Rafael Santos <rdossant@redhat.com> - 0.5.0-4
- Resolves #1555627 - fix compilation error with latest llvm/clang
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Fri Feb 02 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 0.5.0-2
- Switch to %%ldconfig_scriptlets
* Wed Jan 03 2018 Rafael Santos <rdossant@redhat.com> - 0.5.0-1
- Rebase to new released version
* Thu Nov 16 2017 Rafael Santos <rdossant@redhat.com> - 0.4.0-4
- Resolves #1517408 - avoid conflict with other manpages
* Thu Nov 02 2017 Rafael Santos <rdossant@redhat.com> - 0.4.0-3
- Use weak deps to not require lua subpkg on ppc64(le)
* Wed Nov 01 2017 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 0.4.0-2
- Rebuild for LLVM5
* Wed Nov 01 2017 Rafael Fonseca <rdossant@redhat.com> - 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 <releng@fedoraproject.org> - 0.3.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.3.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Thu Mar 30 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.3.0-2
- Rebuild for LLVM4
- Trivial fixes in spec
* Fri Mar 10 2017 Rafael Fonseca <rdossant@redhat.com> - 0.3.0-1
- Rebase to new release.
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.2.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Tue Jan 10 2017 Rafael Fonseca <rdossant@redhat.com> - 0.2.0-2
- Fix typo
* Tue Nov 29 2016 Rafael Fonseca <rdossant@redhat.com> - 0.2.0-1
- Initial import
Loading…
Cancel
Save