On Tue, May 19, 2015 at 07:33:23PM +0100, Peter Maydell wrote: > If the SCTLR.UMA trap bit is set then attempts by EL0 to update > the PSTATE DAIF bits via "MSR DAIFSet, imm" and "MSR DAIFClr, imm" > instructions will raise an exception. We were failing to set > the syndrome information for this exception, which meant that > it would be reported as a repeat of whatever the previous > exception was. Set the correct syndrome information. > --- > target-arm/op_helper.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/target-arm/op_helper.c b/target-arm/op_helper.c > index 43e3457..5af4a0e 100644 > --- a/target-arm/op_helper.c > +++ b/target-arm/op_helper.c > @@ -381,6 +381,9 @@ void HELPER(msr_i_pstate)(CPUARMState *env, uint32_t op, > uint32_t imm) > */ > if (arm_current_el(env) == 0 && !(env->cp15.sctlr_el[1] & SCTLR_UMA)) { > env->exception.target_el = exception_target_el(env); > + env->exception.syndrome = syn_aa64_sysregtrap(0, extract32(op, 0, 3), > + extract32(op, 3, 3), 4, > + 0x1f, imm, 0);
Did you possibly reverse the argument order of 0x1f and imm? Cheers, Edgar > raise_exception(env, EXCP_UDEF); > } > > -- > 1.9.1 >