1 #include <libunwind.h>
2 #include <stdlib.h>
3 
backtrace(int lower_bound)4 void backtrace(int lower_bound) {
5   unw_context_t context;
6   unw_getcontext(&context);
7 
8   unw_cursor_t cursor;
9   unw_init_local(&cursor, &context);
10 
11   int n = 0;
12   do {
13     ++n;
14     if (n > 100) {
15       abort();
16     }
17   } while (unw_step(&cursor) > 0);
18 
19   if (n < lower_bound) {
20     abort();
21   }
22 }
23 
test1(int i)24 void test1(int i) {
25   backtrace(i);
26 }
27 
test2(int i,int j)28 void test2(int i, int j) {
29   backtrace(i);
30   test1(j);
31 }
32 
test3(int i,int j,int k)33 void test3(int i, int j, int k) {
34   backtrace(i);
35   test2(j, k);
36 }
37 
main()38 int main() {
39   test1(1);
40   test2(1, 2);
41   test3(1, 2, 3);
42 }
43