[PATCH-for-5.1 7/7] target/sparc/int32_helper: Extract and use excp_name_str()

Philippe Mathieu-Daudé posted 7 patches 5 years, 10 months ago
[PATCH-for-5.1 7/7] target/sparc/int32_helper: Extract and use excp_name_str()
Posted by Philippe Mathieu-Daudé 5 years, 10 months ago
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>
---
 target/sparc/int32_helper.c | 18 ++++++++++++------
 1 file 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;
     }
-- 
2.21.1


Re: [PATCH-for-5.1 7/7] target/sparc/int32_helper: Extract and use excp_name_str()
Posted by KONRAD Frederic 5 years, 10 months ago

Le 3/31/20 à 12:50 PM, Philippe Mathieu-Daudé a écrit :
> 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>
> ---
>   target/sparc/int32_helper.c | 18 ++++++++++++------
>   1 file 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;
>       }
> 

Reviewed-by: KONRAD Frederic <frederic.konrad@adacore.com>

Thanks,
Fred