arch-arm: Fix Secure state check in checkFPAdvSIMDTrap64
authorChuan Zhu <chuan.zhu@arm.com>
Tue, 2 Jan 2018 16:14:33 +0000 (16:14 +0000)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Fri, 16 Feb 2018 09:21:41 +0000 (09:21 +0000)
The old code does secure state check by using "el <= EL2", which
mis-considers secure EL1 and EL0. This patch fixes this by using
inSecureState as in ARM ARM.

Change-Id: I01d847c6af022c1462b16206cbc576f15f5569fd
Reviewed-by: Jack Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/8081
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/arch/arm/insts/static_inst.cc

index a7ba91e03ed42acddbe62cce7c4e8ab4f253db71..40a1fe4b3c971444f4a0fcc18cebce87afadba85 100644 (file)
@@ -629,9 +629,7 @@ ArmStaticInst::advSIMDFPAccessTrap64(ExceptionLevel el) const
 Fault
 ArmStaticInst::checkFPAdvSIMDTrap64(ThreadContext *tc, CPSR cpsr) const
 {
-    const ExceptionLevel el = (ExceptionLevel) (uint8_t)cpsr.el;
-
-    if (ArmSystem::haveVirtualization(tc) && el <= EL2) {
+    if (ArmSystem::haveVirtualization(tc) && !inSecureState(tc)) {
         HCPTR cptrEnCheck = tc->readMiscReg(MISCREG_CPTR_EL2);
         if (cptrEnCheck.tfp)
             return advSIMDFPAccessTrap64(EL2);