summaryrefslogtreecommitdiff
path: root/libcpu/risc-v/virt64/backtrace.c
diff options
context:
space:
mode:
authorShell <[email protected]>2024-09-02 16:38:42 +0800
committerMeco Man <[email protected]>2024-09-11 18:06:51 -0400
commit7528645f595f2b9d0e89a146ca477bb6849e64c5 (patch)
treeea7dbea2adbb908959f614497ce4b4d993c4399a /libcpu/risc-v/virt64/backtrace.c
parentadbbd24ad77ccb7cc6312c38360aeb1909b08e31 (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.c6
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;