diff options
author | Paul Chaignon <paul@isovalent.com> | 2021-12-30 12:00:00 +0100 |
---|---|---|
committer | Dmitry V. Levin <ldv@strace.io> | 2021-12-30 11:00:00 +0000 |
commit | 619dc546f9e96ea4f213256f19f51c1f669f0f5c (patch) | |
tree | 33be99f42ed9cefca76cdc5477ec00b42e2ff1ac | |
parent | 107b0d645b15f440fe49194d1d24594cd7444a3d (diff) | |
download | strace-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.c | 20 | ||||
-rw-r--r-- | src/bpf_attr.h | 6 | ||||
-rw-r--r-- | tests/bpf-obj_get_info_by_fd.c | 7 |
3 files changed, 31 insertions, 2 deletions
@@ -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 */ |