From 9b605b9eaee7845353f32aed23e8b9085bfa44ee Mon Sep 17 00:00:00 2001 From: pbrook Date: Fri, 23 Nov 2007 17:33:12 +0000 Subject: [PATCH] Fix ppc32 register dumps on 64-bit hosts. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3723 c046a42c-6fe2-441c-8c8c-71466251a162 --- hw/ppc_oldworld.c | 3 ++- target-ppc/cpu.h | 7 ++++--- target-ppc/helper.c | 5 +++-- target-ppc/op_helper.c | 8 +++++--- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/hw/ppc_oldworld.c b/hw/ppc_oldworld.c index f3fe1a9d70..8a1373745c 100644 --- a/hw/ppc_oldworld.c +++ b/hw/ppc_oldworld.c @@ -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; } diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h index 365d83697c..0630a6e8ef 100644 --- a/target-ppc/cpu.h +++ b/target-ppc/cpu.h @@ -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 diff --git a/target-ppc/helper.c b/target-ppc/helper.c index cb9b778cc7..149f6cbfa5 100644 --- a/target-ppc/helper.c +++ b/target-ppc/helper.c @@ -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 diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c index 172dd48be4..1a36dfaef1 100644 --- a/target-ppc/op_helper.c +++ b/target-ppc/op_helper.c @@ -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; -- 2.11.0