On 10/20/2026 12:05 PM, Pierrick Bouvier wrote: > On 10/7/2026 2:44 AM, Philippe Mathieu-Daudé wrote: >> Factor alpha_exception_name() out of alpha_cpu_do_interrupt() >> and register it as the CPUClass::exception_name() handler, so >> the common exception logging can resolve Alpha exception codes >> to names. >> >> Signed-off-by: Philippe Mathieu-Daudé <[email protected]> >> --- >> target/alpha/cpu.h | 1 + >> target/alpha/cpu.c | 1 + >> target/alpha/helper.c | 82 ++++++++++++++++++++++++------------------- >> 3 files changed, 48 insertions(+), 36 deletions(-) >> >> diff --git a/target/alpha/cpu.h b/target/alpha/cpu.h >> index 378bd96d941..8f780502476 100644 >> --- a/target/alpha/cpu.h >> +++ b/target/alpha/cpu.h >> @@ -284,6 +284,7 @@ void alpha_cpu_do_interrupt(CPUState *cpu); >> bool alpha_cpu_exec_interrupt(CPUState *cpu, int int_req); >> hwaddr alpha_cpu_get_phys_addr_debug(CPUState *cpu, vaddr addr); >> #endif /* !CONFIG_USER_ONLY */ >> +const char *alpha_exception_name(int exception); >> void alpha_cpu_dump_state(CPUState *cs, FILE *f, int flags); >> int alpha_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg); >> int alpha_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg); >> diff --git a/target/alpha/cpu.c b/target/alpha/cpu.c >> index 12e86021663..f9936315fa2 100644 >> --- a/target/alpha/cpu.c >> +++ b/target/alpha/cpu.c >> @@ -283,6 +283,7 @@ static void alpha_cpu_class_init(ObjectClass *oc, const >> void *data) >> &acc->parent_realize); >> >> cc->class_by_name = alpha_cpu_class_by_name; >> + cc->exception_name = alpha_exception_name; >> cc->dump_state = alpha_cpu_dump_state; >> cc->set_pc = alpha_cpu_set_pc; >> cc->get_pc = alpha_cpu_get_pc; >> diff --git a/target/alpha/helper.c b/target/alpha/helper.c >> index c3614ecafda..cedb0006892 100644 >> --- a/target/alpha/helper.c >> +++ b/target/alpha/helper.c >> @@ -35,6 +35,51 @@ >> #define CONVERT_BIT(X, SRC, DST) \ >> (SRC > DST ? (X) / (SRC / DST) & (DST) : ((X) & SRC) * (DST / SRC)) >> >> +const char *alpha_exception_name(int excp) >> +{ >> + const char *name; >> + >> + switch (excp) { >> + case EXCP_RESET: >> + name = "reset"; >> + break; >> + case EXCP_MCHK: >> + name = "mchk"; >> + break; >> + case EXCP_SMP_INTERRUPT: >> + name = "smp_interrupt"; >> + break; >> + case EXCP_CLK_INTERRUPT: >> + name = "clk_interrupt"; >> + break; >> + case EXCP_DEV_INTERRUPT: >> + name = "dev_interrupt"; >> + break; >> + case EXCP_MMFAULT: >> + name = "mmfault"; >> + break; >> + case EXCP_UNALIGN: >> + name = "unalign"; >> + break; >> + case EXCP_OPCDEC: >> + name = "opcdec"; >> + break; >> + case EXCP_ARITH: >> + name = "arith"; >> + break; >> + case EXCP_FEN: >> + name = "fen"; >> + break; >> + case EXCP_CALL_PAL: >> + name = "call_pal"; >> + break; >> + default: >> + name = "<unknown>"; >> + break; >> + } >> + return name; >> +} >> + >> uint64_t cpu_alpha_load_fpcr(CPUAlphaState *env) >> { >> return (uint64_t)env->fpcr << 32; >> @@ -343,43 +388,8 @@ void alpha_cpu_do_interrupt(CPUState *cs) >> >> if (qemu_loglevel_mask(CPU_LOG_INT)) { >> static int count; >> - const char *name = "<unknown>"; >> + const char *name = alpha_exception_name(i); >> >> - switch (i) { >> - case EXCP_RESET: >> - name = "reset"; >> - break; >> - case EXCP_MCHK: >> - name = "mchk"; >> - break; >> - case EXCP_SMP_INTERRUPT: >> - name = "smp_interrupt"; >> - break; >> - case EXCP_CLK_INTERRUPT: >> - name = "clk_interrupt"; >> - break; >> - case EXCP_DEV_INTERRUPT: >> - name = "dev_interrupt"; >> - break; >> - case EXCP_MMFAULT: >> - name = "mmfault"; >> - break; >> - case EXCP_UNALIGN: >> - name = "unalign"; >> - break; >> - case EXCP_OPCDEC: >> - name = "opcdec"; >> - break; >> - case EXCP_ARITH: >> - name = "arith"; >> - break; >> - case EXCP_FEN: >> - name = "fen"; >> - break; >> - case EXCP_CALL_PAL: >> - name = "call_pal"; >> - break; >> - } >> qemu_log("INT %6d: %s(%#x) cpu=%d pc=%016" >> PRIx64 " sp=%016" PRIx64 "\n", >> ++count, name, env->error_code, cs->cpu_index, > > Any reason alpha can't have it's static table like others? >
For rx, it makes sense since exception index list is sparse, but for alpha it's not. For consistency with the rest of the series, it would be nice to have this under a table. > Regards, > Pierrick
