Re: selftests/bpf - Error: failed to open BPF object file: Endian mismatch

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

 



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




[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