Patch set implements logic in libbpf to auto-adjust memory size (1-, 2-, 4-, 8-bytes) of load/store (LD/ST/STX) instructions which have BPF CO-RE field offset relocation associated with it. In practice this means transparent handling of 32-bit kernels, both pointer and unsigned integers. Signed integers are not relocatable with zero-extending loads/stores, so libbpf poisons them and generates a warning. If/when BPF gets support for sign-extending loads/stores, it would be possible to automatically relocate them as well. All the details are contained in patch #1 comments and commit message. Patch #2 is a simple change in libbpf to make advanced testing with custom BTF easier. Patch #3 validates correct uses of auto-resizable loads, as well as check that libbpf fails invalid uses. I'd really appreciate folks that use BPF on 32-bit architectures to test this out with their BPF programs and report if there are any problems with the approach. Cc: Luka Perkov <luka.perkov@xxxxxxxxxx> Cc: Tony Ambardar <tony.ambardar@xxxxxxxxx> Andrii Nakryiko (3): libbpf: support safe subset of load/store instruction resizing with CO-RE libbpf: allow specifying both ELF and raw BTF for CO-RE BTF override selftests/bpf: validate libbpf's auto-sizing of LD/ST/STX instructions tools/lib/bpf/libbpf.c | 146 ++++++++++++- .../selftests/bpf/prog_tests/core_autosize.c | 199 ++++++++++++++++++ .../selftests/bpf/progs/test_core_autosize.c | 148 +++++++++++++ 3 files changed, 483 insertions(+), 10 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/core_autosize.c create mode 100644 tools/testing/selftests/bpf/progs/test_core_autosize.c -- 2.24.1