| 288 | #endif // BX_CONFIG_CALLSTACK_USE_UNWIND |
| 289 | |
| 290 | BX_NO_INLINE uint32_t getCallStackUnwind(uint32_t _skip, uint32_t _max, uintptr_t* _outStack) |
| 291 | { |
| 292 | #if BX_CONFIG_CALLSTACK_USE_UNWIND |
| 293 | UnwindCallbackData ucd = |
| 294 | { |
| 295 | .skip = _skip + 1, |
| 296 | .max = _max, |
| 297 | .num = 0, |
| 298 | .outStack = _outStack, |
| 299 | }; |
| 300 | |
| 301 | _Unwind_Backtrace(unwindCallback, &ucd); |
| 302 | |
| 303 | return ucd.num; |
| 304 | #else |
| 305 | BX_UNUSED(_skip, _max, _outStack); |
| 306 | return 0; |
| 307 | #endif // BX_CONFIG_CALLSTACK_USE_UNWIND |
| 308 | } |
| 309 | |
| 310 | BX_NO_INLINE uint32_t getCallStackExecInfoBacktrace(uint32_t _skip, uint32_t _max, uintptr_t* _outStack) |
| 311 | { |