Implement avr_exception_name() and register it as the CPUClass::exception_name() handler, so the common exception logging can resolve AVR exception codes to names.
Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- target/avr/cpu.h | 2 ++ target/avr/cpu.c | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/target/avr/cpu.h b/target/avr/cpu.h index 1e4e839bd83..b1b5b637617 100644 --- a/target/avr/cpu.h +++ b/target/avr/cpu.h @@ -44,6 +44,8 @@ #define EXCP_RESET 1 #define EXCP_INT(n) (EXCP_RESET + (n) + 1) +const char *avr_exception_name(int excp); + /* Number of CPU registers */ #define NUMBER_OF_CPU_REGISTERS 32 diff --git a/target/avr/cpu.c b/target/avr/cpu.c index f8409f32ab9..6cfd19dfa81 100644 --- a/target/avr/cpu.c +++ b/target/avr/cpu.c @@ -258,6 +258,24 @@ static const TCGCPUOps avr_tcg_ops = { .pointer_wrap = cpu_pointer_wrap_uint32, }; +const char *avr_exception_name(int excp) +{ + static const char * const excp_names[] = { + [EXCP_RESET] = "RESET", + [EXCP_INT(0)] = "INT#0", + [EXCP_INT(1)] = "INT#1", + [EXCP_INT(2)] = "INT#2", + [EXCP_INT(3)] = "INT#3", + [EXCP_INT(4)] = "INT#4", + [EXCP_INT(5)] = "INT#5", + }; + + if (excp < 0 || excp >= ARRAY_SIZE(excp_names) || !excp_names[excp]) { + return "unknown"; + } + return excp_names[excp]; +} + static void avr_cpu_class_init(ObjectClass *oc, const void *data) { DeviceClass *dc = DEVICE_CLASS(oc); @@ -273,6 +291,7 @@ static void avr_cpu_class_init(ObjectClass *oc, const void *data) &mcc->parent_phases); cc->class_by_name = avr_cpu_class_by_name; + cc->exception_name = avr_exception_name; cc->dump_state = avr_cpu_dump_state; cc->set_pc = avr_cpu_set_pc; -- 2.55.0
