Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | Date | Fri, 10 Mar 2023 19:27:26 +0100 | From | Torsten Duwe <> | Subject | [PATCH] riscv: relocate R_RISCV_CALL_PLT in kexec_file |
| |
Depending on the toolchain (here: gcc-12, binutils-2.40) the relocation entries for function calls are no longer R_RISCV_CALL, but R_RISCV_CALL_PLT. When trying kexec_load_file on such kernels, it will fail with
kexec_image: Unknown rela relocation: 19 kexec_image: Error loading purgatory ret=-8
The binary code at the call site remains the same, so tell arch_kexec_apply_relocations_add() to handle _PLT alike.
fixes: 838b3e28488f702 ("Load purgatory in kexec_file") Signed-off-by: Torsten Duwe <duwe@suse.de> Cc: stable@vger.kernel.org
--- --- a/arch/riscv/kernel/elf_kexec.c +++ b/arch/riscv/kernel/elf_kexec.c @@ -425,6 +425,7 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi, * sym, instead of searching the whole relsec. */ case R_RISCV_PCREL_HI20: + case R_RISCV_CALL_PLT: case R_RISCV_CALL: *(u64 *)loc = CLEAN_IMM(UITYPE, *(u64 *)loc) | ENCODE_UJTYPE_IMM(val - addr);
| ![\](/images/icornerr.gif) |