Re: [GIT] Networking
From: Stephen Rothwell <hidden>
Date: 2018-06-21 13:46:56
Also in:
lkml
Hi Matteo, On Thu, 21 Jun 2018 13:40:43 +0000 Matteo Croce [off-list ref] wrote:
On Thu, Jun 21, 2018 at 8:46 AM Ingo Molnar [off-list ref] wrote:quoted
* David Miller [off-list ref] wrote:quoted
1) Fix crash on bpf_prog_load() errors, from Daniel Borkmann.quoted
Daniel Borkmann (4): Merge branch 'bpf-misc-fixes' bpf: fix panic in prog load calls cleanup bpf: reject any prog that failed read-only lock bpf, xdp, i40e: fix i40e_build_skb skb reserve and truesizeJFYI, I'm still seeing this BPF build error upstream, on a 32-bit allyesconfig I'm getting: LD vmlinux.o ld: i386:x86-64 architecture of input file `net/bpfilter/bpfilter_umh.o' is incompatible with i386 output Makefile:1010: recipe for target 'vmlinux' failed make: *** [vmlinux] Error 1 A similar looking build bug was reported by sfr three weeks ago:quoted
Subject: linux-next: build failure after merge of the net-next tree ... x86_64-linux-ld: unknown architecture of input file `net/bpfilter/bpfilter_umh.o' is incompatible with i386:x86-64 output Caused by commit d2ba09c17a06 ("net: add skeleton of bpfilter kernel module") In my builds, the host is PowerPC 64 LE ... I have reverted that commit along with 61a552eb487f ("bpfilter: fix build dependency") 13405468f49d ("bpfilter: don't pass O_CREAT when opening console for debug") for today.Is there a fix I could try?are you compiling a 32 bit kernel on an x86_64 host? I tried to compile an i386 bit kernel on an i386 host and I have no issue, running objdump by hand produces correct output: $ uname -a Linux debian32 4.16.0-2-686-pae #1 SMP Debian 4.16.16-1 (2018-06-19) i686 GNU/Linux $ objdump -f net/bpfilter/bpfilter_umh |awk -F' |,' '/file format/{print "-O",$NF} /^architecture:/{print "-B",$2}' -O elf32-i386 -B i386 then I tried to compile an i386 kernel on an x86_64 host and I get the same error: $ make -j8 ARCH=i386 ... LD vmlinux.o ld: i386:x86-64 architecture of input file `net/bpfilter/bpfilter_umh.o' is incompatible with i386 output make: *** [Makefile:1015: vmlinux] Error 1 the problem seems to be that bpfilter_umh is compiled with host flags, and so it's a 64 bit binary in my case: gcc -static -o net/bpfilter/bpfilter_umh net/bpfilter/main.o objcopy -I binary `LC_ALL=C objdump -f net/bpfilter/bpfilter_umh |awk -F' |,' '/file format/{print "-O",$NF} /^architecture:/{print "-B",$2}'` --rename-section .data=.init.rodata net/bpfilter/bpfilter_umh net/bpfilter/bpfilter_umh.o ld -m elf_i386 -r -o vmlinux.o --whole-archive built-in.a --no-whole-archive --start-group lib/lib.a arch/x86/lib/lib.a --end-group ld: i386:x86-64 architecture of input file `net/bpfilter/bpfilter_umh.o' is incompatible with i386 output Any idea how to fix it without building it twice, for host and target?
This presumably has the same root cause that means I can't build a big endian PowerPC version on a little endian host ... Either I have to have CONFIG_BPFILTER turned off (or maybe just CONFIG_BPFILTER_UMH) or build with a compiler that cannot link user mode programs (which effectively does the same). -- Cheers, Stephen Rothwell
Attachments
- (unnamed) [application/pgp-signature] 488 bytes