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 @@
 #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 @@
 #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 @@
 #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 @@
 #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 @@
 
 #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 @@
                     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 @@
 #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 @@
     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 @@
         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 @@
             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 @@
         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 @@
     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_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 @@
             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 @@
 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 @@
     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 @@
 /* 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 @@
             }
             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 @@
     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 @@
     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 @@
     "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 @@
             (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 @@
             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 @@
         
 #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 @@
 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 @@
     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 @@
                     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 @@
 /* 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 @@
 /*****************************************************************************/
 /* 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 @@
                 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 @@
 #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 @@
 
 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 @@
                     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 @@
 
 #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 @@
     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();
