target-arm: Restrict check_ap() use of S and R bits to v6 and earlier
authorPeter Maydell <peter.maydell@linaro.org>
Thu, 20 Feb 2014 10:35:51 +0000 (10:35 +0000)
committerPeter Maydell <peter.maydell@linaro.org>
Thu, 20 Feb 2014 10:35:51 +0000 (10:35 +0000)
The SCTLR bits S and R (8 and 9) only exist in ARMv6 and earlier.
In ARMv7 these bits RAZ, and in ARMv8 they are reassigned. Guard
the use of them in check_ap() so that we don't get incorrect results
for ARMv8 CPUs.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
target-arm/helper.c

index d9e94f200dc1ec2baf71210fd5d75fa12727af14..13707a37a9a8e516f88ad250f02f9dc8107ae1cf 100644 (file)
@@ -2767,6 +2767,9 @@ static inline int check_ap(CPUARMState *env, int ap, int domain_prot,
 
   switch (ap) {
   case 0:
+      if (arm_feature(env, ARM_FEATURE_V7)) {
+          return 0;
+      }
       if (access_type == 1)
           return 0;
       switch (env->cp15.c1_sys & (SCTLR_S | SCTLR_R)) {