[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 2/6] Infer endianness from SCTLR reset value.
From: |
Julian Brown |
Subject: |
[Qemu-devel] [PATCH v2 2/6] Infer endianness from SCTLR reset value. |
Date: |
Wed, 7 Dec 2016 06:48:14 -0800 |
This patch uses the reset value of the SCTLR register (e.g. as modified
by the "cfgend" parameter introduced by the previous patch) to set the
endianness used by QEMU when invoked with a null kernel, e.g. from GDB:
(gdb) target remote | qemu-arm-system [options] -cpu=cortex-a15,cfgend=yes \
-kernel /dev/null
(gdb) load
(gdb) [...]
In this scenario, the usual method of probing the kernel binary for the
correct endianness to use will not work.
Signed-off-by: Julian Brown <address@hidden>
---
hw/arm/boot.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/hw/arm/boot.c b/hw/arm/boot.c
index 942416d..68a6574 100644
--- a/hw/arm/boot.c
+++ b/hw/arm/boot.c
@@ -894,7 +894,21 @@ static void arm_load_kernel_notify(Notifier *notifier,
void *data)
entry = info->loader_start + kernel_load_offset;
kernel_size = load_image_targphys(info->kernel_filename, entry,
info->ram_size - kernel_load_offset);
- is_linux = 1;
+ if (kernel_size > 0) {
+ is_linux = 1;
+ } else {
+ /* We've been launched with a kernel of /dev/null or similar.
+ * Infer endianness from the reset value of the SCTLR for this
+ * CPU/board. (This can be altered using the cfgend parameter.)
+ */
+ if (!arm_feature(&cpu->env, ARM_FEATURE_V7) &&
+ (cpu->reset_sctlr & SCTLR_B) != 0)
+ info->endianness = ARM_ENDIANNESS_BE32;
+ else if ((cpu->reset_sctlr & SCTLR_EE) != 0)
+ info->endianness = ARM_ENDIANNESS_BE8;
+ else
+ info->endianness = ARM_ENDIANNESS_LE;
+ }
}
if (kernel_size < 0) {
fprintf(stderr, "qemu: could not load kernel '%s'\n",
--
2.8.1
- [Qemu-devel] [PATCH v2 0/6] ARM BE8/BE32 big-endian system-mode fixes (semihosting, gdbstub), Julian Brown, 2016/12/07
- [Qemu-devel] [PATCH v2 1/6] Add cfgend parameter for ARM CPU selection., Julian Brown, 2016/12/07
- [Qemu-devel] [PATCH v2 2/6] Infer endianness from SCTLR reset value.,
Julian Brown <=
- [Qemu-devel] [PATCH v2 3/6] ARM big-endian system-mode semihosting support., Julian Brown, 2016/12/07
- [Qemu-devel] [PATCH v2 5/6] Fix Thumb-1 BE32 execution and disassembly., Julian Brown, 2016/12/07
- [Qemu-devel] [PATCH v2 4/6] ARM big-endian system-mode gdbstub support., Julian Brown, 2016/12/07
- [Qemu-devel] [PATCH v2 6/6] ARM BE32 watchpoint fix., Julian Brown, 2016/12/07
- Re: [Qemu-devel] [PATCH v2 0/6] ARM BE8/BE32 big-endian system-mode fixes (semihosting, gdbstub), no-reply, 2016/12/07
- Re: [Qemu-devel] [PATCH v2 0/6] ARM BE8/BE32 big-endian system-mode fixes (semihosting, gdbstub), no-reply, 2016/12/07