diff options
| author | Shell <[email protected]> | 2024-09-02 16:38:42 +0800 |
|---|---|---|
| committer | Meco Man <[email protected]> | 2024-09-11 18:06:51 -0400 |
| commit | 7528645f595f2b9d0e89a146ca477bb6849e64c5 (patch) | |
| tree | ea7dbea2adbb908959f614497ce4b4d993c4399a /libcpu/risc-v/virt64/backtrace.c | |
| parent | adbbd24ad77ccb7cc6312c38360aeb1909b08e31 (diff) | |
feat: libcpu/risc-v: unify context on c906, virt64
Changes:
- added config for NEW_CTX_SWITCH
- used new context on c906 sched switch routine
- update _rt_hw_stack_init to fit into NEW_CTX_SWITCH
- separated vector ctx from the generic
Signed-off-by: Shell <[email protected]>
Diffstat (limited to 'libcpu/risc-v/virt64/backtrace.c')
| -rw-r--r-- | libcpu/risc-v/virt64/backtrace.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/libcpu/risc-v/virt64/backtrace.c b/libcpu/risc-v/virt64/backtrace.c index f76cd90c12..8cfe7126cb 100644 --- a/libcpu/risc-v/virt64/backtrace.c +++ b/libcpu/risc-v/virt64/backtrace.c @@ -15,6 +15,7 @@ #include <rtthread.h> #include <mm_aspace.h> #include "riscv_mmu.h" +#include "stack.h" #define WORD sizeof(rt_base_t) #define ARCH_CONTEXT_FETCH(pctx, id) (*(((unsigned long *)pctx) + (id))) @@ -117,8 +118,9 @@ rt_err_t rt_hw_backtrace_frame_get(rt_thread_t thread, struct rt_hw_backtrace_fr } else { - frame->pc = ARCH_CONTEXT_FETCH(thread->sp, 13); - frame->fp = ARCH_CONTEXT_FETCH(thread->sp, 12); + rt_hw_switch_frame_t sframe = thread->sp; + frame->pc = sframe->regs[RT_HW_SWITCH_CONTEXT_RA]; + frame->fp = sframe->regs[RT_HW_SWITCH_CONTEXT_S0];; rc = RT_EOK; } return rc; |
