[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