Lines Matching refs:frame
34 rt_inline rt_err_t _bt_kaddr(rt_ubase_t *fp, struct rt_hw_backtrace_frame *frame) in _bt_kaddr() argument
40 frame->fp = *fp; in _bt_kaddr()
41 frame->pc = *(fp + 1) - INST_WORD_BYTES; in _bt_kaddr()
43 if ((rt_ubase_t)fp == frame->fp) in _bt_kaddr()
56 rt_inline rt_err_t _bt_uaddr(rt_lwp_t lwp, rt_ubase_t *fp, struct rt_hw_backtrace_frame *frame) in _bt_uaddr() argument
59 if (lwp_data_get(lwp, &frame->fp, fp, WORD) != WORD) in _bt_uaddr()
63 else if (lwp_data_get(lwp, &frame->pc, fp + 1, WORD) != WORD) in _bt_uaddr()
67 else if ((rt_base_t)fp == frame->fp) in _bt_uaddr()
73 frame->pc -= INST_WORD_BYTES; in _bt_uaddr()
80 rt_err_t rt_hw_backtrace_frame_unwind(rt_thread_t thread, struct rt_hw_backtrace_frame *frame) in rt_hw_backtrace_frame_unwind() argument
83 rt_ubase_t *fp = (rt_ubase_t *)frame->fp; in rt_hw_backtrace_frame_unwind()
95 rc = _bt_kaddr(fp, frame); in rt_hw_backtrace_frame_unwind()
99 rc = _bt_uaddr(lwp, fp, frame); in rt_hw_backtrace_frame_unwind()
110 rc = _bt_kaddr(fp, frame); in rt_hw_backtrace_frame_unwind()
124 rt_err_t rt_hw_backtrace_frame_get(rt_thread_t thread, struct rt_hw_backtrace_frame *frame) in rt_hw_backtrace_frame_get() argument
127 if (!thread || !frame) in rt_hw_backtrace_frame_get()
133 frame->pc = ARCH_CONTEXT_FETCH(thread->sp, 0); in rt_hw_backtrace_frame_get()
134 frame->fp = ARCH_CONTEXT_FETCH(thread->sp, 4); in rt_hw_backtrace_frame_get()