[PATCH bpf-next 0/3] libbpf: support loading/storing any BTF endianness

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux