[PATCH] riscv: add backtrace support
Ben Dooks
ben.dooks at codethink.co.uk
Fri Jun 16 10:55:59 CEST 2023
On 15/06/2023 20:01, Bo Gan wrote:
> 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"
I think this should have been "Build SPL with...
> + 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:
Ok, thank you for testing.
If I put this into v2 of the patch, do you want crediting with
a co-author tag?
> 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.
>
--
Ben Dooks http://www.codethink.co.uk/
Senior Engineer Codethink - Providing Genius
https://www.codethink.co.uk/privacy.html
More information about the U-Boot
mailing list