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? Regards, Pierrick
