aboutsummaryrefslogtreecommitdiff
path: root/hw/riscv/virt.c
diff options
context:
space:
mode:
authorAlistair Francis <Alistair.Francis@wdc.com>2019-01-24 17:37:47 +0000
committerPalmer Dabbelt <palmer@sifive.com>2019-02-11 15:56:22 -0800
commit40e46e516d90c2dfe8e8de3741c1c65f1b526502 (patch)
treee2138826726c02c175fbc110d63f5653bb5902a2 /hw/riscv/virt.c
parentff9f31d9a0d45da83f34207b7ccace850cfc465b (diff)
downloadqemu-40e46e516d90c2dfe8e8de3741c1c65f1b526502.zip
qemu-40e46e516d90c2dfe8e8de3741c1c65f1b526502.tar.gz
qemu-40e46e516d90c2dfe8e8de3741c1c65f1b526502.tar.bz2
riscv: Ensure the kernel start address is correctly cast
Cast the kernel start address to the target bit length. This ensures that we calculate the initrd offset to a valid address for the architecture. Steps to reproduce the original problem (reported by Alex): Build U-Boot for the virt machine for riscv32. Then run it with $ qemu-system-riscv32 -M virt -kernel u-boot -nographic -initrd <a file> You can find the initrd address with U-Boot# fdt addr $fdtcontroladdr U-Boot# fdt ls /chosen Then take a peek at that address: U-Boot# md.b <addr> and you will see that there is nothing there without this patch. The reason is that the binary was loaded to a negative address. Signed-off-by: Alistair Francis <alistair.francis@wdc.com> Suggested-by: Alexander Graf <agraf@suse.de> Reported-by: Alexander Graf <agraf@suse.de> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
Diffstat (limited to 'hw/riscv/virt.c')
-rw-r--r--hw/riscv/virt.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c
index 3e8b19c..fc4c6b3 100644
--- a/hw/riscv/virt.c
+++ b/hw/riscv/virt.c
@@ -62,7 +62,7 @@ static const struct MemmapEntry {
[VIRT_PCIE_ECAM] = { 0x30000000, 0x10000000 },
};
-static uint64_t load_kernel(const char *kernel_filename)
+static target_ulong load_kernel(const char *kernel_filename)
{
uint64_t kernel_entry, kernel_high;