mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 02:50:43 +00:00
![Masahiro Yamada](/assets/img/avatar_default.png)
There was a request to preprocess the module linker script like we do for the vmlinux one. (https://lkml.org/lkml/2020/8/21/512) The difference between vmlinux.lds and module.lds is that the latter is needed for external module builds, thus must be cleaned up by 'make mrproper' instead of 'make clean'. Also, it must be created by 'make modules_prepare'. You cannot put it in arch/$(SRCARCH)/kernel/, which is cleaned up by 'make clean'. I moved arch/$(SRCARCH)/kernel/module.lds to arch/$(SRCARCH)/include/asm/module.lds.h, which is included from scripts/module.lds.S. scripts/module.lds is fine because 'make clean' keeps all the build artifacts under scripts/. You can add arch-specific sections in <asm/module.lds.h>. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Tested-by: Jessica Yu <jeyu@kernel.org> Acked-by: Will Deacon <will@kernel.org> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> Acked-by: Palmer Dabbelt <palmerdabbelt@google.com> Reviewed-by: Kees Cook <keescook@chromium.org> Acked-by: Jessica Yu <jeyu@kernel.org>
59 lines
1.8 KiB
Makefile
59 lines
1.8 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0-only
|
|
# ===========================================================================
|
|
# Module final link
|
|
# ===========================================================================
|
|
|
|
PHONY := __modfinal
|
|
__modfinal:
|
|
|
|
include $(srctree)/scripts/Kbuild.include
|
|
|
|
# for c_flags
|
|
include $(srctree)/scripts/Makefile.lib
|
|
|
|
# find all modules listed in modules.order
|
|
modules := $(sort $(shell cat $(MODORDER)))
|
|
|
|
__modfinal: $(modules)
|
|
@:
|
|
|
|
# modname and part-of-module are set to make c_flags define proper module flags
|
|
modname = $(notdir $(@:.mod.o=))
|
|
part-of-module = y
|
|
|
|
quiet_cmd_cc_o_c = CC [M] $@
|
|
cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
|
|
|
|
%.mod.o: %.mod.c FORCE
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
|
|
|
|
quiet_cmd_ld_ko_o = LD [M] $@
|
|
cmd_ld_ko_o = \
|
|
$(LD) -r $(KBUILD_LDFLAGS) \
|
|
$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \
|
|
-T scripts/module.lds -o $@ $(filter %.o, $^); \
|
|
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
|
|
|
|
$(modules): %.ko: %.o %.mod.o scripts/module.lds FORCE
|
|
+$(call if_changed,ld_ko_o)
|
|
|
|
targets += $(modules) $(modules:.ko=.mod.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)
|