MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / rt_hw_backtrace_frame_unwind

Function rt_hw_backtrace_frame_unwind

libcpu/risc-v/common64/backtrace.c:68–109  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

66#endif /* RT_USING_SMART */
67
68rt_err_t rt_hw_backtrace_frame_unwind(rt_thread_t thread, struct rt_hw_backtrace_frame *frame)
69{
70 rt_err_t rc = -RT_ERROR;
71 rt_uintptr_t *fp = (rt_uintptr_t *)frame->fp;
72
73 if (fp && !((long)fp & 0x7))
74 {
75#ifdef RT_USING_SMART
76 if (thread->lwp)
77 {
78 void *lwp = thread->lwp;
79 void *this_lwp = lwp_self();
80 if (this_lwp == lwp && rt_hw_mmu_v2p(((rt_lwp_t)lwp)->aspace, fp) != ARCH_MAP_FAILED)
81 {
82 rc = _bt_kaddr(fp, frame);
83 }
84 else if (lwp_user_accessible_ext(lwp, (void *)fp, WORD))
85 {
86 rc = _bt_uaddr(lwp, fp, frame);
87 }
88 else
89 {
90 rc = -RT_EFAULT;
91 }
92 }
93 else
94#endif
95 if ((rt_kmem_v2p(fp) != ARCH_MAP_FAILED))
96 {
97 rc = _bt_kaddr(fp, frame);
98 }
99 else
100 {
101 rc = -RT_EINVAL;
102 }
103 }
104 else
105 {
106 rc = -RT_EFAULT;
107 }
108 return rc;
109}
110
111rt_err_t rt_hw_backtrace_frame_get(rt_thread_t thread, struct rt_hw_backtrace_frame *frame)
112{

Callers

nothing calls this directly

Calls 6

lwp_selfFunction · 0.85
lwp_user_accessible_extFunction · 0.85
rt_kmem_v2pFunction · 0.85
rt_hw_mmu_v2pFunction · 0.70
_bt_kaddrFunction · 0.70
_bt_uaddrFunction · 0.70

Tested by

no test coverage detected