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