Fix ppc32 register dumps on 64-bit hosts.
authorpbrook <pbrook@c046a42c-6fe2-441c-8c8c-71466251a162>
Fri, 23 Nov 2007 17:33:12 +0000 (17:33 +0000)
committerpbrook <pbrook@c046a42c-6fe2-441c-8c8c-71466251a162>
Fri, 23 Nov 2007 17:33:12 +0000 (17:33 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3723 c046a42c-6fe2-441c-8c8c-71466251a162

hw/ppc_oldworld.c
target-ppc/cpu.h
target-ppc/helper.c
target-ppc/op_helper.c

index f3fe1a9..8a13737 100644 (file)
@@ -93,7 +93,8 @@ static int vga_osi_call (CPUState *env)
         /* R6 = x, R7 = y, R8 = visible, R9 = data */
         break;
     default:
-        fprintf(stderr, "unsupported OSI call R5=" REGX "\n", env->gpr[5]);
+        fprintf(stderr, "unsupported OSI call R5=" REGX "\n",
+                (target_ulong)env->gpr[5]);
         break;
     }
 
index 365d836..0630a6e 100644 (file)
@@ -30,7 +30,6 @@
 typedef uint64_t ppc_gpr_t;
 #define TARGET_GPR_BITS  64
 #define TARGET_LONG_BITS 64
-#define REGX "%016" PRIx64
 #define TARGET_PAGE_BITS 12
 
 #else /* defined (TARGET_PPC64) */
@@ -43,11 +42,9 @@ typedef uint64_t ppc_gpr_t;
  */
 typedef uint64_t ppc_gpr_t;
 #define TARGET_GPR_BITS  64
-#define REGX "%08" PRIx64
 #else /* (HOST_LONG_BITS >= 64) */
 typedef uint32_t ppc_gpr_t;
 #define TARGET_GPR_BITS  32
-#define REGX "%08" PRIx32
 #endif /* (HOST_LONG_BITS >= 64) */
 
 #define TARGET_LONG_BITS 32
@@ -72,6 +69,10 @@ typedef uint32_t ppc_gpr_t;
 
 #endif /* defined (TARGET_PPC64) */
 
+/* A ppc_gpr_t should not be printed directly as the high bits may be
+   garbage.  It should always be cast to a target_ulong first.  */
+#define REGX TARGET_FMT_lx
+
 #include "cpu-defs.h"
 
 #define ADDRX TARGET_FMT_lx
index cb9b778..149f6cb 100644 (file)
@@ -2169,8 +2169,9 @@ static always_inline void dump_syscall (CPUState *env)
 {
     fprintf(logfile, "syscall r0=0x" REGX " r3=0x" REGX " r4=0x" REGX
             " r5=0x" REGX " r6=0x" REGX " nip=0x" ADDRX "\n",
-            env->gpr[0], env->gpr[3], env->gpr[4],
-            env->gpr[5], env->gpr[6], env->nip);
+            (target_ulong)env->gpr[0], (target_ulong)env->gpr[3],
+            (target_ulong)env->gpr[4], (target_ulong)env->gpr[5],
+            (target_ulong)env->gpr[6], env->nip);
 }
 
 /* Note that this function should be greatly optimized
index 172dd48..1a36dfa 100644 (file)
@@ -2920,7 +2920,8 @@ void do_4xx_tlbwe_hi (void)
 
 #if defined (DEBUG_SOFTWARE_TLB)
     if (loglevel != 0) {
-        fprintf(logfile, "%s T0 " REGX " T1 " REGX "\n", __func__, T0, T1);
+        fprintf(logfile, "%s T0 " REGX " T1 " REGX "\n", __func__,
+                (target_ulong)T0, (target_ulong)T1);
     }
 #endif
     T0 &= 0x3F;
@@ -2989,7 +2990,8 @@ void do_4xx_tlbwe_lo (void)
 
 #if defined (DEBUG_SOFTWARE_TLB)
     if (loglevel != 0) {
-        fprintf(logfile, "%s T0 " REGX " T1 " REGX "\n", __func__, T0, T1);
+        fprintf(logfile, "%s T0 " REGX " T1 " REGX "\n", __func__,
+                (targt_ulong)T0, (target_ulong)T1);
     }
 #endif
     T0 &= 0x3F;
@@ -3023,7 +3025,7 @@ void do_440_tlbwe (int word)
 #if defined (DEBUG_SOFTWARE_TLB)
     if (loglevel != 0) {
         fprintf(logfile, "%s word %d T0 " REGX " T1 " REGX "\n",
-                __func__, word, T0, T1);
+                __func__, word, (target_ulong)T0, (target_ulong)T1);
     }
 #endif
     do_flush_tlbs = 0;