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
>