On 15.02.2016 20:22, Peter Maydell wrote: > In v8 trying to switch mode to Mon from Secure EL1 is an > illegal mode switch. (In v7 this is impossible as all secure > modes except User are at EL3.) We can handle this case by > making a switch to Mon valid only if the current EL is 3, > which then gives the correct answer whether EL3 is AArch32 > or AArch64. > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org>
Reviewed-by: Sergey Fedorov <serge.f...@gmail.com> > --- > target-arm/helper.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/target-arm/helper.c b/target-arm/helper.c > index 4074b97..e7b3eb3 100644 > --- a/target-arm/helper.c > +++ b/target-arm/helper.c > @@ -5188,7 +5188,7 @@ static int bad_mode_switch(CPUARMState *env, int mode) > return !arm_feature(env, ARM_FEATURE_EL2) > || arm_current_el(env) < 2 || arm_is_secure(env); > case ARM_CPU_MODE_MON: > - return !arm_is_secure(env); > + return arm_current_el(env) < 3; > default: > return 1; > }