grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Relocation overflow on RISC-V with multi-range memory layout


From: Wu, Fei
Subject: Re: Relocation overflow on RISC-V with multi-range memory layout
Date: Wed, 27 Sep 2023 14:16:40 +0800
User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0 Thunderbird/102.15.1

On 9/25/2023 4:51 PM, Wu, Fei wrote:
> Hi All,
> 
> I'm enabling PCIe passthrough on qemu riscv, the physical memory
> range between 3GB and 4GB is reserved. Therefore if guest has 4GB ram,
> two ranges are created as [2G, 3G) and [4G, 7G). More details can be
> found here:
> https://lore.kernel.org/all/CAKmqyKMtAzt5saCUMd4vXYfgAQibpzQJAhtTSuSb+yeKhcYpfw@mail.gmail.com/T/
> 
> When run grub.efi from uefi shell, a relocation problem happened in
> grub_arch_dl_relocate_symbols() of grub-core/kern/riscv/dl.c:
> 
>         case R_RISCV_CALL:
>         case R_RISCV_CALL_PLT:
>           {
>             grub_uint32_t *abs_place = place;
>             grub_ssize_t off = sym_addr - (grub_addr_t) place;
>             grub_uint32_t hi20, lo12;
> 
>             if (off != (grub_int32_t) off)
>               return grub_error (GRUB_ERR_BAD_MODULE, "relocation
> overflow");
> 
> It requires `off' in the range of int32, but it's not enforced since the
>> 4GB memory can be used. I'm not familiar with grub, but this patch does
> work for me:
> 
> --- a/include/grub/riscv64/efi/memory.h
> +++ b/include/grub/riscv64/efi/memory.h
> @@ -1,6 +1,6 @@
>  #ifndef GRUB_MEMORY_CPU_HEADER
>  #include <grub/efi/memory.h>
> 
> -#define GRUB_EFI_MAX_USABLE_ADDRESS 0xffffffffffffULL
> +#define GRUB_EFI_MAX_USABLE_ADDRESS 0xffffffffULL
> 
Anyone can help take a look? I will send it out for review if this is
the right fix.

The test I have done against commit db1faedcc:

qemu-system-riscv64 -nographic \
 -M virt,pflash0=pflash0,pflash1=pflash1,acpi=off \
 -m 3G -smp 2 \
 -blockdev
node-name=pflash0,driver=file,read-only=on,filename=RISCV_VIRT_CODE.fd \
 -blockdev node-name=pflash1,driver=file,filename=RISCV_VIRT_VARS.fd \
 -device vfio-pci,host=01:00.0 -device vfio-pci,host=01:00.1 \
 -device virtio-blk-device,drive=hd0 \
 -drive file=fat:rw:/home/wufei/src/fat,id=hd0

then run grubriscv64.efi on uefi shell:

FS0:\> grubriscv64.efi
...
ProtectUefiImageCommon - 0xBED9E540
  - 0x00000000BDCCB000 - 0x00000000004DF000
SetUefiImageMemoryAttributes - 0x00000000BDCCB000 - 0x0000000000001000
(0x0000000000004000)
CpuSetMemoryAttributes: Set memory attributes not supported yet
SetUefiImageMemoryAttributes - 0x00000000BDCCC000 - 0x000000000000C000
(0x0000000000020000)
CpuSetMemoryAttributes: Set memory attributes not supported yet
SetUefiImageMemoryAttributes - 0x00000000BDCD8000 - 0x00000000004D2000
(0x0000000000004000)
CpuSetMemoryAttributes: Set memory attributes not supported yet
InstallProtocolInterface: 752F3136-4E16-4FDC-A22A-E5F46812F4CA 83FFF720
CpuSetMemoryAttributes: Set memory attributes not supported yet
relocation overflow
Aborted. Press any key to exit

Thanks,
Fei.
> Any comments?
> 
> Thanks,
> Fei.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]