diff options
Diffstat (limited to 'target-openrisc')
| -rw-r--r-- | target-openrisc/cpu.c | 3 | ||||
| -rw-r--r-- | target-openrisc/cpu.h | 4 | ||||
| -rw-r--r-- | target-openrisc/machine.c | 27 | ||||
| -rw-r--r-- | target-openrisc/translate.c | 12 |
4 files changed, 29 insertions, 17 deletions
diff --git a/target-openrisc/cpu.c b/target-openrisc/cpu.c index ffe14f3c8d..fd90d370ba 100644 --- a/target-openrisc/cpu.c +++ b/target-openrisc/cpu.c @@ -67,7 +67,6 @@ static void openrisc_cpu_realizefn(DeviceState *dev, Error **errp) OpenRISCCPU *cpu = OPENRISC_CPU(dev); OpenRISCCPUClass *occ = OPENRISC_CPU_GET_CLASS(dev); - qemu_init_vcpu(&cpu->env); cpu_reset(CPU(cpu)); occ->parent_realize(dev, errp); @@ -149,6 +148,8 @@ static void openrisc_cpu_class_init(ObjectClass *oc, void *data) cc->class_by_name = openrisc_cpu_class_by_name; cc->do_interrupt = openrisc_cpu_do_interrupt; + cc->dump_state = openrisc_cpu_dump_state; + device_class_set_vmsd(dc, &vmstate_openrisc_cpu); } static void cpu_register(const OpenRISCCPUInfo *info) diff --git a/target-openrisc/cpu.h b/target-openrisc/cpu.h index b9c55ba83b..80a82dfdd8 100644 --- a/target-openrisc/cpu.h +++ b/target-openrisc/cpu.h @@ -347,6 +347,8 @@ OpenRISCCPU *cpu_openrisc_init(const char *cpu_model); void cpu_openrisc_list(FILE *f, fprintf_function cpu_fprintf); int cpu_openrisc_exec(CPUOpenRISCState *s); void openrisc_cpu_do_interrupt(CPUState *cpu); +void openrisc_cpu_dump_state(CPUState *cpu, FILE *f, + fprintf_function cpu_fprintf, int flags); void openrisc_translate_init(void); int cpu_openrisc_handle_mmu_fault(CPUOpenRISCState *env, target_ulong address, @@ -360,6 +362,8 @@ int cpu_openrisc_signal_handler(int host_signum, void *pinfo, void *puc); #define cpu_signal_handler cpu_openrisc_signal_handler #ifndef CONFIG_USER_ONLY +extern const struct VMStateDescription vmstate_openrisc_cpu; + /* hw/openrisc_pic.c */ void cpu_openrisc_pic_init(OpenRISCCPU *cpu); diff --git a/target-openrisc/machine.c b/target-openrisc/machine.c index cba9811ea5..6f864fe7b4 100644 --- a/target-openrisc/machine.c +++ b/target-openrisc/machine.c @@ -20,8 +20,11 @@ #include "hw/hw.h" #include "hw/boards.h" -static const VMStateDescription vmstate_cpu = { - .name = "cpu", +static const VMStateDescription vmstate_env = { + .name = "env", + .version_id = 1, + .minimum_version_id = 1, + .minimum_version_id_old = 1, .fields = (VMStateField[]) { VMSTATE_UINT32_ARRAY(gpr, CPUOpenRISCState, 32), VMSTATE_UINT32(sr, CPUOpenRISCState), @@ -36,12 +39,14 @@ static const VMStateDescription vmstate_cpu = { } }; -void cpu_save(QEMUFile *f, void *opaque) -{ - vmstate_save_state(f, &vmstate_cpu, opaque); -} - -int cpu_load(QEMUFile *f, void *opaque, int version_id) -{ - return vmstate_load_state(f, &vmstate_cpu, opaque, version_id); -} +const VMStateDescription vmstate_openrisc_cpu = { + .name = "cpu", + .version_id = 1, + .minimum_version_id = 1, + .minimum_version_id_old = 1, + .fields = (VMStateField[]) { + VMSTATE_CPU(), + VMSTATE_STRUCT(env, OpenRISCCPU, 1, vmstate_env, CPUOpenRISCState), + VMSTATE_END_OF_LIST() + } +}; diff --git a/target-openrisc/translate.c b/target-openrisc/translate.c index 0eafd0296c..c59fd0208d 100644 --- a/target-openrisc/translate.c +++ b/target-openrisc/translate.c @@ -1814,15 +1814,17 @@ void gen_intermediate_code_pc(CPUOpenRISCState *env, gen_intermediate_code_internal(openrisc_env_get_cpu(env), tb, 1); } -void cpu_dump_state(CPUOpenRISCState *env, FILE *f, - fprintf_function cpu_fprintf, - int flags) +void openrisc_cpu_dump_state(CPUState *cs, FILE *f, + fprintf_function cpu_fprintf, + int flags) { + OpenRISCCPU *cpu = OPENRISC_CPU(cs); + CPUOpenRISCState *env = &cpu->env; int i; - uint32_t *regs = env->gpr; + cpu_fprintf(f, "PC=%08x\n", env->pc); for (i = 0; i < 32; ++i) { - cpu_fprintf(f, "R%02d=%08x%c", i, regs[i], + cpu_fprintf(f, "R%02d=%08x%c", i, env->gpr[i], (i % 4) == 3 ? '\n' : ' '); } } |