Re: [PATCH bpf-next] tools/bpftool: Fix cross-build

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

 



On Fri, Jun 4, 2021 at 12:51 AM Jean-Philippe Brucker
<jean-philippe@xxxxxxxxxx> wrote:
>
> On Thu, Jun 03, 2021 at 10:50:08AM -0700, Andrii Nakryiko wrote:
> > On Thu, Jun 3, 2021 at 10:06 AM Jean-Philippe Brucker
> > <jean-philippe@xxxxxxxxxx> wrote:
> > >
> > > When the bootstrap and final bpftool have different architectures, we
> > > need to build two distinct disasm.o objects. Add a recipe for the
> > > bootstrap disasm.o
> > >
> > > Fixes: d510296d331a ("bpftool: Use syscall/loader program in "prog load" and "gen skeleton" command.")
> >
> > Did this commit break something specifically?
>
> Yes, cross-building bpftool doesn't work anymore, because the bootstrap
> bpftool is linked using objects from different architectures:
>
> $ make O=/tmp/bpftool ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C tools/bpf/bpftool/ V=1
>
>   aarch64-linux-gnu-gcc ... -c -MMD -o /tmp/bpftool/disasm.o /home/z/src/linux/kernel/bpf/disasm.c
>   gcc ... -c -MMD -o /tmp/bpftool//bootstrap/main.o main.c
>   gcc ... -o /tmp/bpftool//bootstrap/bpftool /tmp/bpftool//bootstrap/main.o ... /tmp/bpftool/disasm.o
> /usr/bin/ld: /tmp/bpftool/disasm.o: Relocations in generic ELF (EM: 183)
> /usr/bin/ld: /tmp/bpftool/disasm.o: Relocations in generic ELF (EM: 183)
> /usr/bin/ld: /tmp/bpftool/disasm.o: Relocations in generic ELF (EM: 183)
> /usr/bin/ld: /tmp/bpftool/disasm.o: error adding symbols: file in wrong format
> collect2: error: ld returned 1 exit status
>
> The final bpftool is built for arm64, while the bootstrap bpftool,
> executed on the host, is built for x86. The problem here is that disasm.o
> linked into the bootstrap bpftool is arm64 rather than x86. With my fix we
> build two disasm.o, one for the target bpftool in arm64, and one for the
> bootstrap bpftool in x86.

Oh, ok, that commit added disasm.o into bootstrap version of bpftool, thanks.

>
> > > Signed-off-by: Jean-Philippe Brucker <jean-philippe@xxxxxxxxxx>
> > > ---
> > >  tools/bpf/bpftool/Makefile | 5 ++++-
> > >  1 file changed, 4 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile
> > > index d16d289ade7a..d73232be1e99 100644
> > > --- a/tools/bpf/bpftool/Makefile
> > > +++ b/tools/bpf/bpftool/Makefile
> > > @@ -136,7 +136,7 @@ endif
> > >
> > >  BPFTOOL_BOOTSTRAP := $(BOOTSTRAP_OUTPUT)bpftool
> > >
> > > -BOOTSTRAP_OBJS = $(addprefix $(BOOTSTRAP_OUTPUT),main.o common.o json_writer.o gen.o btf.o xlated_dumper.o btf_dumper.o) $(OUTPUT)disasm.o
> > > +BOOTSTRAP_OBJS = $(addprefix $(BOOTSTRAP_OUTPUT),main.o common.o json_writer.o gen.o btf.o xlated_dumper.o btf_dumper.o disasm.o)
> > >  OBJS = $(patsubst %.c,$(OUTPUT)%.o,$(SRCS)) $(OUTPUT)disasm.o
> > >
> > >  VMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux)                           \
> > > @@ -180,6 +180,9 @@ endif
> > >
> > >  CFLAGS += $(if $(BUILD_BPF_SKELS),,-DBPFTOOL_WITHOUT_SKELETONS)
> > >
> > > +$(BOOTSTRAP_OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c
> > > +       $(QUIET_CC)$(HOSTCC) $(CFLAGS) -c -MMD -o $@ $<
> > > +
> > >  $(OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c
> >
> > maybe just do
> >
> > $(BOOTSTRAP_OUTPUT)disasm.o $(OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c
>
> They need two different recipes. The bootstrap disasm.o needs to be built
> with $(HOSTCC) rather than $(CC) (CC=aarch64-linux-gnu-gcc and HOSTCC=gcc)
>

My bad, missed HOSTCC vs CC in the rule. At a first glance they
appeared to be identical.

Your patch makes sense:

Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx>

> Thanks,
> Jean
>
> > ?
> >
> > >         $(QUIET_CC)$(CC) $(CFLAGS) -c -MMD -o $@ $<
> > >
> > > --
> > > 2.31.1
> > >



[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