1 //===------------------------------- unwind.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 // C++ ABI Level 1 ABI documented at: 10 // http://mentorembedded.github.io/cxx-abi/abi-eh.html 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef _UNWIND_H 15 #define _UNWIND_H 16 17 #include <stdint.h> 18 #include <stddef.h> 19 20 typedef enum { 21 _URC_NO_REASON = 0, 22 _URC_FOREIGN_EXCEPTION_CAUGHT = 1, 23 _URC_FATAL_PHASE2_ERROR = 2, 24 _URC_FATAL_PHASE1_ERROR = 3, 25 _URC_NORMAL_STOP = 4, 26 _URC_END_OF_STACK = 5, 27 _URC_HANDLER_FOUND = 6, 28 _URC_INSTALL_CONTEXT = 7, 29 _URC_CONTINUE_UNWIND = 8 30 } _Unwind_Reason_Code; 31 32 typedef enum { 33 _UA_SEARCH_PHASE = 1, 34 _UA_CLEANUP_PHASE = 2, 35 _UA_HANDLER_FRAME = 4, 36 _UA_FORCE_UNWIND = 8, 37 _UA_END_OF_STACK = 16 /* GCC extension */ 38 } _Unwind_Action; 39 40 struct _Unwind_Context; 41 42 struct _Unwind_Exception { 43 uint64_t exception_class; 44 void (*exception_cleanup)(_Unwind_Reason_Code, struct _Unwind_Exception *); 45 uintptr_t private_1; 46 uintptr_t private_2; 47 } __attribute__((__aligned__)); 48 49 typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)(int, _Unwind_Action, uint64_t, 50 struct _Unwind_Exception *, 51 struct _Unwind_Context *, 52 void *); 53 54 typedef _Unwind_Reason_Code (*__personality_routine)(int, _Unwind_Action, 55 uint64_t, 56 struct _Unwind_Exception *, 57 struct _Unwind_Context *); 58 59 __BEGIN_DECLS 60 61 _Unwind_Reason_Code _Unwind_RaiseException(struct _Unwind_Exception *); 62 void _Unwind_Resume(struct _Unwind_Exception *) __dead; 63 _Unwind_Reason_Code _Unwind_Resume_or_Rethrow(struct _Unwind_Exception *); 64 _Unwind_Reason_Code _Unwind_ForcedUnwind(struct _Unwind_Exception *, 65 _Unwind_Stop_Fn, void *); 66 void _Unwind_DeleteException(struct _Unwind_Exception *); 67 uintptr_t _Unwind_GetGR(struct _Unwind_Context *, int); 68 void _Unwind_SetGR(struct _Unwind_Context *, int, uintptr_t); 69 uintptr_t _Unwind_GetIP(struct _Unwind_Context *); 70 uintptr_t _Unwind_GetIPInfo(struct _Unwind_Context *, int *); 71 uintptr_t _Unwind_GetCFA(struct _Unwind_Context *); 72 void _Unwind_SetIP(struct _Unwind_Context *, uintptr_t); 73 uintptr_t _Unwind_GetRegionStart(struct _Unwind_Context *); 74 uintptr_t _Unwind_GetLanguageSpecificData(struct _Unwind_Context *); 75 uintptr_t _Unwind_GetDataRelBase(struct _Unwind_Context *); 76 uintptr_t _Unwind_GetTextRelBase(struct _Unwind_Context *); 77 78 typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)(struct _Unwind_Context *, 79 void *); 80 _Unwind_Reason_Code _Unwind_Backtrace(_Unwind_Trace_Fn, void *); 81 void *_Unwind_FindEnclosingFunction(void *); 82 83 void __register_frame(const void *); 84 void __register_frame_info(const void *, void *); 85 void __deregister_frame(const void *); 86 void *__deregister_frame_info(const void *); 87 88 __END_DECLS 89 90 #endif // _UNWIND_H 91