db34050
From: Greg Kurz <gkurz@linux.vnet.ibm.com>
db34050
Date: Fri, 15 Jan 2016 16:00:44 +0100
db34050
Subject: [PATCH] target-ppc: gdbstub: fix spe registers for little-endian
db34050
 guests
db34050
db34050
Let's reuse the ppc_maybe_bswap_register() helper, like we already do
db34050
with the general registers.
db34050
db34050
Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
db34050
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
db34050
(cherry picked from commit 95f5b540abd964ac3bc9c63434d07681a5a175eb)
db34050
---
db34050
 target-ppc/translate_init.c | 11 ++++++++++-
db34050
 1 file changed, 10 insertions(+), 1 deletion(-)
db34050
db34050
diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
db34050
index a72e4b6..879d283 100644
db34050
--- a/target-ppc/translate_init.c
db34050
+++ b/target-ppc/translate_init.c
db34050
@@ -8852,6 +8852,7 @@ static int gdb_get_spe_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
db34050
     if (n < 32) {
db34050
 #if defined(TARGET_PPC64)
db34050
         stl_p(mem_buf, env->gpr[n] >> 32);
db34050
+        ppc_maybe_bswap_register(env, mem_buf, 4);
db34050
 #else
db34050
         stl_p(mem_buf, env->gprh[n]);
db34050
 #endif
db34050
@@ -8859,10 +8860,12 @@ static int gdb_get_spe_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
db34050
     }
db34050
     if (n == 32) {
db34050
         stq_p(mem_buf, env->spe_acc);
db34050
+        ppc_maybe_bswap_register(env, mem_buf, 8);
db34050
         return 8;
db34050
     }
db34050
     if (n == 33) {
db34050
         stl_p(mem_buf, env->spe_fscr);
db34050
+        ppc_maybe_bswap_register(env, mem_buf, 4);
db34050
         return 4;
db34050
     }
db34050
     return 0;
db34050
@@ -8873,7 +8876,11 @@ static int gdb_set_spe_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
db34050
     if (n < 32) {
db34050
 #if defined(TARGET_PPC64)
db34050
         target_ulong lo = (uint32_t)env->gpr[n];
db34050
-        target_ulong hi = (target_ulong)ldl_p(mem_buf) << 32;
db34050
+        target_ulong hi;
db34050
+
db34050
+        ppc_maybe_bswap_register(env, mem_buf, 4);
db34050
+
db34050
+        hi = (target_ulong)ldl_p(mem_buf) << 32;
db34050
         env->gpr[n] = lo | hi;
db34050
 #else
db34050
         env->gprh[n] = ldl_p(mem_buf);
db34050
@@ -8881,10 +8888,12 @@ static int gdb_set_spe_reg(CPUPPCState *env, uint8_t *mem_buf, int n)
db34050
         return 4;
db34050
     }
db34050
     if (n == 32) {
db34050
+        ppc_maybe_bswap_register(env, mem_buf, 8);
db34050
         env->spe_acc = ldq_p(mem_buf);
db34050
         return 8;
db34050
     }
db34050
     if (n == 33) {
db34050
+        ppc_maybe_bswap_register(env, mem_buf, 4);
db34050
         env->spe_fscr = ldl_p(mem_buf);
db34050
         return 4;
db34050
     }