On Mon, 19 Jul 2021, Naresh Kamboju wrote:
On Thu, 15 Jul 2021 at 20:46, Alan Maguire alan.maguire@oracle.com wrote:
Add a BTF dumper for typed data, so that the user can dump a typed version of the data provided.
<trim>
diff --git a/tools/lib/bpf/btf_dump.c b/tools/lib/bpf/btf_dump.c index 5dc6b517..929cf93 100644 --- a/tools/lib/bpf/btf_dump.c +++ b/tools/lib/bpf/btf_dump.c
Following perf build errors noticed on i386 and arm 32-bit architectures on linux next 20210719 tag with gcc-11.
metadata:
git_repo: https://gitlab.com/Linaro/lkft/mirrors/next/linux-next git_short_log: 08076eab6fef ( Add linux-next specific files for 20210719 ) toolchain: gcc-11 target_arch: arm and i386
+static void btf_dump_int128(struct btf_dump *d,
const struct btf_type *t,
const void *data)
+{
__int128 num = *(__int128 *)data;
btf_dump.c: In function 'btf_dump_int128': btf_dump.c:1559:9: error: expected expression before '__int128' 1559 | __int128 num = *(__int128 *)data; | ^~~~~~~~ btf_dump.c:1561:14: error: 'num' undeclared (first use in this function) 1561 | if ((num >> 64) == 0) | ^~~ btf_dump.c:1561:14: note: each undeclared identifier is reported only once for each function it appears in btf_dump.c: At top level: btf_dump.c:1568:17: error: '__int128' is not supported on this target 1568 | static unsigned __int128 btf_dump_bitfield_get_data(struct btf_dump *d, | ^~~~~~~~ btf_dump.c: In function 'btf_dump_bitfield_get_data': btf_dump.c:1576:18: error: '__int128' is not supported on this target 1576 | unsigned __int128 num = 0, ret; | ^~~~~~~~ btf_dump.c: In function 'btf_dump_bitfield_check_zero': btf_dump.c:1608:9: error: expected expression before '__int128' 1608 | __int128 check_num; | ^~~~~~~~ btf_dump.c:1610:9: error: 'check_num' undeclared (first use in this function) 1610 | check_num = btf_dump_bitfield_get_data(d, t, data, bits_offset, bit_sz); | ^~~~~~~~~ btf_dump.c: In function 'btf_dump_bitfield_data': btf_dump.c:1622:18: error: '__int128' is not supported on this target 1622 | unsigned __int128 print_num; | ^~~~~~~~ btf_dump.c: In function 'btf_dump_dump_type_data': btf_dump.c:2212:34: error: '__int128' is not supported on this target 2212 | unsigned __int128 print_num; | ^~~~~~~~
Thanks for the report Naresh! Andrii, I'm thinking the best approach might be to remove use of int128 and have the bitfield computations operate on a __u64 representation instead. With that change, we would only lose the ability to handle int128 bitfields; what do you think? I hope to have something ready shortly covering that, the non-propogation of return values and the endianness issues with enum handling - in fact the latter goes away if the bitfield computations are done for 64-bit values.
Thanks!
Alan