[U-Boot] [PATCH] riscv: Add support for HI20 PE relocations
Rick Chen
rickchen36 at gmail.com
Wed Jun 6 09:30:33 UTC 2018
2018-06-06 17:18 GMT+08:00 Alexander Graf <agraf at suse.de>:
>
>
> On 06.06.18 11:15, Rick Chen wrote:
>>> -----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.
>
> I'll be happy to take it via the efi tree, yes. It only affects the efi
> PE loader.
>
>
Hi Alex
Thanks a lot. :)
Rick
> Alex
More information about the U-Boot
mailing list