]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
kbuild: preprocess module linker script
authorMasahiro Yamada <masahiroy@kernel.org>
Tue, 8 Sep 2020 04:27:08 +0000 (13:27 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Thu, 24 Sep 2020 15:36:41 +0000 (00:36 +0900)
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>
21 files changed:
Makefile
arch/arm/Makefile
arch/arm/include/asm/module.lds.h [moved from arch/arm/kernel/module.lds with 72% similarity]
arch/arm64/Makefile
arch/arm64/include/asm/module.lds.h [moved from arch/arm64/kernel/module.lds with 76% similarity]
arch/ia64/Makefile
arch/ia64/include/asm/module.lds.h [moved from arch/ia64/module.lds with 100% similarity]
arch/m68k/Makefile
arch/m68k/include/asm/module.lds.h [moved from arch/m68k/kernel/module.lds with 100% similarity]
arch/powerpc/Makefile
arch/powerpc/include/asm/module.lds.h [moved from arch/powerpc/kernel/module.lds with 100% similarity]
arch/riscv/Makefile
arch/riscv/include/asm/module.lds.h [moved from arch/riscv/kernel/module.lds with 84% similarity]
arch/um/include/asm/Kbuild
include/asm-generic/Kbuild
include/asm-generic/module.lds.h [new file with mode: 0644]
scripts/.gitignore
scripts/Makefile
scripts/Makefile.modfinal
scripts/module.lds.S [moved from scripts/module-common.lds with 93% similarity]
scripts/package/builddeb

index 37739ee53f27c7be5f2eb648cf02285cc050dd1c..97b1dae1783b47daaf990291b081a1f3914e1ee8 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -505,7 +505,6 @@ KBUILD_CFLAGS_KERNEL :=
 KBUILD_AFLAGS_MODULE  := -DMODULE
 KBUILD_CFLAGS_MODULE  := -DMODULE
 KBUILD_LDFLAGS_MODULE :=
-export KBUILD_LDS_MODULE := $(srctree)/scripts/module-common.lds
 KBUILD_LDFLAGS :=
 CLANG_FLAGS :=
 
@@ -1395,7 +1394,7 @@ endif
 # using awk while concatenating to the final file.
 
 PHONY += modules
-modules: $(if $(KBUILD_BUILTIN),vmlinux) modules_check
+modules: $(if $(KBUILD_BUILTIN),vmlinux) modules_check modules_prepare
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
 
 PHONY += modules_check
@@ -1412,6 +1411,7 @@ targets += modules.order
 # Target to prepare building external modules
 PHONY += modules_prepare
 modules_prepare: prepare
+       $(Q)$(MAKE) $(build)=scripts scripts/module.lds
 
 # Target to install modules
 PHONY += modules_install
@@ -1743,7 +1743,9 @@ help:
        @echo  '  clean           - remove generated files in module directory only'
        @echo  ''
 
-PHONY += prepare
+# no-op for external module builds
+PHONY += prepare modules_prepare
+
 endif # KBUILD_EXTMOD
 
 # Single targets
@@ -1776,7 +1778,7 @@ MODORDER := .modules.tmp
 endif
 
 PHONY += single_modpost
-single_modpost: $(single-no-ko)
+single_modpost: $(single-no-ko) modules_prepare
        $(Q){ $(foreach m, $(single-ko), echo $(extmod-prefix)$m;) } > $(MODORDER)
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
 
index 4e877354515f4b77200c083c5db018d02dfa46b3..a0cb15de96778572cb1513850da28f9c046f4a4f 100644 (file)
@@ -16,10 +16,6 @@ LDFLAGS_vmlinux      += --be8
 KBUILD_LDFLAGS_MODULE  += --be8
 endif
 
-ifeq ($(CONFIG_ARM_MODULE_PLTS),y)
-KBUILD_LDS_MODULE      += $(srctree)/arch/arm/kernel/module.lds
-endif
-
 GZFLAGS                :=-9
 #KBUILD_CFLAGS +=-pipe
 
similarity index 72%
rename from arch/arm/kernel/module.lds
rename to arch/arm/include/asm/module.lds.h
index 79cb6af565e585b92d81277ac9d72c6159cdd69b..0e7cb4e314b481117d85ac673d1880f5a91babf2 100644 (file)
@@ -1,5 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0 */
+#ifdef CONFIG_ARM_MODULE_PLTS
 SECTIONS {
        .plt : { BYTE(0) }
        .init.plt : { BYTE(0) }
 }
+#endif
index b45f0124cc16f3bf04c02976b11be5bdc2ab7a32..76667ad47980b1b169fce3e2a7ef0744894b2b6d 100644 (file)
@@ -115,10 +115,6 @@ endif
 
 CHECKFLAGS     += -D__aarch64__
 
-ifeq ($(CONFIG_ARM64_MODULE_PLTS),y)
-KBUILD_LDS_MODULE      += $(srctree)/arch/arm64/kernel/module.lds
-endif
-
 ifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_REGS),y)
   KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
   CC_FLAGS_FTRACE := -fpatchable-function-entry=2
similarity index 76%
rename from arch/arm64/kernel/module.lds
rename to arch/arm64/include/asm/module.lds.h
index 22e36a21c1134576eb58a9209d75f2c6b2f09f85..691f15af788e4c64fd1efcaaf0da8097543cb35c 100644 (file)
@@ -1,5 +1,7 @@
+#ifdef CONFIG_ARM64_MODULE_PLTS
 SECTIONS {
        .plt (NOLOAD) : { BYTE(0) }
        .init.plt (NOLOAD) : { BYTE(0) }
        .text.ftrace_trampoline (NOLOAD) : { BYTE(0) }
 }
+#endif
index 2876a7df1b0a1d963ba06641d2370e187c670bb9..703b1c4f6d12355f1115f33f45c2433c6db16ab0 100644 (file)
@@ -20,7 +20,6 @@ CHECKFLAGS    += -D__ia64=1 -D__ia64__=1 -D_LP64 -D__LP64__
 
 OBJCOPYFLAGS   := --strip-all
 LDFLAGS_vmlinux        := -static
-KBUILD_LDS_MODULE += $(srctree)/arch/ia64/module.lds
 KBUILD_AFLAGS_KERNEL := -mconstant-gp
 EXTRA          :=
 
index 4438ffb4bbe171a9e4cecb7769faaeebdf70b4ed..ea14f2046fb463d12f960398890fada8f8a7a285 100644 (file)
@@ -75,7 +75,6 @@ KBUILD_CPPFLAGS += -D__uClinux__
 endif
 
 KBUILD_LDFLAGS := -m m68kelf
-KBUILD_LDS_MODULE += $(srctree)/arch/m68k/kernel/module.lds
 
 ifdef CONFIG_SUN3
 LDFLAGS_vmlinux = -N
index 3e8da9cf2eb9d27aa00933f30330d49c27af28b1..8935658fcd0639a694c9b6b8ef664fca2df10705 100644 (file)
@@ -65,7 +65,6 @@ UTS_MACHINE := $(subst $(space),,$(machine-y))
 ifdef CONFIG_PPC32
 KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
 else
-KBUILD_LDS_MODULE += $(srctree)/arch/powerpc/kernel/module.lds
 ifeq ($(call ld-ifversion, -ge, 225000000, y),y)
 # Have the linker provide sfpr if possible.
 # There is a corresponding test in arch/powerpc/lib/Makefile
index fb6e37db836d10ee06a5c00ad48060930e6007be..8edaa8bd86d6394fa7d5d346f5cf7f36f823d22f 100644 (file)
@@ -53,9 +53,6 @@ endif
 ifeq ($(CONFIG_CMODEL_MEDANY),y)
        KBUILD_CFLAGS += -mcmodel=medany
 endif
-ifeq ($(CONFIG_MODULE_SECTIONS),y)
-       KBUILD_LDS_MODULE += $(srctree)/arch/riscv/kernel/module.lds
-endif
 ifeq ($(CONFIG_PERF_EVENTS),y)
         KBUILD_CFLAGS += -fno-omit-frame-pointer
 endif
similarity index 84%
rename from arch/riscv/kernel/module.lds
rename to arch/riscv/include/asm/module.lds.h
index 295ecfb341a29fa061e64fe48483a3dc911efab8..4254ff2ff04943f7df7053d6d8263edaba7a3f36 100644 (file)
@@ -1,8 +1,9 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /* Copyright (C) 2017 Andes Technology Corporation */
-
+#ifdef CONFIG_MODULE_SECTIONS
 SECTIONS {
        .plt (NOLOAD) : { BYTE(0) }
        .got (NOLOAD) : { BYTE(0) }
        .got.plt (NOLOAD) : { BYTE(0) }
 }
+#endif
index 8d435f8a6decdd9e8560f907958e63fb839148a4..1c63b260ecc4a58ca3e4b2a9f136e6aaf9b40f81 100644 (file)
@@ -16,6 +16,7 @@ generic-y += kdebug.h
 generic-y += mcs_spinlock.h
 generic-y += mm-arch-hooks.h
 generic-y += mmiowb.h
+generic-y += module.lds.h
 generic-y += param.h
 generic-y += pci.h
 generic-y += percpu.h
index 74b0612601dd1bdbf2918a56978b097106d57bf3..7cd4e627e00ec49f0976580acabbfaf819d8bd4b 100644 (file)
@@ -40,6 +40,7 @@ mandatory-y += mmiowb.h
 mandatory-y += mmu.h
 mandatory-y += mmu_context.h
 mandatory-y += module.h
+mandatory-y += module.lds.h
 mandatory-y += msi.h
 mandatory-y += pci.h
 mandatory-y += percpu.h
diff --git a/include/asm-generic/module.lds.h b/include/asm-generic/module.lds.h
new file mode 100644 (file)
index 0000000..f210d5c
--- /dev/null
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef __ASM_GENERIC_MODULE_LDS_H
+#define __ASM_GENERIC_MODULE_LDS_H
+
+/*
+ * <asm/module.lds.h> can specify arch-specific sections for linking modules.
+ * Empty for the asm-generic header.
+ */
+
+#endif /* __ASM_GENERIC_MODULE_LDS_H */
index 0d1c8e217cd7d78b630df967057a6666cca493cd..a6c11316c9696751b12e3f0b9157d58a8233f613 100644 (file)
@@ -8,3 +8,4 @@ asn1_compiler
 extract-cert
 sign-file
 insert-sys-cert
+/module.lds
index bc018e4b733edf33c6fd05236bf4afe0a357b9d7..b5418ec587fbd2cd6ca6896b8868b93f12e59ef3 100644 (file)
@@ -29,6 +29,9 @@ endif
 # The following programs are only built on demand
 hostprogs += unifdef
 
+# The module linker script is preprocessed on demand
+targets += module.lds
+
 subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins
 subdir-$(CONFIG_MODVERSIONS) += genksyms
 subdir-$(CONFIG_SECURITY_SELINUX) += selinux
index 411c1e600e7dd8680abe75613a825514d6fa02fc..ae01baf96f4e8038583d994df2348a0b53b8a565 100644 (file)
@@ -33,11 +33,10 @@ quiet_cmd_ld_ko_o = LD [M]  $@
       cmd_ld_ko_o =                                                     \
        $(LD) -r $(KBUILD_LDFLAGS)                                      \
                $(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE)              \
-               $(addprefix -T , $(KBUILD_LDS_MODULE))                  \
-               -o $@ $(filter %.o, $^);                                \
+               -T scripts/module.lds -o $@ $(filter %.o, $^);          \
        $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
 
-$(modules): %.ko: %.o %.mod.o $(KBUILD_LDS_MODULE) FORCE
+$(modules): %.ko: %.o %.mod.o scripts/module.lds FORCE
        +$(call if_changed,ld_ko_o)
 
 targets += $(modules) $(modules:.ko=.mod.o)
similarity index 93%
rename from scripts/module-common.lds
rename to scripts/module.lds.S
index d61b9e8678e8c0fd17220dae2e3d49fa08d23070..69b9b71a6a4731ba43f74996039c5272ce2254c8 100644 (file)
@@ -24,3 +24,6 @@ SECTIONS {
 
        __jump_table            0 : ALIGN(8) { KEEP(*(__jump_table)) }
 }
+
+/* bring in arch-specific sections */
+#include <asm/module.lds.h>
index 6df3c9f8b2da6ce913a06838af23d7d0432988ea..44f212e379353da65b9275b9cba0f543335617e4 100755 (executable)
@@ -55,7 +55,7 @@ deploy_kernel_headers () {
                cd $srctree
                find . arch/$SRCARCH -maxdepth 1 -name Makefile\*
                find include scripts -type f -o -type l
-               find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform
+               find arch/$SRCARCH -name Kbuild.platforms -o -name Platform
                find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f
        ) > debian/hdrsrcfiles