On Mon, 19 Jul 2021, Naresh Kamboju wrote: > On Thu, 15 Jul 2021 at 20:46, Alan Maguire <alan.maguire@xxxxxxxxxx> 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