summary refs log tree commit diff stats
path: root/linux-user/main.c
diff options
context:
space:
mode:
authorJanne Grunau <j@jannau.net>2014-02-20 10:35:56 +0000
committerPeter Maydell <peter.maydell@linaro.org>2014-02-20 10:35:56 +0000
commit2ea5a2ca1f1dc302652d2ad5035e0b209ccaa177 (patch)
treec35fdc143b5569bc9f3a5224f6789e2d59704159 /linux-user/main.c
parent60510aed69f69bfd44bf6e58c571dbba8b1b43a0 (diff)
downloadfocaccia-qemu-2ea5a2ca1f1dc302652d2ad5035e0b209ccaa177.tar.gz
focaccia-qemu-2ea5a2ca1f1dc302652d2ad5035e0b209ccaa177.zip
linux-user: AArch64: Fix exclusive store of the zero register
Signed-off-by: Janne Grunau <j@jannau.net>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'linux-user/main.c')
-rw-r--r--linux-user/main.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/linux-user/main.c b/linux-user/main.c
index cabc9e1a0e..919297736c 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -953,7 +953,8 @@ static int do_strex_a64(CPUARMState *env)
             goto finish;
         }
     }
-    val = env->xregs[rt];
+    /* handle the zero register */
+    val = rt == 31 ? 0 : env->xregs[rt];
     switch (size) {
     case 0:
         segv = put_user_u8(val, addr);
@@ -972,7 +973,8 @@ static int do_strex_a64(CPUARMState *env)
         goto error;
     }
     if (is_pair) {
-        val = env->xregs[rt2];
+        /* handle the zero register */
+        val = rt2 == 31 ? 0 : env->xregs[rt2];
         if (size == 2) {
             segv = put_user_u32(val, addr + 4);
         } else {