Add support for loading and storing BTF in either little- or big-endian integer encodings, regardless of host endianness. This allows users of libbpf to not care about endianness when they don't want to and transparently open/load BTF of any endianness. libbpf will preserve original endianness and will convert output raw data as necessary back to original endianness, if necessary. This allows tools like pahole to be ignorant to such issues during cross-compilation. While working with BTF data in memory, the endianness is always native to the host. Convetion can happen only during btf__get_raw_data() call, and only in a raw data copy. Additionally, it's possible to force output BTF endianness through new btf__set_endianness() API. This which allows to create flexible tools doing arbitrary conversions of BTF endianness, just by relying on libbpf. Cc: Arnaldo Carvalho de Melo <arnaldo.melo@xxxxxxxxx> Cc: Tony Ambardar <tony.ambardar@xxxxxxxxx> Cc: Ilya Leoshkevich <iii@xxxxxxxxxxxxx> Cc: Luka Perkov <luka.perkov@xxxxxxxxxx> Andrii Nakryiko (3): selftests/bpf: move and extend ASSERT_xxx() testing macros libbpf: support BTF loading and raw data output in both endianness selftests/bpf: test BTF's handling of endianness tools/lib/bpf/btf.c | 310 ++++++++++++++---- tools/lib/bpf/btf.h | 7 + tools/lib/bpf/libbpf.map | 2 + .../selftests/bpf/prog_tests/btf_endian.c | 101 ++++++ .../selftests/bpf/prog_tests/btf_write.c | 34 -- tools/testing/selftests/bpf/test_progs.h | 63 ++++ 6 files changed, 419 insertions(+), 98 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/btf_endian.c -- 2.24.1