[PATCH v3 3/9] riscv: Add kexec trampoline text section to vmlinux.lds.S
From: fangyu . yu
Date: Thu Jun 04 2026 - 09:31:11 EST
From: Fangyu Yu <fangyu.yu@xxxxxxxxxxxxxxxxx>
When CONFIG_KEXEC_CORE is enabled, add a dedicated .kexec.tramp.text
area to the RISC-V kernel linker script.
Extend vmlinux.lds.S to:
- align both the start and the end to PAGE_SIZE
- define __kexec_tramp_text_start/__kexec_tramp_text_end
- KEEP all .kexec.tramp.text* input sections
- ASSERT the trampoline text fits within one page
The end-of-section page alignment guarantees that the trampoline page,
which is later identity-mapped as PAGE_KERNEL_EXEC, contains nothing but
the trampoline code and padding (no shared neighbour data).
When kexec is disabled, the whole block is excluded via #ifdef
CONFIG_KEXEC_CORE.
Signed-off-by: Fangyu Yu <fangyu.yu@xxxxxxxxxxxxxxxxx>
---
arch/riscv/kernel/vmlinux.lds.S | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/arch/riscv/kernel/vmlinux.lds.S b/arch/riscv/kernel/vmlinux.lds.S
index 1f4f8496941a..bc615f7b702f 100644
--- a/arch/riscv/kernel/vmlinux.lds.S
+++ b/arch/riscv/kernel/vmlinux.lds.S
@@ -41,6 +41,16 @@ SECTIONS
ENTRY_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
+#ifdef CONFIG_KEXEC_CORE
+ . = ALIGN(PAGE_SIZE);
+ __kexec_tramp_text_start = .;
+ KEEP(*(.kexec.tramp.text))
+ KEEP(*(.kexec.tramp.text.*))
+ __kexec_tramp_text_end = .;
+ ASSERT((__kexec_tramp_text_end - __kexec_tramp_text_start) <= PAGE_SIZE,
+ ".kexec.tramp.text exceeds PAGE_SIZE");
+ . = ALIGN(PAGE_SIZE);
+#endif
_etext = .;
}
--
2.50.1