linux-user: arm: set CPSR.E/SCTLR.E0E correctly for BE mode
authorPeter Crosthwaite <peter.crosthwaite@xilinx.com>
Fri, 4 Mar 2016 11:30:19 +0000 (11:30 +0000)
committerPeter Maydell <peter.maydell@linaro.org>
Fri, 4 Mar 2016 11:30:19 +0000 (11:30 +0000)
If doing big-endian linux-user mode, set both the CPSR.E and SCTLR.E0E
bits. This sets big-endian mode for data accesses.

Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
linux-user/main.c

index fe2a8dd6dbe616d80a9427597f4d1782dd70aa1e..510b3b7740d1ea4efe26fd84cd7d8cfc8b0c64f6 100644 (file)
@@ -4453,7 +4453,8 @@ int main(int argc, char **argv, char **envp)
         /* Enable BE8.  */
         if (EF_ARM_EABI_VERSION(info->elf_flags) >= EF_ARM_EABI_VER4
             && (info->elf_flags & EF_ARM_BE8)) {
-            /* nothing for now, CPSR.E not emulated yet */
+            env->uncached_cpsr |= CPSR_E;
+            env->cp15.sctlr_el[1] |= SCTLR_E0E;
         } else {
             env->cp15.sctlr_el[1] |= SCTLR_B;
         }