From: Fangyu Yu 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 --- 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