Implement microblaze_exception_name() and register it as the CPUClass::exception_name() handler, so the common exception logging can resolve MicroBlaze exception codes to names.
Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- target/microblaze/cpu.h | 2 ++ target/microblaze/cpu.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/target/microblaze/cpu.h b/target/microblaze/cpu.h index b9602f72b94..fc2783693e3 100644 --- a/target/microblaze/cpu.h +++ b/target/microblaze/cpu.h @@ -36,6 +36,8 @@ typedef struct CPUArchState CPUMBState; #define EXCP_HW_BREAK 4 #define EXCP_HW_EXCP 5 +const char *microblaze_exception_name(int excp); + /* MicroBlaze-specific interrupt pending bits. */ #define CPU_INTERRUPT_NMI CPU_INTERRUPT_TGT_EXT_3 diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c index 389a5124b12..224f1052f70 100644 --- a/target/microblaze/cpu.c +++ b/target/microblaze/cpu.c @@ -79,6 +79,22 @@ static const struct { /* If no specific version gets selected, default to the following. */ #define DEFAULT_CPU_VERSION "10.0" +const char *microblaze_exception_name(int excp) +{ + static const char * const excp_names[] = { + [EXCP_MMU] = "mmu", + [EXCP_IRQ] = "irq", + [EXCP_SYSCALL] = "syscall", + [EXCP_HW_BREAK] = "hw break", + [EXCP_HW_EXCP] = "hw excp", + }; + + if (excp < 0 || excp >= ARRAY_SIZE(excp_names) || !excp_names[excp]) { + return "unknown"; + } + return excp_names[excp]; +} + static void mb_cpu_set_pc(CPUState *cs, vaddr value) { MicroBlazeCPU *cpu = MICROBLAZE_CPU(cs); @@ -469,6 +485,7 @@ static void mb_cpu_class_init(ObjectClass *oc, const void *data) &mcc->parent_phases); cc->class_by_name = mb_cpu_class_by_name; + cc->exception_name = microblaze_exception_name; cc->dump_state = mb_cpu_dump_state; cc->set_pc = mb_cpu_set_pc; cc->get_pc = mb_cpu_get_pc; -- 2.55.0
