1#include <libunwind.h>
2#include <stdlib.h>
3
4void 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
24void test1(int i) {
25  backtrace(i);
26}
27
28void test2(int i, int j) {
29  backtrace(i);
30  test1(j);
31}
32
33void test3(int i, int j, int k) {
34  backtrace(i);
35  test2(j, k);
36}
37
38int main() {
39  test1(1);
40  test2(1, 2);
41  test3(1, 2, 3);
42}
43