* Improvements
* Enhanced xlat styles support configured by -X option.
+ * Enhanced decoding of bpf syscall.
* Enhanced decoding of PTRACE_PEEKUSER and PTRACE_POKEUSER on hppa.
* Wired up kexec_file_load and rseq syscalls on aarch64, arc, metag, nios2,
or1k, riscv, and tile architectures.
uint32_t nr_jited_func_lens;
uint64_t jited_ksyms;
uint64_t jited_func_lens;
+
+ uint32_t func_info_rec_size;
+ uint32_t nr_func_info;
+ uint32_t nr_line_info;
+ uint32_t nr_jited_line_info;
+ uint64_t jited_line_info;
+ uint32_t line_info_rec_size;
+ uint32_t jited_line_info_rec_size;
+ uint32_t nr_prog_tags;
};
static void
saved->jited_ksyms = info.jited_ksyms;
saved->jited_func_lens = info.jited_func_lens;
+ saved->func_info_rec_size = info.func_info_rec_size;
+ saved->nr_func_info = info.nr_func_info;
+ saved->nr_line_info = info.nr_line_info;
+ saved->nr_jited_line_info = info.nr_jited_line_info;
+ saved->jited_line_info = info.jited_line_info;
+ saved->line_info_rec_size = info.line_info_rec_size;
+ saved->jited_line_info_rec_size = info.jited_line_info_rec_size;
+ saved->nr_prog_tags = info.nr_prog_tags;
+
return;
}
}
printaddr64(info.jited_func_lens);
+ /*
+ * The next twelve fields were introduced by Linux commits
+ * v5.0-rc1~129^2~209^2~16^2~8
+ * v5.0-rc1~129^2~114^2~5^2~6
+ * v5.0-rc1~129^2~114^2^2~2
+ * v5.0-rc1~129^2~15^2~22
+ */
+ if (len <= offsetof(struct bpf_prog_info_struct, btf_id))
+ goto print_bpf_prog_info_end;
+
+ PRINT_FIELD_U(", ", info, btf_id);
+
+ tprints(", func_info_rec_size=");
+ if (saved->func_info_rec_size != info.func_info_rec_size)
+ tprintf("%" PRIu32 " => ", saved->func_info_rec_size);
+ tprintf("%" PRIu32, info.func_info_rec_size);
+
+ PRINT_FIELD_ADDR64(", ", info, func_info);
+
+ tprints(", nr_func_info=");
+ if (saved->nr_func_info != info.nr_func_info)
+ tprintf("%" PRIu32 " => ", saved->nr_func_info);
+ tprintf("%" PRIu32, info.nr_func_info);
+
+ tprints(", nr_line_info=");
+ if (saved->nr_line_info != info.nr_line_info)
+ tprintf("%" PRIu32 " => ", saved->nr_line_info);
+ tprintf("%" PRIu32, info.nr_line_info);
+
+ PRINT_FIELD_ADDR64(", ", info, line_info);
+
+ tprints(", jited_line_info=");
+ if (saved->jited_line_info != info.jited_line_info) {
+ printaddr64(saved->jited_line_info);
+ tprints(" => ");
+ }
+ printaddr64(info.jited_line_info);
+
+ tprints(", nr_jited_line_info=");
+ if (saved->nr_jited_line_info != info.nr_jited_line_info)
+ tprintf("%" PRIu32 " => ", saved->nr_jited_line_info);
+ tprintf("%" PRIu32, info.nr_jited_line_info);
+
+ tprints(", line_info_rec_size=");
+ if (saved->line_info_rec_size != info.line_info_rec_size)
+ tprintf("%" PRIu32 " => ", saved->line_info_rec_size);
+ tprintf("%" PRIu32, info.line_info_rec_size);
+
+ tprints(", jited_line_info_rec_size=");
+ if (saved->jited_line_info_rec_size != info.jited_line_info_rec_size)
+ tprintf("%" PRIu32 " => ", saved->jited_line_info_rec_size);
+ tprintf("%" PRIu32, info.jited_line_info_rec_size);
+
+ tprints(", nr_prog_tags=");
+ if (saved->nr_prog_tags != info.nr_prog_tags)
+ tprintf("%" PRIu32 " => ", saved->nr_prog_tags);
+ tprintf("%" PRIu32, info.nr_prog_tags);
+
+ PRINT_FIELD_ADDR64(", ", info, prog_tags);
+
decode_attr_extra_data(tcp, info_buf, size, bpf_prog_info_struct_size);
print_bpf_prog_info_end:
uint32_t nr_jited_func_lens;
uint64_t ATTRIBUTE_ALIGNED(8) jited_ksyms;
uint64_t ATTRIBUTE_ALIGNED(8) jited_func_lens;
+ uint32_t btf_id;
+ uint32_t func_info_rec_size;
+ uint64_t ATTRIBUTE_ALIGNED(8) func_info;
+ uint32_t nr_func_info;
+ uint32_t nr_line_info;
+ uint64_t ATTRIBUTE_ALIGNED(8) line_info;
+ uint64_t ATTRIBUTE_ALIGNED(8) jited_line_info;
+ uint32_t nr_jited_line_info;
+ uint32_t line_info_rec_size;
+ uint32_t jited_line_info_rec_size;
+ uint32_t nr_prog_tags;
+ uint64_t ATTRIBUTE_ALIGNED(8) prog_tags;
};
# define bpf_prog_info_struct_size \
sizeof(struct bpf_prog_info_struct)
-# define expected_bpf_prog_info_struct_size 128
+# define expected_bpf_prog_info_struct_size 192
#endif /* !STRACE_BPF_ATTR_H */
prog_info->jited_prog_len = 0;
prog_info->nr_jited_ksyms = 0;
prog_info->nr_jited_func_lens = 0;
+ prog_info->func_info_rec_size = 0;
+ prog_info->nr_func_info = 0;
+ prog_info->nr_line_info = 0;
+ prog_info->nr_jited_line_info = 0;
+ prog_info->jited_line_info = 0;
+ prog_info->line_info_rec_size = 0;
+ prog_info->jited_line_info_rec_size = 0;
+ prog_info->nr_prog_tags = 0;
memset(prog_info + 1, 0, PROG_INFO_SZ - sizeof(*prog_info));
switch (i) {
case 1:
offsetof(struct bpf_prog_info_struct, jited_func_lens))
printf(", jited_func_lens=NULL");
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, btf_id))
+ PRINT_FIELD_U(", ", *prog_info, btf_id);
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, func_info_rec_size)) {
+ printf(", func_info_rec_size=0");
+ if (prog_info->func_info_rec_size)
+ printf(" => %u", prog_info->func_info_rec_size);
+ }
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, func_info))
+ printf(", func_info=NULL");
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, nr_func_info)) {
+ printf(", nr_func_info=0");
+ if (prog_info->nr_func_info)
+ printf(" => %u", prog_info->nr_func_info);
+ }
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, nr_line_info)) {
+ printf(", nr_line_info=0");
+ if (prog_info->nr_line_info)
+ printf(" => %u", prog_info->nr_line_info);
+ }
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, line_info))
+ printf(", line_info=NULL");
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, jited_line_info))
+ printf(", jited_line_info=NULL");
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, nr_jited_line_info)) {
+ printf(", nr_jited_line_info=0");
+ if (prog_info->nr_jited_line_info)
+ printf(" => %u", prog_info->nr_jited_line_info);
+ }
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, line_info_rec_size)) {
+ printf(", line_info_rec_size=0");
+ if (prog_info->line_info_rec_size)
+ printf(" => %u", prog_info->line_info_rec_size);
+ }
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, jited_line_info_rec_size)) {
+ printf(", jited_line_info_rec_size=0");
+ if (prog_info->jited_line_info_rec_size)
+ printf(" => %u", prog_info->jited_line_info_rec_size);
+ }
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, nr_prog_tags)) {
+ printf(", nr_prog_tags=0");
+ if (prog_info->nr_prog_tags)
+ printf(" => %u", prog_info->nr_prog_tags);
+ }
+ if (bpf_prog_get_info_attr.info_len >
+ offsetof(struct bpf_prog_info_struct, prog_tags))
+ printf(", prog_tags=NULL");
+
printf("}");
# else /* !VERBOSE */
printf("%p", prog_info);