mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 09:13:55 -06:00
qom/cpu: Simplify how CPUClass:cpu_dump_state() prints
CPUClass method dump_statistics() takes an fprintf()-like callback and a FILE * to pass to it. Most callers pass fprintf() and stderr. log_cpu_state() passes fprintf() and qemu_log_file. hmp_info_registers() passes monitor_fprintf() and the current monitor cast to FILE *. monitor_fprintf() casts it right back, and is otherwise identical to monitor_printf(). The callback gets passed around a lot, which is tiresome. The type-punning around monitor_fprintf() is ugly. Drop the callback, and call qemu_fprintf() instead. Also gets rid of the type-punning, since qemu_fprintf() takes NULL instead of the current monitor cast to FILE *. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Message-Id: <20190417191805.28198-15-armbru@redhat.com>
This commit is contained in:
parent
19aaa4c3fd
commit
90c84c5600
63 changed files with 682 additions and 711 deletions
|
@ -596,12 +596,11 @@ void sparc_cpu_list(void)
|
|||
"fpu_version mmu_version nwindows\n");
|
||||
}
|
||||
|
||||
static void cpu_print_cc(FILE *f, fprintf_function cpu_fprintf,
|
||||
uint32_t cc)
|
||||
static void cpu_print_cc(FILE *f, uint32_t cc)
|
||||
{
|
||||
cpu_fprintf(f, "%c%c%c%c", cc & PSR_NEG ? 'N' : '-',
|
||||
cc & PSR_ZERO ? 'Z' : '-', cc & PSR_OVF ? 'V' : '-',
|
||||
cc & PSR_CARRY ? 'C' : '-');
|
||||
qemu_fprintf(f, "%c%c%c%c", cc & PSR_NEG ? 'N' : '-',
|
||||
cc & PSR_ZERO ? 'Z' : '-', cc & PSR_OVF ? 'V' : '-',
|
||||
cc & PSR_CARRY ? 'C' : '-');
|
||||
}
|
||||
|
||||
#ifdef TARGET_SPARC64
|
||||
|
@ -610,35 +609,34 @@ static void cpu_print_cc(FILE *f, fprintf_function cpu_fprintf,
|
|||
#define REGS_PER_LINE 8
|
||||
#endif
|
||||
|
||||
void sparc_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
|
||||
int flags)
|
||||
void sparc_cpu_dump_state(CPUState *cs, FILE *f, int flags)
|
||||
{
|
||||
SPARCCPU *cpu = SPARC_CPU(cs);
|
||||
CPUSPARCState *env = &cpu->env;
|
||||
int i, x;
|
||||
|
||||
cpu_fprintf(f, "pc: " TARGET_FMT_lx " npc: " TARGET_FMT_lx "\n", env->pc,
|
||||
env->npc);
|
||||
qemu_fprintf(f, "pc: " TARGET_FMT_lx " npc: " TARGET_FMT_lx "\n", env->pc,
|
||||
env->npc);
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
if (i % REGS_PER_LINE == 0) {
|
||||
cpu_fprintf(f, "%%g%d-%d:", i, i + REGS_PER_LINE - 1);
|
||||
qemu_fprintf(f, "%%g%d-%d:", i, i + REGS_PER_LINE - 1);
|
||||
}
|
||||
cpu_fprintf(f, " " TARGET_FMT_lx, env->gregs[i]);
|
||||
qemu_fprintf(f, " " TARGET_FMT_lx, env->gregs[i]);
|
||||
if (i % REGS_PER_LINE == REGS_PER_LINE - 1) {
|
||||
cpu_fprintf(f, "\n");
|
||||
qemu_fprintf(f, "\n");
|
||||
}
|
||||
}
|
||||
for (x = 0; x < 3; x++) {
|
||||
for (i = 0; i < 8; i++) {
|
||||
if (i % REGS_PER_LINE == 0) {
|
||||
cpu_fprintf(f, "%%%c%d-%d: ",
|
||||
x == 0 ? 'o' : (x == 1 ? 'l' : 'i'),
|
||||
i, i + REGS_PER_LINE - 1);
|
||||
qemu_fprintf(f, "%%%c%d-%d: ",
|
||||
x == 0 ? 'o' : (x == 1 ? 'l' : 'i'),
|
||||
i, i + REGS_PER_LINE - 1);
|
||||
}
|
||||
cpu_fprintf(f, TARGET_FMT_lx " ", env->regwptr[i + x * 8]);
|
||||
qemu_fprintf(f, TARGET_FMT_lx " ", env->regwptr[i + x * 8]);
|
||||
if (i % REGS_PER_LINE == REGS_PER_LINE - 1) {
|
||||
cpu_fprintf(f, "\n");
|
||||
qemu_fprintf(f, "\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -646,42 +644,42 @@ void sparc_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
|
|||
if (flags & CPU_DUMP_FPU) {
|
||||
for (i = 0; i < TARGET_DPREGS; i++) {
|
||||
if ((i & 3) == 0) {
|
||||
cpu_fprintf(f, "%%f%02d: ", i * 2);
|
||||
qemu_fprintf(f, "%%f%02d: ", i * 2);
|
||||
}
|
||||
cpu_fprintf(f, " %016" PRIx64, env->fpr[i].ll);
|
||||
qemu_fprintf(f, " %016" PRIx64, env->fpr[i].ll);
|
||||
if ((i & 3) == 3) {
|
||||
cpu_fprintf(f, "\n");
|
||||
qemu_fprintf(f, "\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef TARGET_SPARC64
|
||||
cpu_fprintf(f, "pstate: %08x ccr: %02x (icc: ", env->pstate,
|
||||
(unsigned)cpu_get_ccr(env));
|
||||
cpu_print_cc(f, cpu_fprintf, cpu_get_ccr(env) << PSR_CARRY_SHIFT);
|
||||
cpu_fprintf(f, " xcc: ");
|
||||
cpu_print_cc(f, cpu_fprintf, cpu_get_ccr(env) << (PSR_CARRY_SHIFT - 4));
|
||||
cpu_fprintf(f, ") asi: %02x tl: %d pil: %x gl: %d\n", env->asi, env->tl,
|
||||
env->psrpil, env->gl);
|
||||
cpu_fprintf(f, "tbr: " TARGET_FMT_lx " hpstate: " TARGET_FMT_lx " htba: "
|
||||
TARGET_FMT_lx "\n", env->tbr, env->hpstate, env->htba);
|
||||
cpu_fprintf(f, "cansave: %d canrestore: %d otherwin: %d wstate: %d "
|
||||
"cleanwin: %d cwp: %d\n",
|
||||
env->cansave, env->canrestore, env->otherwin, env->wstate,
|
||||
env->cleanwin, env->nwindows - 1 - env->cwp);
|
||||
cpu_fprintf(f, "fsr: " TARGET_FMT_lx " y: " TARGET_FMT_lx " fprs: "
|
||||
TARGET_FMT_lx "\n", env->fsr, env->y, env->fprs);
|
||||
qemu_fprintf(f, "pstate: %08x ccr: %02x (icc: ", env->pstate,
|
||||
(unsigned)cpu_get_ccr(env));
|
||||
cpu_print_cc(f, cpu_get_ccr(env) << PSR_CARRY_SHIFT);
|
||||
qemu_fprintf(f, " xcc: ");
|
||||
cpu_print_cc(f, cpu_get_ccr(env) << (PSR_CARRY_SHIFT - 4));
|
||||
qemu_fprintf(f, ") asi: %02x tl: %d pil: %x gl: %d\n", env->asi, env->tl,
|
||||
env->psrpil, env->gl);
|
||||
qemu_fprintf(f, "tbr: " TARGET_FMT_lx " hpstate: " TARGET_FMT_lx " htba: "
|
||||
TARGET_FMT_lx "\n", env->tbr, env->hpstate, env->htba);
|
||||
qemu_fprintf(f, "cansave: %d canrestore: %d otherwin: %d wstate: %d "
|
||||
"cleanwin: %d cwp: %d\n",
|
||||
env->cansave, env->canrestore, env->otherwin, env->wstate,
|
||||
env->cleanwin, env->nwindows - 1 - env->cwp);
|
||||
qemu_fprintf(f, "fsr: " TARGET_FMT_lx " y: " TARGET_FMT_lx " fprs: "
|
||||
TARGET_FMT_lx "\n", env->fsr, env->y, env->fprs);
|
||||
|
||||
#else
|
||||
cpu_fprintf(f, "psr: %08x (icc: ", cpu_get_psr(env));
|
||||
cpu_print_cc(f, cpu_fprintf, cpu_get_psr(env));
|
||||
cpu_fprintf(f, " SPE: %c%c%c) wim: %08x\n", env->psrs ? 'S' : '-',
|
||||
env->psrps ? 'P' : '-', env->psret ? 'E' : '-',
|
||||
env->wim);
|
||||
cpu_fprintf(f, "fsr: " TARGET_FMT_lx " y: " TARGET_FMT_lx "\n",
|
||||
env->fsr, env->y);
|
||||
qemu_fprintf(f, "psr: %08x (icc: ", cpu_get_psr(env));
|
||||
cpu_print_cc(f, cpu_get_psr(env));
|
||||
qemu_fprintf(f, " SPE: %c%c%c) wim: %08x\n", env->psrs ? 'S' : '-',
|
||||
env->psrps ? 'P' : '-', env->psret ? 'E' : '-',
|
||||
env->wim);
|
||||
qemu_fprintf(f, "fsr: " TARGET_FMT_lx " y: " TARGET_FMT_lx "\n",
|
||||
env->fsr, env->y);
|
||||
#endif
|
||||
cpu_fprintf(f, "\n");
|
||||
qemu_fprintf(f, "\n");
|
||||
}
|
||||
|
||||
static void sparc_cpu_set_pc(CPUState *cs, vaddr value)
|
||||
|
|
|
@ -564,8 +564,7 @@ extern const struct VMStateDescription vmstate_sparc_cpu;
|
|||
#endif
|
||||
|
||||
void sparc_cpu_do_interrupt(CPUState *cpu);
|
||||
void sparc_cpu_dump_state(CPUState *cpu, FILE *f,
|
||||
fprintf_function cpu_fprintf, int flags);
|
||||
void sparc_cpu_dump_state(CPUState *cpu, FILE *f, int flags);
|
||||
hwaddr sparc_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);
|
||||
int sparc_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg);
|
||||
int sparc_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue