Mercurial > hg > CbC > CbC_llvm
comparison libunwind/test/libunwind_01.pass.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children | 2e18cbf3894f |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
1 #include <libunwind.h> | |
2 #include <stdlib.h> | |
3 | |
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 | |
24 void test1(int i) { | |
25 backtrace(i); | |
26 } | |
27 | |
28 void test2(int i, int j) { | |
29 backtrace(i); | |
30 test1(j); | |
31 } | |
32 | |
33 void test3(int i, int j, int k) { | |
34 backtrace(i); | |
35 test2(j, k); | |
36 } | |
37 | |
38 void test_no_info() { | |
39 unw_context_t context; | |
40 unw_getcontext(&context); | |
41 | |
42 unw_cursor_t cursor; | |
43 unw_init_local(&cursor, &context); | |
44 | |
45 unw_proc_info_t info; | |
46 int ret = unw_get_proc_info(&cursor, &info); | |
47 if (ret != UNW_ESUCCESS) | |
48 abort(); | |
49 | |
50 // Set the IP to an address clearly outside any function. | |
51 unw_set_reg(&cursor, UNW_REG_IP, (unw_word_t)0); | |
52 | |
53 ret = unw_get_proc_info(&cursor, &info); | |
54 if (ret != UNW_ENOINFO) | |
55 abort(); | |
56 } | |
57 | |
58 int main() { | |
59 test1(1); | |
60 test2(1, 2); | |
61 test3(1, 2, 3); | |
62 test_no_info(); | |
63 } |