mirror of
https://github.com/torvalds/linux.git
synced 2025-10-29 07:46:20 +02:00
Currently, we assume all the data for modules.builtin.modinfo are available in vmlinux.o. This makes it impossible for modpost, which is invoked after vmlinux.o, to add additional module info. This commit moves the modules.builtin.modinfo rule after modpost. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Signed-off-by: Alexey Gladkov <legion@kernel.org> Reviewed-by: Nicolas Schier <nsc@kernel.org> Link: https://patch.msgid.link/cdb3e5b9a739666b755cd0097dc34ab69c350e51.1758182101.git.legion@kernel.org Signed-off-by: Nathan Chancellor <nathan@kernel.org>
91 lines
2.8 KiB
Text
91 lines
2.8 KiB
Text
# SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
PHONY := __default
|
|
__default: vmlinux.o
|
|
|
|
include include/config/auto.conf
|
|
include $(srctree)/scripts/Kbuild.include
|
|
|
|
# for objtool
|
|
include $(srctree)/scripts/Makefile.lib
|
|
|
|
# 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 \
|
|
vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
|
|
$(call if_changed,gen_initcalls_lds)
|
|
|
|
targets := .tmp_initcalls.lds
|
|
|
|
ifdef CONFIG_LTO_CLANG
|
|
initcalls-lds := .tmp_initcalls.lds
|
|
endif
|
|
|
|
# objtool for vmlinux.o
|
|
# ---------------------------------------------------------------------------
|
|
#
|
|
# For delay-objtool (IBT or LTO), objtool doesn't run on individual translation
|
|
# units. Instead it runs on vmlinux.o.
|
|
#
|
|
# For !delay-objtool + CONFIG_NOINSTR_VALIDATION, it runs on both translation
|
|
# units and vmlinux.o, with the latter only used for noinstr/unret validation.
|
|
|
|
objtool-enabled := $(or $(delay-objtool),$(CONFIG_NOINSTR_VALIDATION))
|
|
|
|
ifeq ($(delay-objtool),y)
|
|
vmlinux-objtool-args-y += $(objtool-args-y)
|
|
else
|
|
vmlinux-objtool-args-$(CONFIG_OBJTOOL_WERROR) += --Werror
|
|
endif
|
|
|
|
vmlinux-objtool-args-$(CONFIG_NOINSTR_VALIDATION) += --noinstr \
|
|
$(if $(or $(CONFIG_MITIGATION_UNRET_ENTRY),$(CONFIG_MITIGATION_SRSO)), --unret)
|
|
|
|
objtool-args = $(vmlinux-objtool-args-y) --link
|
|
|
|
# Link of vmlinux.o used for section mismatch analysis
|
|
# ---------------------------------------------------------------------------
|
|
|
|
vmlinux-o-ld-args-$(CONFIG_BUILTIN_MODULE_RANGES) += -Map=$@.map
|
|
|
|
quiet_cmd_ld_vmlinux.o = LD $@
|
|
cmd_ld_vmlinux.o = \
|
|
$(LD) ${KBUILD_LDFLAGS} -r -o $@ \
|
|
$(vmlinux-o-ld-args-y) \
|
|
$(addprefix -T , $(initcalls-lds)) \
|
|
--whole-archive vmlinux.a --no-whole-archive \
|
|
--start-group $(KBUILD_VMLINUX_LIBS) --end-group \
|
|
$(cmd_objtool)
|
|
|
|
define rule_ld_vmlinux.o
|
|
$(call cmd_and_savecmd,ld_vmlinux.o)
|
|
$(call cmd,gen_objtooldep)
|
|
endef
|
|
|
|
vmlinux.o: $(initcalls-lds) vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
|
|
$(call if_changed_rule,ld_vmlinux.o)
|
|
|
|
targets += vmlinux.o
|
|
|
|
# Add FORCE to the prerequisites 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)
|