|
|
b484ca |
From 940fe50f5a72d2624b217ccaf720b05f06a4dd90 Mon Sep 17 00:00:00 2001
|
|
|
b484ca |
From: "Dmitry V. Levin" <ldv@altlinux.org>
|
|
|
b484ca |
Date: Tue, 12 Mar 2019 11:17:20 +0000
|
|
|
b484ca |
Subject: [PATCH] bpf: add support for new twelve fields in struct
|
|
|
b484ca |
bpf_prog_info
|
|
|
b484ca |
|
|
|
b484ca |
* bpf_attr.h (struct bpf_prog_info_struct): Add btf_id,
|
|
|
b484ca |
func_info_rec_size, func_info, nr_func_info, nr_line_info, line_info,
|
|
|
b484ca |
jited_line_info, nr_jited_line_info, line_info_rec_size,
|
|
|
b484ca |
jited_line_info_rec_size, nr_prog_tags, and prog_tags fields.
|
|
|
b484ca |
* bpf.c (struct obj_get_info_saved): Add func_info_rec_size,
|
|
|
b484ca |
nr_func_info, nr_line_info, jited_line_info, nr_jited_line_info,
|
|
|
b484ca |
line_info_rec_size, jited_line_info_rec_size, and nr_prog_tags fields.
|
|
|
b484ca |
(print_bpf_prog_info): Decode the twelve fields introduced by Linux
|
|
|
b484ca |
commits v5.0-rc1~129^2~209^2~16^2~8, v5.0-rc1~129^2~114^2~5^2~6,
|
|
|
b484ca |
v5.0-rc1~129^2~114^2^2~2, and v5.0-rc1~129^2~15^2~22.
|
|
|
b484ca |
* NEWS: Mention the latest bpf decoding enhancements.
|
|
|
b484ca |
* tests/bpf-obj_get_info_by_fd.c (main): Update expected output.
|
|
|
b484ca |
|
|
|
b484ca |
Resolves: https://github.com/strace/strace/issues/94
|
|
|
b484ca |
---
|
|
|
b484ca |
NEWS | 1 +
|
|
|
b484ca |
bpf.c | 78 ++++++++++++++++++++++++++++++++++++++++++
|
|
|
b484ca |
bpf_attr.h | 14 +++++++-
|
|
|
b484ca |
tests/bpf-obj_get_info_by_fd.c | 66 +++++++++++++++++++++++++++++++++++
|
|
|
b484ca |
4 files changed, 158 insertions(+), 1 deletion(-)
|
|
|
b484ca |
|
|
|
b484ca |
Index: strace-4.24/bpf.c
|
|
|
b484ca |
===================================================================
|
|
|
b484ca |
--- strace-4.24.orig/bpf.c 2020-01-28 00:16:27.823183735 +0100
|
|
|
b484ca |
+++ strace-4.24/bpf.c 2020-01-28 00:16:43.588035268 +0100
|
|
|
b484ca |
@@ -432,6 +432,15 @@
|
|
|
b484ca |
uint32_t nr_jited_func_lens;
|
|
|
b484ca |
uint64_t jited_ksyms;
|
|
|
b484ca |
uint64_t jited_func_lens;
|
|
|
b484ca |
+
|
|
|
b484ca |
+ uint32_t func_info_rec_size;
|
|
|
b484ca |
+ uint32_t nr_func_info;
|
|
|
b484ca |
+ uint32_t nr_line_info;
|
|
|
b484ca |
+ uint32_t nr_jited_line_info;
|
|
|
b484ca |
+ uint64_t jited_line_info;
|
|
|
b484ca |
+ uint32_t line_info_rec_size;
|
|
|
b484ca |
+ uint32_t jited_line_info_rec_size;
|
|
|
b484ca |
+ uint32_t nr_prog_tags;
|
|
|
b484ca |
};
|
|
|
b484ca |
|
|
|
b484ca |
static void
|
|
|
b484ca |
@@ -507,6 +516,15 @@
|
|
|
b484ca |
saved->jited_ksyms = info.jited_ksyms;
|
|
|
b484ca |
saved->jited_func_lens = info.jited_func_lens;
|
|
|
b484ca |
|
|
|
b484ca |
+ saved->func_info_rec_size = info.func_info_rec_size;
|
|
|
b484ca |
+ saved->nr_func_info = info.nr_func_info;
|
|
|
b484ca |
+ saved->nr_line_info = info.nr_line_info;
|
|
|
b484ca |
+ saved->nr_jited_line_info = info.nr_jited_line_info;
|
|
|
b484ca |
+ saved->jited_line_info = info.jited_line_info;
|
|
|
b484ca |
+ saved->line_info_rec_size = info.line_info_rec_size;
|
|
|
b484ca |
+ saved->jited_line_info_rec_size = info.jited_line_info_rec_size;
|
|
|
b484ca |
+ saved->nr_prog_tags = info.nr_prog_tags;
|
|
|
b484ca |
+
|
|
|
b484ca |
return;
|
|
|
b484ca |
}
|
|
|
b484ca |
|
|
|
b484ca |
@@ -599,6 +617,66 @@
|
|
|
b484ca |
}
|
|
|
b484ca |
printaddr64(info.jited_func_lens);
|
|
|
b484ca |
|
|
|
b484ca |
+ /*
|
|
|
b484ca |
+ * The next twelve fields were introduced by Linux commits
|
|
|
b484ca |
+ * v5.0-rc1~129^2~209^2~16^2~8
|
|
|
b484ca |
+ * v5.0-rc1~129^2~114^2~5^2~6
|
|
|
b484ca |
+ * v5.0-rc1~129^2~114^2^2~2
|
|
|
b484ca |
+ * v5.0-rc1~129^2~15^2~22
|
|
|
b484ca |
+ */
|
|
|
b484ca |
+ if (len <= offsetof(struct bpf_prog_info_struct, btf_id))
|
|
|
b484ca |
+ goto print_bpf_prog_info_end;
|
|
|
b484ca |
+
|
|
|
b484ca |
+ PRINT_FIELD_U(", ", info, btf_id);
|
|
|
b484ca |
+
|
|
|
b484ca |
+ tprints(", func_info_rec_size=");
|
|
|
b484ca |
+ if (saved->func_info_rec_size != info.func_info_rec_size)
|
|
|
b484ca |
+ tprintf("%" PRIu32 " => ", saved->func_info_rec_size);
|
|
|
b484ca |
+ tprintf("%" PRIu32, info.func_info_rec_size);
|
|
|
b484ca |
+
|
|
|
b484ca |
+ PRINT_FIELD_ADDR64(", ", info, func_info);
|
|
|
b484ca |
+
|
|
|
b484ca |
+ tprints(", nr_func_info=");
|
|
|
b484ca |
+ if (saved->nr_func_info != info.nr_func_info)
|
|
|
b484ca |
+ tprintf("%" PRIu32 " => ", saved->nr_func_info);
|
|
|
b484ca |
+ tprintf("%" PRIu32, info.nr_func_info);
|
|
|
b484ca |
+
|
|
|
b484ca |
+ tprints(", nr_line_info=");
|
|
|
b484ca |
+ if (saved->nr_line_info != info.nr_line_info)
|
|
|
b484ca |
+ tprintf("%" PRIu32 " => ", saved->nr_line_info);
|
|
|
b484ca |
+ tprintf("%" PRIu32, info.nr_line_info);
|
|
|
b484ca |
+
|
|
|
b484ca |
+ PRINT_FIELD_ADDR64(", ", info, line_info);
|
|
|
b484ca |
+
|
|
|
b484ca |
+ tprints(", jited_line_info=");
|
|
|
b484ca |
+ if (saved->jited_line_info != info.jited_line_info) {
|
|
|
b484ca |
+ printaddr64(saved->jited_line_info);
|
|
|
b484ca |
+ tprints(" => ");
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ printaddr64(info.jited_line_info);
|
|
|
b484ca |
+
|
|
|
b484ca |
+ tprints(", nr_jited_line_info=");
|
|
|
b484ca |
+ if (saved->nr_jited_line_info != info.nr_jited_line_info)
|
|
|
b484ca |
+ tprintf("%" PRIu32 " => ", saved->nr_jited_line_info);
|
|
|
b484ca |
+ tprintf("%" PRIu32, info.nr_jited_line_info);
|
|
|
b484ca |
+
|
|
|
b484ca |
+ tprints(", line_info_rec_size=");
|
|
|
b484ca |
+ if (saved->line_info_rec_size != info.line_info_rec_size)
|
|
|
b484ca |
+ tprintf("%" PRIu32 " => ", saved->line_info_rec_size);
|
|
|
b484ca |
+ tprintf("%" PRIu32, info.line_info_rec_size);
|
|
|
b484ca |
+
|
|
|
b484ca |
+ tprints(", jited_line_info_rec_size=");
|
|
|
b484ca |
+ if (saved->jited_line_info_rec_size != info.jited_line_info_rec_size)
|
|
|
b484ca |
+ tprintf("%" PRIu32 " => ", saved->jited_line_info_rec_size);
|
|
|
b484ca |
+ tprintf("%" PRIu32, info.jited_line_info_rec_size);
|
|
|
b484ca |
+
|
|
|
b484ca |
+ tprints(", nr_prog_tags=");
|
|
|
b484ca |
+ if (saved->nr_prog_tags != info.nr_prog_tags)
|
|
|
b484ca |
+ tprintf("%" PRIu32 " => ", saved->nr_prog_tags);
|
|
|
b484ca |
+ tprintf("%" PRIu32, info.nr_prog_tags);
|
|
|
b484ca |
+
|
|
|
b484ca |
+ PRINT_FIELD_ADDR64(", ", info, prog_tags);
|
|
|
b484ca |
+
|
|
|
b484ca |
decode_attr_extra_data(tcp, info_buf, size, bpf_prog_info_struct_size);
|
|
|
b484ca |
|
|
|
b484ca |
print_bpf_prog_info_end:
|
|
|
b484ca |
Index: strace-4.24/bpf_attr.h
|
|
|
b484ca |
===================================================================
|
|
|
b484ca |
--- strace-4.24.orig/bpf_attr.h 2020-01-28 00:16:27.823183735 +0100
|
|
|
b484ca |
+++ strace-4.24/bpf_attr.h 2020-01-28 00:16:43.588035268 +0100
|
|
|
b484ca |
@@ -276,10 +276,22 @@
|
|
|
b484ca |
uint32_t nr_jited_func_lens;
|
|
|
b484ca |
uint64_t ATTRIBUTE_ALIGNED(8) jited_ksyms;
|
|
|
b484ca |
uint64_t ATTRIBUTE_ALIGNED(8) jited_func_lens;
|
|
|
b484ca |
+ uint32_t btf_id;
|
|
|
b484ca |
+ uint32_t func_info_rec_size;
|
|
|
b484ca |
+ uint64_t ATTRIBUTE_ALIGNED(8) func_info;
|
|
|
b484ca |
+ uint32_t nr_func_info;
|
|
|
b484ca |
+ uint32_t nr_line_info;
|
|
|
b484ca |
+ uint64_t ATTRIBUTE_ALIGNED(8) line_info;
|
|
|
b484ca |
+ uint64_t ATTRIBUTE_ALIGNED(8) jited_line_info;
|
|
|
b484ca |
+ uint32_t nr_jited_line_info;
|
|
|
b484ca |
+ uint32_t line_info_rec_size;
|
|
|
b484ca |
+ uint32_t jited_line_info_rec_size;
|
|
|
b484ca |
+ uint32_t nr_prog_tags;
|
|
|
b484ca |
+ uint64_t ATTRIBUTE_ALIGNED(8) prog_tags;
|
|
|
b484ca |
};
|
|
|
b484ca |
|
|
|
b484ca |
# define bpf_prog_info_struct_size \
|
|
|
b484ca |
sizeof(struct bpf_prog_info_struct)
|
|
|
b484ca |
-# define expected_bpf_prog_info_struct_size 128
|
|
|
b484ca |
+# define expected_bpf_prog_info_struct_size 192
|
|
|
b484ca |
|
|
|
b484ca |
#endif /* !STRACE_BPF_ATTR_H */
|
|
|
b484ca |
Index: strace-4.24/tests/bpf-obj_get_info_by_fd.c
|
|
|
b484ca |
===================================================================
|
|
|
b484ca |
--- strace-4.24.orig/tests/bpf-obj_get_info_by_fd.c 2020-01-28 00:16:27.823183735 +0100
|
|
|
b484ca |
+++ strace-4.24/tests/bpf-obj_get_info_by_fd.c 2020-01-28 00:16:43.589035258 +0100
|
|
|
b484ca |
@@ -360,6 +360,14 @@
|
|
|
b484ca |
prog_info->jited_prog_len = 0;
|
|
|
b484ca |
prog_info->nr_jited_ksyms = 0;
|
|
|
b484ca |
prog_info->nr_jited_func_lens = 0;
|
|
|
b484ca |
+ prog_info->func_info_rec_size = 0;
|
|
|
b484ca |
+ prog_info->nr_func_info = 0;
|
|
|
b484ca |
+ prog_info->nr_line_info = 0;
|
|
|
b484ca |
+ prog_info->nr_jited_line_info = 0;
|
|
|
b484ca |
+ prog_info->jited_line_info = 0;
|
|
|
b484ca |
+ prog_info->line_info_rec_size = 0;
|
|
|
b484ca |
+ prog_info->jited_line_info_rec_size = 0;
|
|
|
b484ca |
+ prog_info->nr_prog_tags = 0;
|
|
|
b484ca |
memset(prog_info + 1, 0, PROG_INFO_SZ - sizeof(*prog_info));
|
|
|
b484ca |
switch (i) {
|
|
|
b484ca |
case 1:
|
|
|
b484ca |
@@ -506,6 +514,64 @@
|
|
|
b484ca |
offsetof(struct bpf_prog_info_struct, jited_func_lens))
|
|
|
b484ca |
printf(", jited_func_lens=NULL");
|
|
|
b484ca |
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, btf_id))
|
|
|
b484ca |
+ PRINT_FIELD_U(", ", *prog_info, btf_id);
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, func_info_rec_size)) {
|
|
|
b484ca |
+ printf(", func_info_rec_size=0");
|
|
|
b484ca |
+ if (prog_info->func_info_rec_size)
|
|
|
b484ca |
+ printf(" => %u", prog_info->func_info_rec_size);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, func_info))
|
|
|
b484ca |
+ printf(", func_info=NULL");
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, nr_func_info)) {
|
|
|
b484ca |
+ printf(", nr_func_info=0");
|
|
|
b484ca |
+ if (prog_info->nr_func_info)
|
|
|
b484ca |
+ printf(" => %u", prog_info->nr_func_info);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, nr_line_info)) {
|
|
|
b484ca |
+ printf(", nr_line_info=0");
|
|
|
b484ca |
+ if (prog_info->nr_line_info)
|
|
|
b484ca |
+ printf(" => %u", prog_info->nr_line_info);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, line_info))
|
|
|
b484ca |
+ printf(", line_info=NULL");
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, jited_line_info))
|
|
|
b484ca |
+ printf(", jited_line_info=NULL");
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, nr_jited_line_info)) {
|
|
|
b484ca |
+ printf(", nr_jited_line_info=0");
|
|
|
b484ca |
+ if (prog_info->nr_jited_line_info)
|
|
|
b484ca |
+ printf(" => %u", prog_info->nr_jited_line_info);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, line_info_rec_size)) {
|
|
|
b484ca |
+ printf(", line_info_rec_size=0");
|
|
|
b484ca |
+ if (prog_info->line_info_rec_size)
|
|
|
b484ca |
+ printf(" => %u", prog_info->line_info_rec_size);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, jited_line_info_rec_size)) {
|
|
|
b484ca |
+ printf(", jited_line_info_rec_size=0");
|
|
|
b484ca |
+ if (prog_info->jited_line_info_rec_size)
|
|
|
b484ca |
+ printf(" => %u", prog_info->jited_line_info_rec_size);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, nr_prog_tags)) {
|
|
|
b484ca |
+ printf(", nr_prog_tags=0");
|
|
|
b484ca |
+ if (prog_info->nr_prog_tags)
|
|
|
b484ca |
+ printf(" => %u", prog_info->nr_prog_tags);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, prog_tags))
|
|
|
b484ca |
+ printf(", prog_tags=NULL");
|
|
|
b484ca |
+
|
|
|
b484ca |
printf("}");
|
|
|
b484ca |
# else /* !VERBOSE */
|
|
|
b484ca |
printf("%p", prog_info);
|
|
|
b484ca |
Index: strace-4.24/tests-m32/bpf-obj_get_info_by_fd.c
|
|
|
b484ca |
===================================================================
|
|
|
b484ca |
--- strace-4.24.orig/tests-m32/bpf-obj_get_info_by_fd.c 2020-01-28 00:16:37.300094485 +0100
|
|
|
b484ca |
+++ strace-4.24/tests-m32/bpf-obj_get_info_by_fd.c 2020-01-28 00:16:49.360980900 +0100
|
|
|
b484ca |
@@ -360,6 +360,14 @@
|
|
|
b484ca |
prog_info->jited_prog_len = 0;
|
|
|
b484ca |
prog_info->nr_jited_ksyms = 0;
|
|
|
b484ca |
prog_info->nr_jited_func_lens = 0;
|
|
|
b484ca |
+ prog_info->func_info_rec_size = 0;
|
|
|
b484ca |
+ prog_info->nr_func_info = 0;
|
|
|
b484ca |
+ prog_info->nr_line_info = 0;
|
|
|
b484ca |
+ prog_info->nr_jited_line_info = 0;
|
|
|
b484ca |
+ prog_info->jited_line_info = 0;
|
|
|
b484ca |
+ prog_info->line_info_rec_size = 0;
|
|
|
b484ca |
+ prog_info->jited_line_info_rec_size = 0;
|
|
|
b484ca |
+ prog_info->nr_prog_tags = 0;
|
|
|
b484ca |
memset(prog_info + 1, 0, PROG_INFO_SZ - sizeof(*prog_info));
|
|
|
b484ca |
switch (i) {
|
|
|
b484ca |
case 1:
|
|
|
b484ca |
@@ -506,6 +514,64 @@
|
|
|
b484ca |
offsetof(struct bpf_prog_info_struct, jited_func_lens))
|
|
|
b484ca |
printf(", jited_func_lens=NULL");
|
|
|
b484ca |
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, btf_id))
|
|
|
b484ca |
+ PRINT_FIELD_U(", ", *prog_info, btf_id);
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, func_info_rec_size)) {
|
|
|
b484ca |
+ printf(", func_info_rec_size=0");
|
|
|
b484ca |
+ if (prog_info->func_info_rec_size)
|
|
|
b484ca |
+ printf(" => %u", prog_info->func_info_rec_size);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, func_info))
|
|
|
b484ca |
+ printf(", func_info=NULL");
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, nr_func_info)) {
|
|
|
b484ca |
+ printf(", nr_func_info=0");
|
|
|
b484ca |
+ if (prog_info->nr_func_info)
|
|
|
b484ca |
+ printf(" => %u", prog_info->nr_func_info);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, nr_line_info)) {
|
|
|
b484ca |
+ printf(", nr_line_info=0");
|
|
|
b484ca |
+ if (prog_info->nr_line_info)
|
|
|
b484ca |
+ printf(" => %u", prog_info->nr_line_info);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, line_info))
|
|
|
b484ca |
+ printf(", line_info=NULL");
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, jited_line_info))
|
|
|
b484ca |
+ printf(", jited_line_info=NULL");
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, nr_jited_line_info)) {
|
|
|
b484ca |
+ printf(", nr_jited_line_info=0");
|
|
|
b484ca |
+ if (prog_info->nr_jited_line_info)
|
|
|
b484ca |
+ printf(" => %u", prog_info->nr_jited_line_info);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, line_info_rec_size)) {
|
|
|
b484ca |
+ printf(", line_info_rec_size=0");
|
|
|
b484ca |
+ if (prog_info->line_info_rec_size)
|
|
|
b484ca |
+ printf(" => %u", prog_info->line_info_rec_size);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, jited_line_info_rec_size)) {
|
|
|
b484ca |
+ printf(", jited_line_info_rec_size=0");
|
|
|
b484ca |
+ if (prog_info->jited_line_info_rec_size)
|
|
|
b484ca |
+ printf(" => %u", prog_info->jited_line_info_rec_size);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, nr_prog_tags)) {
|
|
|
b484ca |
+ printf(", nr_prog_tags=0");
|
|
|
b484ca |
+ if (prog_info->nr_prog_tags)
|
|
|
b484ca |
+ printf(" => %u", prog_info->nr_prog_tags);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, prog_tags))
|
|
|
b484ca |
+ printf(", prog_tags=NULL");
|
|
|
b484ca |
+
|
|
|
b484ca |
printf("}");
|
|
|
b484ca |
# else /* !VERBOSE */
|
|
|
b484ca |
printf("%p", prog_info);
|
|
|
b484ca |
Index: strace-4.24/tests-mx32/bpf-obj_get_info_by_fd.c
|
|
|
b484ca |
===================================================================
|
|
|
b484ca |
--- strace-4.24.orig/tests-mx32/bpf-obj_get_info_by_fd.c 2020-01-28 00:16:34.082124791 +0100
|
|
|
b484ca |
+++ strace-4.24/tests-mx32/bpf-obj_get_info_by_fd.c 2020-01-28 00:16:51.902956961 +0100
|
|
|
b484ca |
@@ -360,6 +360,14 @@
|
|
|
b484ca |
prog_info->jited_prog_len = 0;
|
|
|
b484ca |
prog_info->nr_jited_ksyms = 0;
|
|
|
b484ca |
prog_info->nr_jited_func_lens = 0;
|
|
|
b484ca |
+ prog_info->func_info_rec_size = 0;
|
|
|
b484ca |
+ prog_info->nr_func_info = 0;
|
|
|
b484ca |
+ prog_info->nr_line_info = 0;
|
|
|
b484ca |
+ prog_info->nr_jited_line_info = 0;
|
|
|
b484ca |
+ prog_info->jited_line_info = 0;
|
|
|
b484ca |
+ prog_info->line_info_rec_size = 0;
|
|
|
b484ca |
+ prog_info->jited_line_info_rec_size = 0;
|
|
|
b484ca |
+ prog_info->nr_prog_tags = 0;
|
|
|
b484ca |
memset(prog_info + 1, 0, PROG_INFO_SZ - sizeof(*prog_info));
|
|
|
b484ca |
switch (i) {
|
|
|
b484ca |
case 1:
|
|
|
b484ca |
@@ -506,6 +514,64 @@
|
|
|
b484ca |
offsetof(struct bpf_prog_info_struct, jited_func_lens))
|
|
|
b484ca |
printf(", jited_func_lens=NULL");
|
|
|
b484ca |
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, btf_id))
|
|
|
b484ca |
+ PRINT_FIELD_U(", ", *prog_info, btf_id);
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, func_info_rec_size)) {
|
|
|
b484ca |
+ printf(", func_info_rec_size=0");
|
|
|
b484ca |
+ if (prog_info->func_info_rec_size)
|
|
|
b484ca |
+ printf(" => %u", prog_info->func_info_rec_size);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, func_info))
|
|
|
b484ca |
+ printf(", func_info=NULL");
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, nr_func_info)) {
|
|
|
b484ca |
+ printf(", nr_func_info=0");
|
|
|
b484ca |
+ if (prog_info->nr_func_info)
|
|
|
b484ca |
+ printf(" => %u", prog_info->nr_func_info);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, nr_line_info)) {
|
|
|
b484ca |
+ printf(", nr_line_info=0");
|
|
|
b484ca |
+ if (prog_info->nr_line_info)
|
|
|
b484ca |
+ printf(" => %u", prog_info->nr_line_info);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, line_info))
|
|
|
b484ca |
+ printf(", line_info=NULL");
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, jited_line_info))
|
|
|
b484ca |
+ printf(", jited_line_info=NULL");
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, nr_jited_line_info)) {
|
|
|
b484ca |
+ printf(", nr_jited_line_info=0");
|
|
|
b484ca |
+ if (prog_info->nr_jited_line_info)
|
|
|
b484ca |
+ printf(" => %u", prog_info->nr_jited_line_info);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, line_info_rec_size)) {
|
|
|
b484ca |
+ printf(", line_info_rec_size=0");
|
|
|
b484ca |
+ if (prog_info->line_info_rec_size)
|
|
|
b484ca |
+ printf(" => %u", prog_info->line_info_rec_size);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, jited_line_info_rec_size)) {
|
|
|
b484ca |
+ printf(", jited_line_info_rec_size=0");
|
|
|
b484ca |
+ if (prog_info->jited_line_info_rec_size)
|
|
|
b484ca |
+ printf(" => %u", prog_info->jited_line_info_rec_size);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, nr_prog_tags)) {
|
|
|
b484ca |
+ printf(", nr_prog_tags=0");
|
|
|
b484ca |
+ if (prog_info->nr_prog_tags)
|
|
|
b484ca |
+ printf(" => %u", prog_info->nr_prog_tags);
|
|
|
b484ca |
+ }
|
|
|
b484ca |
+ if (bpf_prog_get_info_attr.info_len >
|
|
|
b484ca |
+ offsetof(struct bpf_prog_info_struct, prog_tags))
|
|
|
b484ca |
+ printf(", prog_tags=NULL");
|
|
|
b484ca |
+
|
|
|
b484ca |
printf("}");
|
|
|
b484ca |
# else /* !VERBOSE */
|
|
|
b484ca |
printf("%p", prog_info);
|