[PATCH] riscv: add backtrace support

Bo Gan ganboing at gmail.com
Thu Jun 15 21:01:52 CEST 2023


On 6/14/23 10:15 AM, Ben Dooks wrote:
> On 14/06/2023 07:25, Bo Gan wrote:
>> On 5/25/23 4:05 AM, Ben Dooks wrote:
>>> On 15/05/2023 14:03, Ben Dooks wrote:
>>>> When debugging, it is useful to have a backtrace to find
>>>> out what is in the call stack as the previous function (RA)
>>>> may not have been the culprit.
>>>>
>>>> Since this adds size to the build, do not add it by default
>>>> and avoid putting it in the SPL build if not needed.
>>>
>>> Hi, has anyone had time to review this?
>>>
>>
>> Hi Ben, this looks really useful. I'd like to use it in SPL,
>> but I'm unable to enable CONFIG_SPL_FRAMEPOINTER=y. It's likely
>> that you need to add a SPL_FRAMEPOINTER entry to Kconfig as well.
> 
> I will have a look at this, but testing may not be easy as the
> setup we're using has limited SPL space.
> 

I did a hack (duplicate `config FRAMEPOINTER` to `config SPL_FRAMEPOINTER`)

--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -63,6 +63,24 @@ config SPL_SYS_DCACHE_OFF
+config SPL_FRAMEPOINTER
+       bool "Build with frame pointer for stack unwinding"
+       depends on SPL
+       help
+         Choose this option to use the frame pointer so the stack can be
+         unwound if needed. This is useful for tracing where faults came
+         from as the source may be several functions back
+
+         If you say Y here, then the code size will be increased due to
+         having to store the fp.
+

This is sufficient for enabling CONFIG_SPL_FRAMEPOINTER=y. With this, I
tested SPL on JH7110 (VisionFive 2), and observed your patch's working:

Unhandled exception: Load access fault
EPC: 000000000800335e RA: 00000000080033e8 TVAL: 0000000000000040

SP:  00000000080ff5b0 GP:  00000000080dbda0 TP:  0000000000000000
T0:  00000000080ffb20 T1:  0000000000000020 T2:  0000000000000000
S0:  00000000080ffb20 S1:  00000000080ff6d0 A0:  0000000000000000
A1:  00000000080ff6d0 A2:  0000000008020d83 A3:  00000000080ffb20
A4:  0000000000000025 A5:  0000000008040218 A6:  0000000000000020
A7:  0000000008000000 S2:  0000000000000013 S3:  0000000000000001
S4:  0000000040000000 S5:  0000000000000001 S6:  000000000000000a
S7:  00000000080ffb88 S8:  0000000002000000 S9:  000000000801bc60
S10: 00000000080fff38 S11: 0000000000000000 T3:  0000000000000023
T4:  0000000000000006 T5:  000000000001869f T6:  00000000080dd138
backtrace:
backtrace  0: FP: 00000000080ffb20 RA: 0000000008005888
backtrace  1: FP: 00000000080ffb80 RA: 0000000008007046
backtrace  2: FP: 00000000080ffc50 RA: 00000000080024ec
backtrace  3: FP: 00000000080ffd00 RA: 00000000080028e0
backtrace  4: FP: 00000000080ffe00 RA: 0000000008002cf6
backtrace  5: FP: 00000000080fff30 RA: 0000000008002144
backtrace  6: FP: 0000000008100000 RA: 0000000008000178

Code: 6797 0002 b783 1ba7 050e 953e 6108 6422 (613c)

Looks like you just need a `config SPL_FRAMEPOINTER` entry in Kconfig.


More information about the U-Boot mailing list