mirror of
https://github.com/mii443/qemu.git
synced 2025-12-03 11:08:25 +00:00
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>
This commit is contained in:
committed by
Palmer Dabbelt
parent
ff9f31d9a0
commit
40e46e516d
@@ -74,7 +74,7 @@ static const struct MemmapEntry {
|
||||
[SIFIVE_E_DTIM] = { 0x80000000, 0x4000 }
|
||||
};
|
||||
|
||||
static uint64_t load_kernel(const char *kernel_filename)
|
||||
static target_ulong load_kernel(const char *kernel_filename)
|
||||
{
|
||||
uint64_t kernel_entry, kernel_high;
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ static const struct MemmapEntry {
|
||||
|
||||
#define GEM_REVISION 0x10070109
|
||||
|
||||
static uint64_t load_kernel(const char *kernel_filename)
|
||||
static target_ulong load_kernel(const char *kernel_filename)
|
||||
{
|
||||
uint64_t kernel_entry, kernel_high;
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ static const struct MemmapEntry {
|
||||
[SPIKE_DRAM] = { 0x80000000, 0x0 },
|
||||
};
|
||||
|
||||
static uint64_t load_kernel(const char *kernel_filename)
|
||||
static target_ulong load_kernel(const char *kernel_filename)
|
||||
{
|
||||
uint64_t kernel_entry, kernel_high;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user