| From 1221365f55281349da4f4ba41c05b57cd15f5c28 Mon Sep 17 00:00:00 2001 |
| From: Helge Deller <deller@gmx.de> |
| Date: Tue, 7 Apr 2026 22:07:22 +0200 |
| Subject: module.lds.S: Fix modules on 32-bit parisc architecture |
| |
| From: Helge Deller <deller@gmx.de> |
| |
| commit 1221365f55281349da4f4ba41c05b57cd15f5c28 upstream. |
| |
| 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 1ba9f8979426 ("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: 1ba9f8979426 ("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: Sami Tolvanen <samitolvanen@google.com> |
| Reviewed-by: Petr Pavlu <petr.pavlu@suse.com> |
| Signed-off-by: Helge Deller <deller@gmx.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/Kconfig | 7 +++++++ |
| arch/parisc/Kconfig | 1 + |
| scripts/module.lds.S | 2 ++ |
| 3 files changed, 10 insertions(+) |
| |
| --- a/arch/Kconfig |
| +++ b/arch/Kconfig |
| @@ -1128,6 +1128,13 @@ config ARCH_WANTS_MODULES_DATA_IN_VMALLO |
| 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 |
| --- a/arch/parisc/Kconfig |
| +++ b/arch/parisc/Kconfig |
| @@ -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 |
| --- a/scripts/module.lds.S |
| +++ b/scripts/module.lds.S |
| @@ -41,9 +41,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_]*) |