On Fri, Apr 2, 2021 at 1:02 AM Christophe Leroy <christophe.leroy@xxxxxxxxxx> wrote: > > > > Le 02/04/2021 à 09:48, Christophe Leroy a écrit : > > Hello, > > > > I'm having hard time cross-building bpf selftests on an x86 for a powerpc target. > > > > [root@PC-server-ldb bpf]# make CROSS_COMPILE=ppc-linux- ARCH=powerpc V=1 > > /root/gen_ldb/linux-powerpc/tools/testing/selftests/bpf/host-tools/sbin/bpftool gen skeleton > > /root/gen_ldb/linux-powerpc/tools/testing/selftests/bpf/atomic_bounds.o > > > /root/gen_ldb/linux-powerpc/tools/testing/selftests/bpf/atomic_bounds.skel.h > > libbpf: elf: endianness mismatch in atomic_bounds. > > Error: failed to open BPF object file: Endian mismatch > > > > [root@PC-server-ldb bpf]# file atomic_bounds.o > > atomic_bounds.o: ELF 64-bit MSB relocatable, eBPF, version 1 (SYSV), with debug_info, not stripped > > > > Seems like the just-built host bpftool doesn't take into account target's endianness. > > > > I see the patch https://github.com/torvalds/linux/commit/313e7f6f ("selftest/bpf: Use -m{little, > > big}-endian for clang") in bpf selftest to enable cross-compilation, but it seems it is not enough. > > > > What should I do to get bpftool work with the target's endianness ? > > bpftool is using bpf_object__open() from libbpf to discover all information (maps, progs, etc) from the given BPF object file. This is needed to generate BPF skeleton. But libbpf itself doesn't support opening BPF object files with non-native endianness. We solved that problem for BTF specifically to allow cross-compiling kernel (to let pahole -J generate BTF for an endianness different from the host endianness), but libbpf was never taught to work with non-native endianness of loaded ELF file. And solving this for ELF processing in libbpf is a messier problem than for BTF itself, so I don't know if I'd like to support such use case at all. > > I also see https://github.com/torvalds/linux/commit/8859b0da ("tools/bpftool: Fix cross-build") but > that commit doesn't seem to address endianness difference between the host and the target. > > Christophe