| 513 | extern const struct unwind_idx __exidx_end[]; |
| 514 | |
| 515 | void rt_unwind(struct rt_hw_exp_stack *regs, unsigned int pc_adj) |
| 516 | { |
| 517 | struct pt_regs e_regs; |
| 518 | |
| 519 | e_regs.ARM_fp = regs->fp; |
| 520 | e_regs.ARM_sp = regs->sp; |
| 521 | e_regs.ARM_lr = regs->lr; |
| 522 | e_regs.ARM_pc = regs->pc - pc_adj; |
| 523 | #ifdef RT_USING_SMART |
| 524 | if (!lwp_user_accessable((void *)e_regs.ARM_pc, sizeof (void *))) |
| 525 | { |
| 526 | e_regs.ARM_pc = regs->lr - sizeof(void *); |
| 527 | } |
| 528 | #endif |
| 529 | rt_kprintf("backtrace:\n"); |
| 530 | unwind_backtrace(&e_regs, __exidx_start, __exidx_end); |
| 531 | } |
| 532 | |
| 533 | rt_err_t rt_backtrace(void) |
| 534 | { |
no test coverage detected