On Sat, May 28, 2022 at 8:25 PM Masahiro Yamada <masahiroy@xxxxxxxxxx> wrote: > > This is a preparation for the objtool move in the next commit. > > Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx> Tested-by: Sedat Dilek <sedat.dilek@xxxxxxxxx> # LLVM-14 (x86-64) -Sedat- > --- > > scripts/Makefile.vmlinux_o | 61 ++++++++++++++++++++++++++++++++++++++ > scripts/link-vmlinux.sh | 41 +------------------------ > 2 files changed, 62 insertions(+), 40 deletions(-) > create mode 100644 scripts/Makefile.vmlinux_o > > diff --git a/scripts/Makefile.vmlinux_o b/scripts/Makefile.vmlinux_o > new file mode 100644 > index 000000000000..a9b375ca86d5 > --- /dev/null > +++ b/scripts/Makefile.vmlinux_o > @@ -0,0 +1,61 @@ > +# SPDX-License-Identifier: GPL-2.0-only > + > +PHONY := __default > +__default: vmlinux.o > + > +include include/config/auto.conf > +include $(srctree)/scripts/Kbuild.include > + > +# Generate a linker script to ensure correct ordering of initcalls for Clang LTO > +# --------------------------------------------------------------------------- > + > +quiet_cmd_gen_initcalls_lds = GEN $@ > + cmd_gen_initcalls_lds = \ > + $(PYTHON3) $(srctree)/scripts/jobserver-exec \ > + $(PERL) $(real-prereqs) > $@ > + > +.tmp_initcalls.lds: $(srctree)/scripts/generate_initcall_order.pl \ > + $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS) FORCE > + $(call if_changed,gen_initcalls_lds) > + > +targets := .tmp_initcalls.lds > + > +ifdef CONFIG_LTO_CLANG > +initcalls-lds := .tmp_initcalls.lds > +endif > + > +# Link of vmlinux.o used for section mismatch analysis > +# --------------------------------------------------------------------------- > + > +quiet_cmd_ld_vmlinux.o = LD $@ > + cmd_ld_vmlinux.o = \ > + $(LD) ${KBUILD_LDFLAGS} -r -o $@ \ > + $(addprefix -T , $(initcalls-lds)) \ > + --whole-archive $(KBUILD_VMLINUX_OBJS) --no-whole-archive \ > + --start-group $(KBUILD_VMLINUX_LIBS) --end-group \ > + > +define rule_ld_vmlinux.o > + $(call cmd_and_savecmd,ld_vmlinux.o) > +endef > + > +vmlinux.o: $(initcalls-lds) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS) FORCE > + $(call if_changed_rule,ld_vmlinux.o) > + > +targets += vmlinux.o > + > +# Add FORCE to the prequisites of a target to force it to be always rebuilt. > +# --------------------------------------------------------------------------- > + > +PHONY += FORCE > +FORCE: > + > +# Read all saved command lines and dependencies for the $(targets) we > +# may be building above, using $(if_changed{,_dep}). As an > +# optimization, we don't need to read them if the target does not > +# exist, we will rebuild anyway in that case. > + > +existing-targets := $(wildcard $(sort $(targets))) > + > +-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd) > + > +.PHONY: $(PHONY) > diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh > index b593cb1a8137..90680b6bd710 100755 > --- a/scripts/link-vmlinux.sh > +++ b/scripts/link-vmlinux.sh > @@ -45,45 +45,6 @@ info() > printf " %-7s %s\n" "${1}" "${2}" > } > > -# Generate a linker script to ensure correct ordering of initcalls. > -gen_initcalls() > -{ > - info GEN .tmp_initcalls.lds > - > - ${PYTHON3} ${srctree}/scripts/jobserver-exec \ > - ${PERL} ${srctree}/scripts/generate_initcall_order.pl \ > - ${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS} \ > - > .tmp_initcalls.lds > -} > - > -# Link of vmlinux.o used for section mismatch analysis > -# ${1} output file > -modpost_link() > -{ > - local objects > - local lds="" > - > - objects="--whole-archive \ > - ${KBUILD_VMLINUX_OBJS} \ > - --no-whole-archive \ > - --start-group \ > - ${KBUILD_VMLINUX_LIBS} \ > - --end-group" > - > - if is_enabled CONFIG_LTO_CLANG; then > - gen_initcalls > - lds="-T .tmp_initcalls.lds" > - > - # This might take a while, so indicate that we're doing > - # an LTO link > - info LTO ${1} > - else > - info LD ${1} > - fi > - > - ${LD} ${KBUILD_LDFLAGS} -r -o ${1} ${lds} ${objects} > -} > - > objtool_link() > { > local objtoolcmd; > @@ -336,7 +297,7 @@ fi; > ${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init need-builtin=1 > > #link vmlinux.o > -modpost_link vmlinux.o > +${MAKE} -f "${srctree}/scripts/Makefile.vmlinux_o" > objtool_link vmlinux.o > > # Generate the list of objects in vmlinux > -- > 2.32.0 >