[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 03/19] hw/arm/armv7m: Honour CPU's address space for
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PATCH 03/19] hw/arm/armv7m: Honour CPU's address space for image loads |
Date: |
Tue, 20 Feb 2018 18:03:09 +0000 |
Instead of loading guest images to the system address space, use the
CPU's address space. This is important if we're trying to load the
file to memory or via an alias memory region that is provided by an
SoC object and thus not mapped into the system address space.
Signed-off-by: Peter Maydell <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
---
hw/arm/armv7m.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c
index 56770a7048..facc536b07 100644
--- a/hw/arm/armv7m.c
+++ b/hw/arm/armv7m.c
@@ -270,6 +270,9 @@ void armv7m_load_kernel(ARMCPU *cpu, const char
*kernel_filename, int mem_size)
uint64_t entry;
uint64_t lowaddr;
int big_endian;
+ AddressSpace *as;
+ int asidx;
+ CPUState *cs = CPU(cpu);
#ifdef TARGET_WORDS_BIGENDIAN
big_endian = 1;
@@ -282,11 +285,19 @@ void armv7m_load_kernel(ARMCPU *cpu, const char
*kernel_filename, int mem_size)
exit(1);
}
+ if (arm_feature(&cpu->env, ARM_FEATURE_EL3)) {
+ asidx = ARMASIdx_S;
+ } else {
+ asidx = ARMASIdx_NS;
+ }
+ as = cpu_get_address_space(cs, asidx);
+
if (kernel_filename) {
- image_size = load_elf(kernel_filename, NULL, NULL, &entry, &lowaddr,
- NULL, big_endian, EM_ARM, 1, 0);
+ image_size = load_elf_as(kernel_filename, NULL, NULL, &entry, &lowaddr,
+ NULL, big_endian, EM_ARM, 1, 0, as);
if (image_size < 0) {
- image_size = load_image_targphys(kernel_filename, 0, mem_size);
+ image_size = load_image_targphys_as(kernel_filename, 0,
+ mem_size, as);
lowaddr = 0;
}
if (image_size < 0) {
--
2.16.1
- [Qemu-devel] [PATCH 09/19] hw/misc/unimp: Move struct to header file, (continued)
- [Qemu-devel] [PATCH 09/19] hw/misc/unimp: Move struct to header file, Peter Maydell, 2018/02/20
- [Qemu-devel] [PATCH 08/19] target/arm: Add Cortex-M33, Peter Maydell, 2018/02/20
- [Qemu-devel] [PATCH 01/19] loader: Add new load_ramdisk_as(), Peter Maydell, 2018/02/20
- [Qemu-devel] [PATCH 17/19] hw/misc/iotkit-secctl: Add remaining simple registers, Peter Maydell, 2018/02/20
- [Qemu-devel] [PATCH 15/19] hw/misc/iotkit-secctl: Arm IoT Kit security controller initial skeleton, Peter Maydell, 2018/02/20
- [Qemu-devel] [PATCH 03/19] hw/arm/armv7m: Honour CPU's address space for image loads,
Peter Maydell <=
- [Qemu-devel] [PATCH 05/19] armv7m: Forward idau property to CPU object, Peter Maydell, 2018/02/20
- [Qemu-devel] [PATCH 13/19] hw/misc/mps2-fpgaio: FPGA control block for MPS2 AN505, Peter Maydell, 2018/02/20
- [Qemu-devel] [PATCH 06/19] target/arm: Define init-svtor property for the reset secure VTOR value, Peter Maydell, 2018/02/20
- [Qemu-devel] [PATCH 14/19] hw/misc/tz-ppc: Model TrustZone peripheral protection controller, Peter Maydell, 2018/02/20
- [Qemu-devel] [PATCH 16/19] hw/misc/iotkit-secctl: Add handling for PPCs, Peter Maydell, 2018/02/20