]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
riscv: simplify backtrace report
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Tue, 14 May 2024 05:51:42 +0000 (07:51 +0200)
committerLeo Yu-Chi Liang <ycliang@andestech.com>
Tue, 14 May 2024 10:40:22 +0000 (18:40 +0800)
* We already have a header 'backtrace', there is no need to repeat the
  word backtrace on every line.
* Add a blank line before the backtrace section of the crash report for
  improved readability.
* If U-Boot is compiled without backtrace, there is no need to write a
  message at all.
* Avoid #ifdef. We prefer functions to always be compiled and let
  the linker remove them if not needed.
* Foresee 3 digits for the backtrace index.

For testing the 'exception' command can be used.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
arch/riscv/lib/interrupts.c

index 7350e2ced8552ad911c393725c3e568f09ce1dc6..f9a1428a486c6bf7dc01200d7611d7c40a15ac98 100644 (file)
@@ -60,21 +60,20 @@ static void show_regs(struct pt_regs *regs)
 #endif
 }
 
-#if defined(CONFIG_FRAMEPOINTER) || defined(CONFIG_SPL_FRAMEPOINTER)
-static void show_backtrace(struct pt_regs *regs)
+static void __maybe_unused show_backtrace(struct pt_regs *regs)
 {
        uintptr_t *fp = (uintptr_t *)regs->s0;
        unsigned count = 0;
        ulong ra;
 
-       printf("backtrace:\n");
+       printf("\nbacktrace:\n");
 
        /* there are a few entry points where the s0 register is
         * set to gd, so to avoid changing those, just abort if
         * the value is the same */
        while (fp != NULL && fp != (uintptr_t *)gd) {
                ra = fp[-1];
-               printf("backtrace %2d: FP: " REG_FMT " RA: " REG_FMT,
+               printf("%3d: FP: " REG_FMT " RA: " REG_FMT,
                       count, (ulong)fp, ra);
 
                if (gd && gd->flags & GD_FLG_RELOC)
@@ -87,12 +86,6 @@ static void show_backtrace(struct pt_regs *regs)
                count++;
        }
 }
-#else
-static void show_backtrace(struct pt_regs *regs)
-{
-       printf("No backtrace support enabled\n");
-}
-#endif
 
 /**
  * instr_len() - get instruction length
@@ -165,7 +158,8 @@ static void _exit_trap(ulong code, ulong epc, ulong tval, struct pt_regs *regs)
                       epc - gd->reloc_off, regs->ra - gd->reloc_off);
 
        show_regs(regs);
-       show_backtrace(regs);
+       if (CONFIG_IS_ENABLED(FRAMEPOINTER))
+               show_backtrace(regs);
        show_code(epc);
        show_efi_loaded_images(epc);
        panic("\n");