Peter Maydell <peter.mayd...@linaro.org> writes: > For M profile (unlike A profile) the reset value of R14 is specified > as 0xffffffff. (The rationale is that this is an illegal exception > return value, so if guest code tries to return to it it will result > in a helpful exception.) > > Registers r0 to r12 and the flags are architecturally UNKNOWN on > reset, so we leave those at zero. > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org>
Reviewed-by: Alex Bennée <alex.ben...@linaro.org> > --- > target/arm/cpu.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/target/arm/cpu.c b/target/arm/cpu.c > index 0814f73..e9f10f7 100644 > --- a/target/arm/cpu.c > +++ b/target/arm/cpu.c > @@ -196,6 +196,9 @@ static void arm_cpu_reset(CPUState *s) > */ > env->v7m.ccr = R_V7M_CCR_STKALIGN_MASK; > > + /* Unlike A/R profile, M profile defines the reset LR value */ > + env->regs[14] = 0xffffffff; > + > /* Load the initial SP and PC from the vector table at address 0 */ > rom = rom_ptr(0); > if (rom) { -- Alex Bennée