1 #include <stdio.h> 2 #include <unwind.h> 3 4 extern "C" void arm_function_3(int*p); 5 extern "C" void thumb_function_1(int*p); 6 extern "C" void thumb_function_2(int*p); 7 8 extern "C" _Unwind_Reason_Code trace_function(_Unwind_Context *context, void *arg) 9 { 10 int i = 0; 11 printf("0x%x\n", _Unwind_GetIP(context)); 12 fflush(stdout); 13 return _URC_NO_REASON; 14 } 15 16 void thumb_function_1(int*p) 17 { 18 int a = 0; 19 arm_function_3(&a); 20 } 21 22 void thumb_function_2(int*p) 23 { 24 int a = 0; 25 printf("unwinding...\n"); 26 _Unwind_Backtrace(trace_function, (void*)"backtrace!"); 27 } 28