[U-Boot] [PATCH] riscv: Add support for HI20 PE relocations
Rick Chen
rickchen36 at gmail.com
Wed Jun 6 09:15:30 UTC 2018
> -----Original Message-----
> From: Alexander Graf [mailto:agraf at suse.de]
> Sent: Wednesday, June 06, 2018 1:21 AM
> To: u-boot at lists.denx.de
> Cc: Rick Jian-Zhi Chen(陳建志)
> Subject: [PATCH] riscv: Add support for HI20 PE relocations
>
> The PE standard allows for HI20/LOW12 relocations. Within the efi_loader target
> we always know that our relocation target is 4k aligned, so we don't need to
> worry about the LOW12 part.
>
> This patch adds support for the respective relocations. With this and a few grub
> patches I have cooking in parallel I'm able to run grub on RISC-V.
>
> Signed-off-by: Alexander Graf <agraf at suse.de>
> ---
> include/pe.h | 3 +++
> lib/efi_loader/efi_image_loader.c | 14 ++++++++++++++
> 2 files changed, 17 insertions(+)
>
> diff --git a/include/pe.h b/include/pe.h index d73eb142cb..36e1908b7e 100644
> --- a/include/pe.h
> +++ b/include/pe.h
> @@ -201,10 +201,13 @@ typedef struct _IMAGE_RELOCATION
> #define IMAGE_REL_BASED_MIPS_JMPADDR 5
> #define IMAGE_REL_BASED_ARM_MOV32A 5 /* yes, 5 too */
> #define IMAGE_REL_BASED_ARM_MOV32 5 /* yes, 5 too */
> +#define IMAGE_REL_BASED_RISCV_HI20 5 /* yes, 5 too */
> #define IMAGE_REL_BASED_SECTION 6
> #define IMAGE_REL_BASED_REL 7
> #define IMAGE_REL_BASED_ARM_MOV32T 7 /* yes, 7 too */
> #define IMAGE_REL_BASED_THUMB_MOV32 7 /* yes, 7 too */
> +#define IMAGE_REL_BASED_RISCV_LOW12I 7 /* yes, 7 too */
> +#define IMAGE_REL_BASED_RISCV_LOW12S 8
> #define IMAGE_REL_BASED_MIPS_JMPADDR16 9
> #define IMAGE_REL_BASED_IA64_IMM64 9 /* yes, 9 too */
> #define IMAGE_REL_BASED_DIR64 10
> diff --git a/lib/efi_loader/efi_image_loader.c b/lib/efi_loader/efi_image_loader.c
> index 3cffe9ef46..6892171ccd 100644
> --- a/lib/efi_loader/efi_image_loader.c
> +++ b/lib/efi_loader/efi_image_loader.c
> @@ -126,6 +126,20 @@ static efi_status_t efi_loader_relocate(const
> IMAGE_BASE_RELOCATION *rel,
> case IMAGE_REL_BASED_DIR64:
> *x64 += (uint64_t)delta;
> break;
> +#ifdef __riscv
> + case IMAGE_REL_BASED_RISCV_HI20:
> + *x32 = ((*x32 & 0xfffff000) + (uint32_t)delta) |
> + (*x32 & 0x00000fff);
> + break;
> + case IMAGE_REL_BASED_RISCV_LOW12I:
> + case IMAGE_REL_BASED_RISCV_LOW12S:
> + /* We know that we're 4k aligned */
> + if (delta & 0xfff) {
> + printf("Unsupported reloc offset\n");
> + return EFI_LOAD_ERROR;
> + }
> + break;
> +#endif
> default:
> printf("Unknown Relocation off %x type %x\n",
> offset, type);
> --
> 2.12.3
Hi Alex
The title of this patch seems to be as" efi_loader: Add support for
HI20 PE relocations for RISC-V "
And I am not sure if it shall belong to efi tree.
Rick
More information about the U-Boot
mailing list