[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20180621234646.3aed20b9@canb.auug.org.au>
Date: Thu, 21 Jun 2018 23:46:46 +1000
From: Stephen Rothwell <sfr@...b.auug.org.au>
To: Matteo Croce <mcroce@...hat.com>
Cc: mingo@...nel.org, "David S . Miller" <davem@...emloft.net>,
alexei.starovoitov@...il.com, torvalds@...ux-foundation.org,
akpm@...ux-foundation.org, netdev <netdev@...r.kernel.org>,
linux-kernel@...r.kernel.org, tglx@...utronix.de
Subject: Re: [GIT] Networking
Hi Matteo,
On Thu, 21 Jun 2018 13:40:43 +0000 Matteo Croce <mcroce@...hat.com> wrote:
>
> On Thu, Jun 21, 2018 at 8:46 AM Ingo Molnar <mingo@...nel.org> wrote:
> >
> > * David Miller <davem@...emloft.net> wrote:
> >
> > > 1) Fix crash on bpf_prog_load() errors, from Daniel Borkmann.
> >
> > > 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 truesize
> >
> > JFYI, 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:
> >
> > > 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
Content of type "application/pgp-signature" skipped
Powered by blists - more mailing lists