aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Davidsaver <mdavidsaver@gmail.com>2015-12-02 19:18:47 -0500
committerPeter Maydell <peter.maydell@linaro.org>2017-01-23 13:33:40 +0000
commit48fa28e2864a90e89316fd2f01c6b847aa51c4d9 (patch)
treef4b98d77877912c7e2f316ac3c6c7a13a91e0bde
parentb507f42855c2b3d1bb0d9264f232ebd30ab52da8 (diff)
armv7m: observable initial register state
At least for TI TM4C1294. LR==-1 XPSR==0 PRIMASK, FAULTMASK, and BASEPRI all cleared so exception handlers are unmasked. STKALIGN set. Signed-off-by: Michael Davidsaver <mdavidsaver@gmail.com>
-rw-r--r--target/arm/cpu.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index 3a260f190c..a51874b951 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -189,7 +189,10 @@ static void arm_cpu_reset(CPUState *s)
env->v7m.exception_prio = env->v7m.pending_prio = 0x100;
- env->daif &= ~PSTATE_I;
+ env->v7m.ccr = 1<<9; /* STKALIGN */
+
+ env->daif &= ~(PSTATE_I|PSTATE_F);
+ env->ZF = 1;
rom = rom_ptr(0);
if (rom) {
/* Address zero is covered by ROM which hasn't yet been
@@ -208,6 +211,7 @@ static void arm_cpu_reset(CPUState *s)
}
env->regs[13] = initial_msp & 0xFFFFFFFC;
+ env->regs[14] = 0xffffffff;
env->regs[15] = initial_pc & ~1;
env->thumb = initial_pc & 1;
}