1 //===------------------------ libunwind_ext.h -----------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //
9 //  Extensions to libunwind API.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef __LIBUNWIND_EXT__
14 #define __LIBUNWIND_EXT__
15 
16 #include "config.h"
17 #include <libunwind.h>
18 #include <unwind.h>
19 
20 #define UNW_STEP_SUCCESS 1
21 #define UNW_STEP_END     0
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 // SPI
27 extern void unw_iterate_dwarf_unwind_cache(void (*func)(unw_word_t ip_start,
28                                                         unw_word_t ip_end,
29                                                         unw_word_t fde,
30                                                         unw_word_t mh));
31 
32 // IPI
33 extern void _unw_add_dynamic_fde(unw_word_t fde);
34 extern void _unw_remove_dynamic_fde(unw_word_t fde);
35 
36 #if LIBCXXABI_ARM_EHABI
37 extern const uint32_t* decode_eht_entry(const uint32_t*, size_t*, size_t*);
38 extern _Unwind_Reason_Code _Unwind_VRS_Interpret(_Unwind_Context *context,
39                                                  const uint32_t *data,
40                                                  size_t offset, size_t len);
41 #endif
42 
43 #ifdef __cplusplus
44 }
45 #endif
46 
47 #endif // __LIBUNWIND_EXT__
48