Skip to content

Commit

Permalink
risc-v/backtrace: correct stack pointer if enable ARCH_KERNEL_STACK
Browse files Browse the repository at this point in the history
Signed-off-by: chao an <anchao@xiaomi.com>
  • Loading branch information
anchao authored and xiaoxiang781216 committed Jun 6, 2023
1 parent b7b3c3c commit 76e5204
Showing 1 changed file with 32 additions and 8 deletions.
40 changes: 32 additions & 8 deletions arch/risc-v/src/common/riscv_backtrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,20 +162,44 @@ int up_backtrace(struct tcb_s *tcb, void **buffer, int size, int skip)
}
else
{
ret = backtrace(rtcb->stack_base_ptr,
rtcb->stack_base_ptr + rtcb->adj_stack_size,
(void *)getfp(), NULL, buffer, size, &skip);
#ifdef CONFIG_ARCH_KERNEL_STACK
if (rtcb->xcp.ustkptr != NULL)
{
ret = backtrace(rtcb->stack_base_ptr,
rtcb->stack_base_ptr + rtcb->adj_stack_size,
(void *)*(rtcb->xcp.ustkptr + 1), NULL,
buffer, size, &skip);
}
else
#endif
{
ret = backtrace(rtcb->stack_base_ptr,
rtcb->stack_base_ptr + rtcb->adj_stack_size,
(void *)getfp(), NULL, buffer, size, &skip);
}
}
}
else
{
flags = enter_critical_section();

ret = backtrace(tcb->stack_base_ptr,
tcb->stack_base_ptr + tcb->adj_stack_size,
(void *)tcb->xcp.regs[REG_FP],
(void *)tcb->xcp.regs[REG_EPC],
buffer, size, &skip);
#ifdef CONFIG_ARCH_KERNEL_STACK
if (tcb->xcp.ustkptr != NULL)
{
ret = backtrace(tcb->stack_base_ptr,
tcb->stack_base_ptr + tcb->adj_stack_size,
(void *)*(tcb->xcp.ustkptr + 1), NULL,
buffer, size, &skip);
}
else
#endif
{
ret = backtrace(tcb->stack_base_ptr,
tcb->stack_base_ptr + tcb->adj_stack_size,
(void *)tcb->xcp.regs[REG_FP],
(void *)tcb->xcp.regs[REG_EPC],
buffer, size, &skip);
}

leave_critical_section(flags);
}
Expand Down

0 comments on commit 76e5204

Please sign in to comment.