diff options
author | Philippe Mathieu-Daudé <f4bug@amsat.org> | 2020-03-31 11:49:11 +0200 |
---|---|---|
committer | Philippe Mathieu-Daudé <f4bug@amsat.org> | 2020-06-09 09:21:10 +0200 |
commit | 86e8c353f705f14f2f2fd7a6195cefa431aa24d9 (patch) | |
tree | dbe867f4f2996c13d65cac9bbd67e32b49b0448c /target/sparc/int32_helper.c | |
parent | 304c1c8aa5e948ea11aa64acca0e485a185cedc9 (diff) | |
download | qemu-86e8c353f705f14f2f2fd7a6195cefa431aa24d9.zip |
target/sparc/int32_helper: Extract and use excp_name_str()
Improve exception error report:
Before:
qemu: fatal: Trap 0x06 while interrupts disabled, Error state
After:
qemu: fatal: Trap 0x06 (Window Underflow) while interrupts disabled, Error state
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: KONRAD Frederic <frederic.konrad@adacore.com>
Message-Id: <20200331105048.27989-8-f4bug@amsat.org>
Diffstat (limited to 'target/sparc/int32_helper.c')
-rw-r--r-- | target/sparc/int32_helper.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/target/sparc/int32_helper.c b/target/sparc/int32_helper.c index c56dd3df18..9a71e1abd8 100644 --- a/target/sparc/int32_helper.c +++ b/target/sparc/int32_helper.c @@ -57,6 +57,14 @@ static const char * const excp_names[0x80] = { [TT_NCP_INSN] = "Coprocessor Disabled", }; +static const char *excp_name_str(int32_t exception_index) +{ + if (exception_index < 0 || exception_index >= ARRAY_SIZE(excp_names)) { + return "Unknown"; + } + return excp_names[exception_index]; +} + void sparc_cpu_do_interrupt(CPUState *cs) { SPARCCPU *cpu = SPARC_CPU(cs); @@ -77,10 +85,7 @@ void sparc_cpu_do_interrupt(CPUState *cs) } else if (intno >= 0x80) { name = "Trap Instruction"; } else { - name = excp_names[intno]; - if (!name) { - name = "Unknown"; - } + name = excp_name_str(intno); } qemu_log("%6d: %s (v=%02x)\n", count, name, intno); @@ -106,8 +111,9 @@ void sparc_cpu_do_interrupt(CPUState *cs) env->def.features & CPU_FEATURE_TA0_SHUTDOWN) { qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); } else { - cpu_abort(cs, "Trap 0x%02x while interrupts disabled, Error state", - cs->exception_index); + cpu_abort(cs, "Trap 0x%02x (%s) while interrupts disabled, " + "Error state", + cs->exception_index, excp_name_str(cs->exception_index)); } return; } |