Re: [PATCH 3/4] kbuild: move vmlinux.o link to scripts/Makefile.vmlinux_o

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

 



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
>



[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux