From 7fe48483cd90401de2477733ce65037ee0ed0906 Mon Sep 17 00:00:00 2001 From: bellard Date: Sat, 9 Oct 2004 18:08:01 +0000 Subject: monitor fixes git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1110 c046a42c-6fe2-441c-8c8c-71466251a162 --- cpu-all.h | 8 ++++---- cpu-exec.c | 8 ++++---- disas.c | 2 +- exec.c | 4 +++- linux-user/main.c | 6 +++--- monitor.c | 24 ++++++++++++++++++++++-- target-arm/cpu.h | 2 -- target-arm/translate.c | 12 +++++++----- target-i386/cpu.h | 1 - target-i386/helper.c | 6 +++--- target-i386/helper2.c | 24 +++++++++++++----------- target-i386/translate.c | 2 +- target-ppc/cpu.h | 1 - target-ppc/helper.c | 4 ++-- target-ppc/op_helper.c | 4 ++-- target-ppc/translate.c | 37 +++++++++++++++++++------------------ target-sparc/cpu.h | 1 - target-sparc/helper.c | 2 +- target-sparc/translate.c | 36 +++++++++++++++++++----------------- vl.c | 4 ++-- 20 files changed, 106 insertions(+), 82 deletions(-) diff --git a/cpu-all.h b/cpu-all.h index 04b5be3..2879c11 100644 --- a/cpu-all.h +++ b/cpu-all.h @@ -570,7 +570,6 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size); #define cpu_exec cpu_x86_exec #define cpu_gen_code cpu_x86_gen_code #define cpu_signal_handler cpu_x86_signal_handler -#define cpu_dump_state cpu_x86_dump_state #elif defined(TARGET_ARM) @@ -579,7 +578,6 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size); #define cpu_exec cpu_arm_exec #define cpu_gen_code cpu_arm_gen_code #define cpu_signal_handler cpu_arm_signal_handler -#define cpu_dump_state cpu_arm_dump_state #elif defined(TARGET_SPARC) @@ -588,7 +586,6 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size); #define cpu_exec cpu_sparc_exec #define cpu_gen_code cpu_sparc_gen_code #define cpu_signal_handler cpu_sparc_signal_handler -#define cpu_dump_state cpu_sparc_dump_state #elif defined(TARGET_PPC) @@ -597,7 +594,6 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size); #define cpu_exec cpu_ppc_exec #define cpu_gen_code cpu_ppc_gen_code #define cpu_signal_handler cpu_ppc_signal_handler -#define cpu_dump_state cpu_ppc_dump_state #else @@ -607,6 +603,10 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size); #endif /* SINGLE_CPU_DEFINES */ +void cpu_dump_state(CPUState *env, FILE *f, + int (*cpu_fprintf)(FILE *f, const char *fmt, ...), + int flags); + void cpu_abort(CPUState *env, const char *fmt, ...); extern CPUState *cpu_single_env; extern int code_copy_enabled; diff --git a/cpu-exec.c b/cpu-exec.c index 930bd7b..5229eaa 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -304,16 +304,16 @@ int cpu_exec(CPUState *env1) env->regs[R_EBP] = EBP; env->regs[R_ESP] = ESP; env->eflags = env->eflags | cc_table[CC_OP].compute_all() | (DF & DF_MASK); - cpu_x86_dump_state(env, logfile, X86_DUMP_CCOP); + cpu_dump_state(env, logfile, fprintf, X86_DUMP_CCOP); env->eflags &= ~(DF_MASK | CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C); #elif defined(TARGET_ARM) env->cpsr = compute_cpsr(); - cpu_arm_dump_state(env, logfile, 0); + cpu_dump_state(env, logfile, fprintf, 0); env->cpsr &= ~0xf0000000; #elif defined(TARGET_SPARC) - cpu_sparc_dump_state (env, logfile, 0); + cpu_dump_state (env, logfile, fprintf, 0); #elif defined(TARGET_PPC) - cpu_ppc_dump_state(env, logfile, 0); + cpu_dump_state(env, logfile, fprintf, 0); #else #error unsupported target CPU #endif diff --git a/disas.c b/disas.c index ccdcd24..86f29d2 100644 --- a/disas.c +++ b/disas.c @@ -282,7 +282,7 @@ void monitor_disas(target_ulong pc, int nb_insn, int is_physical, int flags) #elif defined(TARGET_PPC) print_insn = print_insn_ppc; #else - fprintf(out, "Asm output not supported on this arch\n"); + term_printf("Asm output not supported on this arch\n"); return; #endif diff --git a/exec.c b/exec.c index 0dc8d15..95883be 100644 --- a/exec.c +++ b/exec.c @@ -1255,7 +1255,9 @@ void cpu_abort(CPUState *env, const char *fmt, ...) vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); #ifdef TARGET_I386 - cpu_x86_dump_state(env, stderr, X86_DUMP_FPU | X86_DUMP_CCOP); + cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU | X86_DUMP_CCOP); +#else + cpu_dump_state(env, stderr, fprintf, 0); #endif va_end(ap); abort(); diff --git a/linux-user/main.c b/linux-user/main.c index bd24452..6ab024e 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -372,7 +372,7 @@ void cpu_loop(CPUARMState *env) error: fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", trapnr); - cpu_arm_dump_state(env, stderr, 0); + cpu_dump_state(env, stderr, fprintf, 0); abort(); } process_pending_signals(env); @@ -499,7 +499,7 @@ void cpu_loop (CPUSPARCState *env) break; default: printf ("Unhandled trap: 0x%x\n", trapnr); - cpu_sparc_dump_state(env, stderr, 0); + cpu_dump_state(env, stderr, fprintf, 0); exit (1); } process_pending_signals (env); @@ -563,7 +563,7 @@ void cpu_loop(CPUPPCState *env) if (trapnr != EXCP_SYSCALL_USER && trapnr != EXCP_BRANCH && trapnr != EXCP_TRACE) { if (loglevel > 0) { - cpu_ppc_dump_state(env, logfile, 0); + cpu_dump_state(env, logfile, fprintf, 0); } } switch(trapnr) { diff --git a/monitor.c b/monitor.c index 27e2619..de47684 100644 --- a/monitor.c +++ b/monitor.c @@ -101,6 +101,15 @@ void term_printf(const char *fmt, ...) va_end(ap); } +static int monitor_fprintf(FILE *stream, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + term_vprintf(fmt, ap); + va_end(ap); + return 0; +} + static int compare_cmd(const char *name, const char *list) { const char *p, *pstart; @@ -206,9 +215,11 @@ static void do_info_block(void) static void do_info_registers(void) { #ifdef TARGET_I386 - cpu_dump_state(cpu_single_env, stdout, X86_DUMP_FPU | X86_DUMP_CCOP); + cpu_dump_state(cpu_single_env, stdout, monitor_fprintf, + X86_DUMP_FPU | X86_DUMP_CCOP); #else - cpu_dump_state(cpu_single_env, stdout, 0); + cpu_dump_state(cpu_single_env, stdout, monitor_fprintf, + 0); #endif } @@ -1852,6 +1863,15 @@ void readline_find_completion(const char *cmdline) completion_index = strlen(str); bdrv_iterate(block_completion_it, (void *)str); break; + case 's': + /* XXX: more generic ? */ + if (!strcmp(cmd->name, "info")) { + completion_index = strlen(str); + for(cmd = info_cmds; cmd->name != NULL; cmd++) { + cmd_completion(str, cmd->name); + } + } + break; default: break; } diff --git a/target-arm/cpu.h b/target-arm/cpu.h index df25c57..7d34766 100644 --- a/target-arm/cpu.h +++ b/target-arm/cpu.h @@ -64,8 +64,6 @@ struct siginfo; int cpu_arm_signal_handler(int host_signum, struct siginfo *info, void *puc); -void cpu_arm_dump_state(CPUARMState *env, FILE *f, int flags); - #define TARGET_PAGE_BITS 12 #include "cpu-all.h" diff --git a/target-arm/translate.c b/target-arm/translate.c index 3185286..69bc8e2 100644 --- a/target-arm/translate.c +++ b/target-arm/translate.c @@ -824,18 +824,20 @@ void cpu_arm_close(CPUARMState *env) free(env); } -void cpu_arm_dump_state(CPUARMState *env, FILE *f, int flags) +void cpu_dump_state(CPUState *env, FILE *f, + int (*cpu_fprintf)(FILE *f, const char *fmt, ...), + int flags) { int i; for(i=0;i<16;i++) { - fprintf(f, "R%02d=%08x", i, env->regs[i]); + cpu_fprintf(f, "R%02d=%08x", i, env->regs[i]); if ((i % 4) == 3) - fprintf(f, "\n"); + cpu_fprintf(f, "\n"); else - fprintf(f, " "); + cpu_fprintf(f, " "); } - fprintf(f, "PSR=%08x %c%c%c%c\n", + cpu_fprintf(f, "PSR=%08x %c%c%c%c\n", env->cpsr, env->cpsr & (1 << 31) ? 'N' : '-', env->cpsr & (1 << 30) ? 'Z' : '-', diff --git a/target-i386/cpu.h b/target-i386/cpu.h index 14e7943..2b189ec 100644 --- a/target-i386/cpu.h +++ b/target-i386/cpu.h @@ -454,7 +454,6 @@ void cpu_x86_update_cr0(CPUX86State *env, uint32_t new_cr0); /* used to debug */ #define X86_DUMP_FPU 0x0001 /* dump FPU state too */ #define X86_DUMP_CCOP 0x0002 /* dump qemu flag cache */ -void cpu_x86_dump_state(CPUX86State *env, FILE *f, int flags); #define TARGET_PAGE_BITS 12 #include "cpu-all.h" diff --git a/target-i386/helper.c b/target-i386/helper.c index 3a6568e..7035e1c 100644 --- a/target-i386/helper.c +++ b/target-i386/helper.c @@ -872,7 +872,7 @@ void do_interrupt(int intno, int is_int, int error_code, } fprintf(logfile, "\n"); #if 0 - cpu_x86_dump_state(env, logfile, X86_DUMP_CCOP); + cpu_dump_state(env, logfile, fprintf, X86_DUMP_CCOP); { int i; uint8_t *ptr; @@ -1334,7 +1334,7 @@ void helper_lcall_protected_T0_T1(int shift, int next_eip) if (loglevel & CPU_LOG_PCALL) { fprintf(logfile, "lcall %04x:%08x s=%d\n", new_cs, new_eip, shift); - cpu_x86_dump_state(env, logfile, X86_DUMP_CCOP); + cpu_dump_state(env, logfile, fprintf, X86_DUMP_CCOP); } #endif if ((new_cs & 0xfffc) == 0) @@ -1596,7 +1596,7 @@ static inline void helper_ret_protected(int shift, int is_iret, int addend) if (loglevel & CPU_LOG_PCALL) { fprintf(logfile, "lret new %04x:%08x s=%d addend=0x%x\n", new_cs, new_eip, shift, addend); - cpu_x86_dump_state(env, logfile, X86_DUMP_CCOP); + cpu_dump_state(env, logfile, fprintf, X86_DUMP_CCOP); } #endif if ((new_cs & 0xfffc) == 0) diff --git a/target-i386/helper2.c b/target-i386/helper2.c index 0d5f439..76401d4 100644 --- a/target-i386/helper2.c +++ b/target-i386/helper2.c @@ -168,14 +168,16 @@ static const char *cc_op_str[] = { "SARL", }; -void cpu_x86_dump_state(CPUX86State *env, FILE *f, int flags) +void cpu_dump_state(CPUState *env, FILE *f, + int (*cpu_fprintf)(FILE *f, const char *fmt, ...), + int flags) { int eflags, i; char cc_op_name[32]; static const char *seg_name[6] = { "ES", "CS", "SS", "DS", "FS", "GS" }; eflags = env->eflags; - fprintf(f, "EAX=%08x EBX=%08x ECX=%08x EDX=%08x\n" + cpu_fprintf(f, "EAX=%08x EBX=%08x ECX=%08x EDX=%08x\n" "ESI=%08x EDI=%08x EBP=%08x ESP=%08x\n" "EIP=%08x EFL=%08x [%c%c%c%c%c%c%c] CPL=%d II=%d A20=%d\n", env->regs[R_EAX], env->regs[R_EBX], env->regs[R_ECX], env->regs[R_EDX], @@ -193,28 +195,28 @@ void cpu_x86_dump_state(CPUX86State *env, FILE *f, int flags) (env->a20_mask >> 20) & 1); for(i = 0; i < 6; i++) { SegmentCache *sc = &env->segs[i]; - fprintf(f, "%s =%04x %08x %08x %08x\n", + cpu_fprintf(f, "%s =%04x %08x %08x %08x\n", seg_name[i], sc->selector, (int)sc->base, sc->limit, sc->flags); } - fprintf(f, "LDT=%04x %08x %08x %08x\n", + cpu_fprintf(f, "LDT=%04x %08x %08x %08x\n", env->ldt.selector, (int)env->ldt.base, env->ldt.limit, env->ldt.flags); - fprintf(f, "TR =%04x %08x %08x %08x\n", + cpu_fprintf(f, "TR =%04x %08x %08x %08x\n", env->tr.selector, (int)env->tr.base, env->tr.limit, env->tr.flags); - fprintf(f, "GDT= %08x %08x\n", + cpu_fprintf(f, "GDT= %08x %08x\n", (int)env->gdt.base, env->gdt.limit); - fprintf(f, "IDT= %08x %08x\n", + cpu_fprintf(f, "IDT= %08x %08x\n", (int)env->idt.base, env->idt.limit); - fprintf(f, "CR0=%08x CR2=%08x CR3=%08x CR4=%08x\n", + cpu_fprintf(f, "CR0=%08x CR2=%08x CR3=%08x CR4=%08x\n", env->cr[0], env->cr[2], env->cr[3], env->cr[4]); if (flags & X86_DUMP_CCOP) { @@ -222,16 +224,16 @@ void cpu_x86_dump_state(CPUX86State *env, FILE *f, int flags) snprintf(cc_op_name, sizeof(cc_op_name), "%s", cc_op_str[env->cc_op]); else snprintf(cc_op_name, sizeof(cc_op_name), "[%d]", env->cc_op); - fprintf(f, "CCS=%08x CCD=%08x CCO=%-8s\n", + cpu_fprintf(f, "CCS=%08x CCD=%08x CCO=%-8s\n", env->cc_src, env->cc_dst, cc_op_name); } if (flags & X86_DUMP_FPU) { - fprintf(f, "ST0=%f ST1=%f ST2=%f ST3=%f\n", + cpu_fprintf(f, "ST0=%f ST1=%f ST2=%f ST3=%f\n", (double)env->fpregs[0], (double)env->fpregs[1], (double)env->fpregs[2], (double)env->fpregs[3]); - fprintf(f, "ST4=%f ST5=%f ST6=%f ST7=%f\n", + cpu_fprintf(f, "ST4=%f ST5=%f ST6=%f ST7=%f\n", (double)env->fpregs[4], (double)env->fpregs[5], (double)env->fpregs[7], diff --git a/target-i386/translate.c b/target-i386/translate.c index 111b889..bd2a61b 100644 --- a/target-i386/translate.c +++ b/target-i386/translate.c @@ -4641,7 +4641,7 @@ static inline int gen_intermediate_code_internal(CPUState *env, #ifdef DEBUG_DISAS if (loglevel & CPU_LOG_TB_CPU) { - cpu_dump_state(env, logfile, X86_DUMP_CCOP); + cpu_dump_state(env, logfile, fprintf, X86_DUMP_CCOP); } if (loglevel & CPU_LOG_TB_IN_ASM) { fprintf(logfile, "----------------\n"); diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h index 951c971..3198c9b 100644 --- a/target-ppc/cpu.h +++ b/target-ppc/cpu.h @@ -189,7 +189,6 @@ int cpu_ppc_signal_handler(int host_signum, struct siginfo *info, void do_interrupt (CPUPPCState *env); void cpu_loop_exit(void); -void cpu_ppc_dump_state(CPUPPCState *env, FILE *f, int flags); void dump_stack (CPUPPCState *env); uint32_t _load_xer (CPUPPCState *env); diff --git a/target-ppc/helper.c b/target-ppc/helper.c index 1ed07e8..de64672 100644 --- a/target-ppc/helper.c +++ b/target-ppc/helper.c @@ -521,7 +521,7 @@ int cpu_ppc_handle_mmu_fault (CPUState *env, uint32_t address, int rw, do_fault: #if defined (DEBUG_MMU) if (loglevel > 0) - cpu_ppc_dump_state(env, logfile, 0); + cpu_dump_state(env, logfile, fprintf, 0); #endif if (access_type == ACCESS_CODE) { exception = EXCP_ISI; @@ -676,7 +676,7 @@ void do_interrupt (CPUState *env) env->nip, excp << 8, env->error_code); } if (loglevel > 0) - cpu_ppc_dump_state(env, logfile, 0); + cpu_dump_state(env, logfile, fprintf, 0); } #endif if (loglevel & CPU_LOG_INT) { diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c index 30905d9..073ca37 100644 --- a/target-ppc/op_helper.c +++ b/target-ppc/op_helper.c @@ -466,14 +466,14 @@ void do_store_dbat (int ul, int nr) /* Special helpers for debug */ void dump_state (void) { - // cpu_ppc_dump_state(env, stdout, 0); + // cpu_dump_state(env, stdout, fprintf, 0); } void dump_rfi (void) { #if 0 printf("Return from interrupt => 0x%08x\n", env->nip); - // cpu_ppc_dump_state(env, stdout, 0); + // cpu_dump_state(env, stdout, fprintf, 0); #endif } diff --git a/target-ppc/translate.c b/target-ppc/translate.c index fd52f73..4647c6e 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -2924,24 +2924,26 @@ static int create_ppc_proc (opc_handler_t **ppc_opcodes, unsigned long pvr) /*****************************************************************************/ /* Misc PPC helpers */ -void cpu_ppc_dump_state(CPUPPCState *env, FILE *f, int flags) +void cpu_dump_state(CPUState *env, FILE *f, + int (*cpu_fprintf)(FILE *f, const char *fmt, ...), + int flags) { int i; - fprintf(f, "nip=0x%08x LR=0x%08x CTR=0x%08x XER=0x%08x " + cpu_fprintf(f, "nip=0x%08x LR=0x%08x CTR=0x%08x XER=0x%08x " "MSR=0x%08x\n", env->nip, env->lr, env->ctr, _load_xer(env), _load_msr(env)); for (i = 0; i < 32; i++) { if ((i & 7) == 0) - fprintf(f, "GPR%02d:", i); - fprintf(f, " %08x", env->gpr[i]); + cpu_fprintf(f, "GPR%02d:", i); + cpu_fprintf(f, " %08x", env->gpr[i]); if ((i & 7) == 7) - fprintf(f, "\n"); + cpu_fprintf(f, "\n"); } - fprintf(f, "CR: 0x"); + cpu_fprintf(f, "CR: 0x"); for (i = 0; i < 8; i++) - fprintf(f, "%01x", env->crf[i]); - fprintf(f, " ["); + cpu_fprintf(f, "%01x", env->crf[i]); + cpu_fprintf(f, " ["); for (i = 0; i < 8; i++) { char a = '-'; if (env->crf[i] & 0x08) @@ -2950,22 +2952,21 @@ void cpu_ppc_dump_state(CPUPPCState *env, FILE *f, int flags) a = 'G'; else if (env->crf[i] & 0x02) a = 'E'; - fprintf(f, " %c%c", a, env->crf[i] & 0x01 ? 'O' : ' '); + cpu_fprintf(f, " %c%c", a, env->crf[i] & 0x01 ? 'O' : ' '); } - fprintf(f, " ] "); - fprintf(f, "TB: 0x%08x %08x\n", cpu_ppc_load_tbu(env), + cpu_fprintf(f, " ] "); + cpu_fprintf(f, "TB: 0x%08x %08x\n", cpu_ppc_load_tbu(env), cpu_ppc_load_tbl(env)); for (i = 0; i < 16; i++) { if ((i & 3) == 0) - fprintf(f, "FPR%02d:", i); - fprintf(f, " %016llx", *((uint64_t *)&env->fpr[i])); + cpu_fprintf(f, "FPR%02d:", i); + cpu_fprintf(f, " %016llx", *((uint64_t *)&env->fpr[i])); if ((i & 3) == 3) - fprintf(f, "\n"); + cpu_fprintf(f, "\n"); } - fprintf(f, "SRR0 0x%08x SRR1 0x%08x DECR=0x%08x\n", + cpu_fprintf(f, "SRR0 0x%08x SRR1 0x%08x DECR=0x%08x\n", env->spr[SRR0], env->spr[SRR1], cpu_ppc_load_decr(env)); - fprintf(f, "reservation 0x%08x\n", env->reserve); - fflush(f); + cpu_fprintf(f, "reservation 0x%08x\n", env->reserve); } #if !defined(CONFIG_USER_ONLY) && defined (USE_OPENFIRMWARE) @@ -3170,7 +3171,7 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, #ifdef DEBUG_DISAS if (loglevel & CPU_LOG_TB_CPU) { fprintf(logfile, "---------------- excp: %04x\n", ctx.exception); - cpu_ppc_dump_state(env, logfile, 0); + cpu_dump_state(env, logfile, fprintf, 0); } if (loglevel & CPU_LOG_TB_IN_ASM) { fprintf(logfile, "IN: %s\n", lookup_symbol((void *)pc_start)); diff --git a/target-sparc/cpu.h b/target-sparc/cpu.h index 03698df..adf8df2 100644 --- a/target-sparc/cpu.h +++ b/target-sparc/cpu.h @@ -147,7 +147,6 @@ int cpu_sparc_close(CPUSPARCState *s); struct siginfo; int cpu_sparc_signal_handler(int hostsignum, struct siginfo *info, void *puc); -void cpu_sparc_dump_state(CPUSPARCState *env, FILE *f, int flags); #define TARGET_PAGE_BITS 12 /* 4k */ #include "cpu-all.h" diff --git a/target-sparc/helper.c b/target-sparc/helper.c index 63d08e7..93ef930 100644 --- a/target-sparc/helper.c +++ b/target-sparc/helper.c @@ -290,7 +290,7 @@ void do_interrupt(int intno, int is_int, int error_code, env->pc, env->npc, env->regwptr[6]); #if 0 - cpu_sparc_dump_state(env, logfile, 0); + cpu_dump_state(env, logfile, fprintf, 0); { int i; uint8_t *ptr; diff --git a/target-sparc/translate.c b/target-sparc/translate.c index d06886c..721a91d 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -1391,44 +1391,46 @@ CPUSPARCState *cpu_sparc_init(void) #define GET_FLAG(a,b) ((env->psr & a)?b:'-') -void cpu_sparc_dump_state(CPUSPARCState * env, FILE * f, int flags) +void cpu_dump_state(CPUState *env, FILE *f, + int (*cpu_fprintf)(FILE *f, const char *fmt, ...), + int flags) { int i, x; - fprintf(f, "pc: 0x%08x npc: 0x%08x\n", (int) env->pc, (int) env->npc); - fprintf(f, "General Registers:\n"); + cpu_fprintf(f, "pc: 0x%08x npc: 0x%08x\n", (int) env->pc, (int) env->npc); + cpu_fprintf(f, "General Registers:\n"); for (i = 0; i < 4; i++) - fprintf(f, "%%g%c: 0x%08x\t", i + '0', env->gregs[i]); - fprintf(f, "\n"); + cpu_fprintf(f, "%%g%c: 0x%08x\t", i + '0', env->gregs[i]); + cpu_fprintf(f, "\n"); for (; i < 8; i++) - fprintf(f, "%%g%c: 0x%08x\t", i + '0', env->gregs[i]); - fprintf(f, "\nCurrent Register Window:\n"); + cpu_fprintf(f, "%%g%c: 0x%08x\t", i + '0', env->gregs[i]); + cpu_fprintf(f, "\nCurrent Register Window:\n"); for (x = 0; x < 3; x++) { for (i = 0; i < 4; i++) - fprintf(f, "%%%c%d: 0x%08x\t", + cpu_fprintf(f, "%%%c%d: 0x%08x\t", (x == 0 ? 'o' : (x == 1 ? 'l' : 'i')), i, env->regwptr[i + x * 8]); - fprintf(f, "\n"); + cpu_fprintf(f, "\n"); for (; i < 8; i++) - fprintf(f, "%%%c%d: 0x%08x\t", + cpu_fprintf(f, "%%%c%d: 0x%08x\t", (x == 0 ? 'o' : x == 1 ? 'l' : 'i'), i, env->regwptr[i + x * 8]); - fprintf(f, "\n"); + cpu_fprintf(f, "\n"); } - fprintf(f, "\nFloating Point Registers:\n"); + cpu_fprintf(f, "\nFloating Point Registers:\n"); for (i = 0; i < 32; i++) { if ((i & 3) == 0) - fprintf(f, "%%f%02d:", i); - fprintf(f, " %016lf", env->fpr[i]); + cpu_fprintf(f, "%%f%02d:", i); + cpu_fprintf(f, " %016lf", env->fpr[i]); if ((i & 3) == 3) - fprintf(f, "\n"); + cpu_fprintf(f, "\n"); } - fprintf(f, "psr: 0x%08x -> %c%c%c%c %c%c%c wim: 0x%08x\n", GET_PSR(env), + cpu_fprintf(f, "psr: 0x%08x -> %c%c%c%c %c%c%c wim: 0x%08x\n", GET_PSR(env), GET_FLAG(PSR_ZERO, 'Z'), GET_FLAG(PSR_OVF, 'V'), GET_FLAG(PSR_NEG, 'N'), GET_FLAG(PSR_CARRY, 'C'), env->psrs?'S':'-', env->psrps?'P':'-', env->psret?'E':'-', env->wim); - fprintf(f, "fsr: 0x%08x\n", env->fsr); + cpu_fprintf(f, "fsr: 0x%08x\n", env->fsr); } target_ulong cpu_get_phys_page_debug(CPUState *env, target_ulong addr) diff --git a/vl.c b/vl.c index 9fc76c7..4569cda 100644 --- a/vl.c +++ b/vl.c @@ -406,9 +406,9 @@ void hw_error(const char *fmt, ...) vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); #ifdef TARGET_I386 - cpu_x86_dump_state(global_env, stderr, X86_DUMP_FPU | X86_DUMP_CCOP); + cpu_dump_state(global_env, stderr, fprintf, X86_DUMP_FPU | X86_DUMP_CCOP); #else - cpu_dump_state(global_env, stderr, 0); + cpu_dump_state(global_env, stderr, fprintf, 0); #endif va_end(ap); abort(); -- cgit v1.1