unwind.h revision 1.2.10.3 1 1.2.10.2 tls //===------------------------------- unwind.h -----------------------------===//
2 1.2.10.2 tls //
3 1.2.10.2 tls // The LLVM Compiler Infrastructure
4 1.2.10.2 tls //
5 1.2.10.2 tls // This file is dual licensed under the MIT and the University of Illinois Open
6 1.2.10.2 tls // Source Licenses. See LICENSE.TXT for details.
7 1.2.10.2 tls //
8 1.2.10.2 tls //
9 1.2.10.2 tls // C++ ABI Level 1 ABI documented at:
10 1.2.10.2 tls // http://mentorembedded.github.io/cxx-abi/abi-eh.html
11 1.2.10.2 tls //
12 1.2.10.2 tls //===----------------------------------------------------------------------===//
13 1.2.10.2 tls
14 1.2.10.2 tls #ifndef _UNWIND_H
15 1.2.10.2 tls #define _UNWIND_H
16 1.2.10.2 tls
17 1.2.10.2 tls #include <stdint.h>
18 1.2.10.2 tls #include <stddef.h>
19 1.2.10.2 tls
20 1.2.10.2 tls typedef enum {
21 1.2.10.2 tls _URC_NO_REASON = 0,
22 1.2.10.2 tls _URC_FOREIGN_EXCEPTION_CAUGHT = 1,
23 1.2.10.2 tls _URC_FATAL_PHASE2_ERROR = 2,
24 1.2.10.2 tls _URC_FATAL_PHASE1_ERROR = 3,
25 1.2.10.2 tls _URC_NORMAL_STOP = 4,
26 1.2.10.2 tls _URC_END_OF_STACK = 5,
27 1.2.10.2 tls _URC_HANDLER_FOUND = 6,
28 1.2.10.2 tls _URC_INSTALL_CONTEXT = 7,
29 1.2.10.2 tls _URC_CONTINUE_UNWIND = 8
30 1.2.10.2 tls } _Unwind_Reason_Code;
31 1.2.10.2 tls
32 1.2.10.2 tls typedef enum {
33 1.2.10.2 tls _UA_SEARCH_PHASE = 1,
34 1.2.10.2 tls _UA_CLEANUP_PHASE = 2,
35 1.2.10.2 tls _UA_HANDLER_FRAME = 4,
36 1.2.10.2 tls _UA_FORCE_UNWIND = 8,
37 1.2.10.2 tls _UA_END_OF_STACK = 16 /* GCC extension */
38 1.2.10.2 tls } _Unwind_Action;
39 1.2.10.2 tls
40 1.2.10.2 tls struct _Unwind_Context;
41 1.2.10.2 tls
42 1.2.10.2 tls struct _Unwind_Exception {
43 1.2.10.2 tls uint64_t exception_class;
44 1.2.10.2 tls void (*exception_cleanup)(_Unwind_Reason_Code, struct _Unwind_Exception *);
45 1.2.10.2 tls uintptr_t private_1;
46 1.2.10.2 tls uintptr_t private_2;
47 1.2.10.2 tls } __attribute__((__aligned__));
48 1.2.10.2 tls
49 1.2.10.2 tls typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)(int, _Unwind_Action, uint64_t,
50 1.2.10.2 tls struct _Unwind_Exception *,
51 1.2.10.2 tls struct _Unwind_Context *,
52 1.2.10.2 tls void *);
53 1.2.10.2 tls
54 1.2.10.2 tls typedef _Unwind_Reason_Code (*__personality_routine)(int, _Unwind_Action,
55 1.2.10.2 tls uint64_t,
56 1.2.10.2 tls struct _Unwind_Exception *,
57 1.2.10.2 tls struct _Unwind_Context *);
58 1.2.10.2 tls
59 1.2.10.3 jdolecek #ifdef _UNWIND_GCC_EXTENSIONS
60 1.2.10.3 jdolecek struct dwarf_eh_bases {
61 1.2.10.3 jdolecek void *tbase;
62 1.2.10.3 jdolecek void *dbase;
63 1.2.10.3 jdolecek void *func;
64 1.2.10.3 jdolecek };
65 1.2.10.3 jdolecek #endif
66 1.2.10.3 jdolecek
67 1.2.10.2 tls __BEGIN_DECLS
68 1.2.10.2 tls
69 1.2.10.2 tls _Unwind_Reason_Code _Unwind_RaiseException(struct _Unwind_Exception *);
70 1.2.10.2 tls void _Unwind_Resume(struct _Unwind_Exception *) __dead;
71 1.2.10.2 tls _Unwind_Reason_Code _Unwind_Resume_or_Rethrow(struct _Unwind_Exception *);
72 1.2.10.2 tls _Unwind_Reason_Code _Unwind_ForcedUnwind(struct _Unwind_Exception *,
73 1.2.10.2 tls _Unwind_Stop_Fn, void *);
74 1.2.10.2 tls void _Unwind_DeleteException(struct _Unwind_Exception *);
75 1.2.10.2 tls uintptr_t _Unwind_GetGR(struct _Unwind_Context *, int);
76 1.2.10.2 tls void _Unwind_SetGR(struct _Unwind_Context *, int, uintptr_t);
77 1.2.10.2 tls uintptr_t _Unwind_GetIP(struct _Unwind_Context *);
78 1.2.10.2 tls uintptr_t _Unwind_GetIPInfo(struct _Unwind_Context *, int *);
79 1.2.10.2 tls uintptr_t _Unwind_GetCFA(struct _Unwind_Context *);
80 1.2.10.2 tls void _Unwind_SetIP(struct _Unwind_Context *, uintptr_t);
81 1.2.10.2 tls uintptr_t _Unwind_GetRegionStart(struct _Unwind_Context *);
82 1.2.10.2 tls uintptr_t _Unwind_GetLanguageSpecificData(struct _Unwind_Context *);
83 1.2.10.2 tls uintptr_t _Unwind_GetDataRelBase(struct _Unwind_Context *);
84 1.2.10.2 tls uintptr_t _Unwind_GetTextRelBase(struct _Unwind_Context *);
85 1.2.10.2 tls
86 1.2.10.2 tls typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)(struct _Unwind_Context *,
87 1.2.10.2 tls void *);
88 1.2.10.2 tls _Unwind_Reason_Code _Unwind_Backtrace(_Unwind_Trace_Fn, void *);
89 1.2.10.2 tls void *_Unwind_FindEnclosingFunction(void *);
90 1.2.10.2 tls
91 1.2.10.2 tls void __register_frame(const void *);
92 1.2.10.2 tls void __register_frame_info(const void *, void *);
93 1.2.10.2 tls void __deregister_frame(const void *);
94 1.2.10.2 tls void *__deregister_frame_info(const void *);
95 1.2.10.2 tls
96 1.2.10.3 jdolecek #ifdef _UNWIND_GCC_EXTENSIONS
97 1.2.10.3 jdolecek void *_Unwind_Find_FDE(void *, struct dwarf_eh_bases *);
98 1.2.10.3 jdolecek #endif
99 1.2.10.3 jdolecek
100 1.2.10.2 tls __END_DECLS
101 1.2.10.2 tls
102 1.2.10.2 tls #endif // _UNWIND_H
103