| #include <stdio.h> |
| #include <unwind.h> |
| |
| extern "C" void arm_function_3(int*p); |
| extern "C" void thumb_function_1(int*p); |
| extern "C" void thumb_function_2(int*p); |
| |
| extern "C" _Unwind_Reason_Code trace_function(_Unwind_Context *context, void *arg) |
| { |
| int i = 0; |
| printf("0x%x\n", _Unwind_GetIP(context)); |
| fflush(stdout); |
| return _URC_NO_REASON; |
| } |
| |
| void thumb_function_1(int*p) |
| { |
| int a = 0; |
| arm_function_3(&a); |
| } |
| |
| void thumb_function_2(int*p) |
| { |
| int a = 0; |
| printf("unwinding...\n"); |
| _Unwind_Backtrace(trace_function, (void*)"backtrace!"); |
| } |