[PATCH] LoongArch: Fix an issue with relocatable vmlinux
Huacai Chen
chenhuacai at kernel.org
Sat Nov 25 19:28:15 PST 2023
Reviewed-by: Huacai Chen <chenhuacai at loongson.cn>
On Fri, Nov 24, 2023 at 4:54 PM WANG Rui <wangrui at loongson.cn> wrote:
>
> Normally vmlinux for LoongArch is of ET_EXEC type, while if built with
> CONFIG_RELOCATABLE (this is PIE) and Clang, it will be of ET_DYN type.
> Meanwhile, physical address field of segments in vmlinux has actually
> the same value as virtual address field.
>
> Similar to arm64, this patch allows to unconditionally skip the check
> on LoongArch.
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/1963
> Signed-off-by: WANG Rui <wangrui at loongson.cn>
> ---
> kexec/kexec-elf-exec.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/kexec/kexec-elf-exec.c b/kexec/kexec-elf-exec.c
> index bea7b3e..b337642 100644
> --- a/kexec/kexec-elf-exec.c
> +++ b/kexec/kexec-elf-exec.c
> @@ -39,12 +39,13 @@ static int get_elf_exec_load_base(struct mem_ehdr *ehdr, struct kexec_info *info
> unsigned long first, last;
> size_t i;
>
> - /* Note on arm64:
> + /* Note on arm64 and loongarch64:
> * arm64's vmlinux has virtual address in physical address
> * field of PT_LOAD segments. So the following validity check
> * and relocation makes no sense on arm64.
> + * This is also applies to LoongArch.
> */
> - if (ehdr->e_machine == EM_AARCH64)
> + if (ehdr->e_machine == EM_AARCH64 || ehdr->e_machine == EM_LOONGARCH)
> return 0;
>
> first = ULONG_MAX;
> --
> 2.43.0
>
More information about the kexec
mailing list