Commit 1221365f authored by Helge Deller's avatar Helge Deller
Browse files

module.lds.S: Fix modules on 32-bit parisc architecture



On the 32-bit parisc architecture, we always used the
-ffunction-sections compiler option to tell the compiler to put the
functions into seperate text sections. This is necessary, otherwise
"big" kernel modules like ext4 or ipv6 fail to load because some
branches won't be able to reach their stubs.

Commit 1ba9f897 ("vmlinux.lds: Unify TEXT_MAIN, DATA_MAIN, and related
macros") broke this for parisc because all text sections will get
unconditionally merged now.

Introduce the ARCH_WANTS_MODULES_TEXT_SECTIONS config option which
avoids the text section merge for modules, and fix this issue by
enabling this option by default for 32-bit parisc.

Fixes: 1ba9f897 ("vmlinux.lds: Unify TEXT_MAIN, DATA_MAIN, and related macros")
Cc: Josh Poimboeuf <jpoimboe@kernel.org>
Cc: stable@vger.kernel.org # v6.19+
Suggested-by: default avatarSami Tolvanen <samitolvanen@google.com>
Reviewed-by: default avatarPetr Pavlu <petr.pavlu@suse.com>
Signed-off-by: default avatarHelge Deller <deller@gmx.de>
parent 3dce9179
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1127,6 +1127,13 @@ config ARCH_WANTS_MODULES_DATA_IN_VMALLOC
	  For architectures like powerpc/32 which have constraints on module
	  allocation and need to allocate module data outside of module area.

config ARCH_WANTS_MODULES_TEXT_SECTIONS
	bool
	help
	  For architectures like 32-bit parisc which require that functions in
	  modules have to keep code in own text sections (-ffunction-sections)
	  and to avoid merging all text into one big text section,

config ARCH_WANTS_EXECMEM_LATE
	bool
	help
+1 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ config PARISC
	select HAVE_FUNCTION_GRAPH_TRACER
	select HAVE_SYSCALL_TRACEPOINTS
	select ARCH_WANT_FRAME_POINTERS
	select ARCH_WANTS_MODULES_TEXT_SECTIONS if !64BIT
	select ARCH_HAS_CPU_CACHE_ALIASING
	select ARCH_HAS_DMA_ALLOC if PA11
	select ARCH_HAS_DMA_OPS
+2 −0
Original line number Diff line number Diff line
@@ -40,9 +40,11 @@ SECTIONS {
	__kcfi_traps		0 : { KEEP(*(.kcfi_traps)) }
#endif

#ifndef CONFIG_ARCH_WANTS_MODULES_TEXT_SECTIONS
	.text			0 : {
		*(.text .text.[0-9a-zA-Z_]*)
	}
#endif

	.bss			0 : {
		*(.bss .bss.[0-9a-zA-Z_]*)