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
24extern "C" {
25#endif
26// SPI
27extern 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
33extern void _unw_add_dynamic_fde(unw_word_t fde);
34extern void _unw_remove_dynamic_fde(unw_word_t fde);
35
36#if LIBCXXABI_ARM_EHABI
37extern const uint32_t* decode_eht_entry(const uint32_t*, size_t*, size_t*);
38extern _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