summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Chaignon <paul@isovalent.com>2021-12-30 12:00:00 +0100
committerDmitry V. Levin <ldv@strace.io>2021-12-30 11:00:00 +0000
commit619dc546f9e96ea4f213256f19f51c1f669f0f5c (patch)
tree33be99f42ed9cefca76cdc5477ec00b42e2ff1ac
parent107b0d645b15f440fe49194d1d24594cd7444a3d (diff)
downloadstrace-619dc546f9e96ea4f213256f19f51c1f669f0f5c.tar.gz
bpf: add support for new fields in struct bpf_prog_info
* src/bpf_attr.h (struct bpf_prog_info_struct): Add recursion_misses and verified_insns fields. (expected_bpf_prog_info_struct_size): Update. * src/bpf.c (print_bpf_prog_info): Decode recursion_misses and verified_insns fields introduced by Linux kernel commits v5.12-rc1~200^2~28^2~28 and v5.16-rc1~159^2~2^2~43^2~1. * tests/bpf-obj_get_info_by_fd.c (main): Update expected output. Signed-off-by: Paul Chaignon <paul@isovalent.com>
-rw-r--r--src/bpf.c20
-rw-r--r--src/bpf_attr.h6
-rw-r--r--tests/bpf-obj_get_info_by_fd.c7
3 files changed, 31 insertions, 2 deletions
diff --git a/src/bpf.c b/src/bpf.c
index d1ac17f0a..801968048 100644
--- a/src/bpf.c
+++ b/src/bpf.c
@@ -923,6 +923,26 @@ print_bpf_prog_info(struct tcb * const tcp, uint32_t bpf_fd,
tprint_struct_next();
PRINT_FIELD_U(info, run_cnt);
+ /*
+ * The following field was introduced by Linux commit
+ * v5.12-rc1~200^2~28^2~28.
+ */
+ if (len <= offsetof(struct bpf_prog_info_struct, recursion_misses))
+ goto print_bpf_prog_info_end;
+
+ tprint_struct_next();
+ PRINT_FIELD_U64(info, recursion_misses);
+
+ /*
+ * The following field was introduced by Linux commit
+ * v5.16-rc1~159^2~2^2~43^2~1.
+ */
+ if (len <= offsetof(struct bpf_prog_info_struct, verified_insns))
+ goto print_bpf_prog_info_end;
+
+ tprint_struct_next();
+ PRINT_FIELD_U(info, verified_insns);
+
decode_attr_extra_data(tcp, info_buf, size, bpf_prog_info_struct_size);
print_bpf_prog_info_end:
diff --git a/src/bpf_attr.h b/src/bpf_attr.h
index ca686c6cc..80b5cb457 100644
--- a/src/bpf_attr.h
+++ b/src/bpf_attr.h
@@ -362,11 +362,13 @@ struct bpf_prog_info_struct {
uint64_t ATTRIBUTE_ALIGNED(8) prog_tags;
uint64_t ATTRIBUTE_ALIGNED(8) run_time_ns;
uint64_t ATTRIBUTE_ALIGNED(8) run_cnt;
+ uint64_t ATTRIBUTE_ALIGNED(8) recursion_misses;
+ uint32_t verified_insns;
};
# define bpf_prog_info_struct_size \
- sizeof(struct bpf_prog_info_struct)
-# define expected_bpf_prog_info_struct_size 208
+ offsetofend(struct bpf_prog_info_struct, verified_insns)
+# define expected_bpf_prog_info_struct_size 220
struct BPF_MAP_LOOKUP_BATCH_struct /* batch */ {
uint64_t ATTRIBUTE_ALIGNED(8) in_batch;
diff --git a/tests/bpf-obj_get_info_by_fd.c b/tests/bpf-obj_get_info_by_fd.c
index 95392cd53..71b13b91f 100644
--- a/tests/bpf-obj_get_info_by_fd.c
+++ b/tests/bpf-obj_get_info_by_fd.c
@@ -705,6 +705,13 @@ main(int ac, char **av)
offsetof(struct bpf_prog_info_struct, run_cnt))
printf(", run_cnt=%llu",
(unsigned long long) prog_info->run_cnt);
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, recursion_misses))
+ printf(", recursion_misses=%llu",
+ (unsigned long long) prog_info->recursion_misses);
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, verified_insns))
+ printf(", verified_insns=%u", prog_info->verified_insns);
printf("}");
# else /* !VERBOSE */