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 > > >