Index: target-arm/helper.c =================================================================== --- target-arm/helper.c (revision 4220) +++ target-arm/helper.c (working copy) @@ -607,6 +607,8 @@ env->regs[12] = v7m_pop(env); env->regs[14] = v7m_pop(env); env->regs[15] = v7m_pop(env); + if ((env->thumb = (env->regs[15]&1)) == 1) + env->regs[15] &= ~1; xpsr = v7m_pop(env); xpsr_write(env, xpsr, 0xfffffdff); /* Undo stack alignment. */ @@ -679,7 +681,7 @@ } /* Switch to the handler mode. */ v7m_push(env, xpsr); - v7m_push(env, env->regs[15]); + v7m_push(env, env->regs[15] | (!!env->thumb) ); v7m_push(env, env->regs[14]); v7m_push(env, env->regs[12]); v7m_push(env, env->regs[3]);