* [Qemu-devel] [patch] Arm bugs
@ 2005-12-13 22:27 Paul Brook
0 siblings, 0 replies; only message in thread
From: Paul Brook @ 2005-12-13 22:27 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 335 bytes --]
The attached patch fixes two bugs in the Arm system emulation.
Firstly do_interrupt wasn't switching to Arm mode properly.
Secondly the #if in cpu_reset is the wrong way round. Linux works mostly by
chance: the early boot code does a SWI, and the exception vector happens to
drop it back at a convenient place in the loader.
Paul
[-- Attachment #2: patch.qemu_thumb_excp --]
[-- Type: text/x-diff, Size: 1286 bytes --]
=== target-arm/helper.c
==================================================================
--- target-arm/helper.c (revision 1912)
+++ target-arm/helper.c (local)
@@ -162,10 +162,11 @@
}
switch_mode (env, new_mode);
env->spsr = cpsr_read(env);
- /* Switch to the new mode, and clear the thumb bit. */
+ /* Switch to the new mode, and switch to Arm mode. */
/* ??? Thumb interrupt handlers not implemented. */
- env->uncached_cpsr = (env->uncached_cpsr & ~(CPSR_M | CPSR_T)) | new_mode;
+ env->uncached_cpsr = (env->uncached_cpsr & ~CPSR_M) | new_mode;
env->uncached_cpsr |= mask;
+ env->thumb = 0;
env->regs[14] = env->regs[15] + offset;
env->regs[15] = addr;
env->interrupt_request |= CPU_INTERRUPT_EXITTB;
=== target-arm/translate.c
==================================================================
--- target-arm/translate.c (revision 1912)
+++ target-arm/translate.c (local)
@@ -2431,10 +2431,10 @@
void cpu_reset(CPUARMState *env)
{
#if defined (CONFIG_USER_ONLY)
+ env->uncached_cpsr = ARM_CPU_MODE_USR;
+#else
/* SVC mode with interrupts disabled. */
env->uncached_cpsr = ARM_CPU_MODE_SVC | CPSR_A | CPSR_F | CPSR_I;
-#else
- env->uncached_cpsr = ARM_CPU_MODE_USR;
#endif
env->regs[15] = 0;
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2005-12-13 22:28 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-12-13 22:27 [Qemu-devel] [patch] Arm bugs Paul Brook
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.