summaryrefslogtreecommitdiff
path: root/src/pal/inc/pal_unwind.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/pal/inc/pal_unwind.h')
-rw-r--r--src/pal/inc/pal_unwind.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/pal/inc/pal_unwind.h b/src/pal/inc/pal_unwind.h
new file mode 100644
index 0000000000..2931488e3b
--- /dev/null
+++ b/src/pal/inc/pal_unwind.h
@@ -0,0 +1,91 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+//
+// Definition of the Unwind API functions.
+// Taken from the ABI documentation.
+//
+
+
+
+#ifndef __PAL_UNWIND_H__
+#define __PAL_UNWIND_H__
+
+#if FEATURE_PAL_SXS
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+ //
+ // Exception Handling ABI Level I: Base ABI
+ //
+
+ typedef enum
+ {
+ _URC_NO_REASON = 0,
+ _URC_FOREIGN_EXCEPTION_CAUGHT = 1,
+ _URC_FATAL_PHASE2_ERROR = 2,
+ _URC_FATAL_PHASE1_ERROR = 3,
+ _URC_NORMAL_STOP = 4,
+ _URC_END_OF_STACK = 5,
+ _URC_HANDLER_FOUND = 6,
+ _URC_INSTALL_CONTEXT = 7,
+ _URC_CONTINUE_UNWIND = 8,
+ } _Unwind_Reason_Code;
+
+ typedef enum
+ {
+ _UA_SEARCH_PHASE = 1,
+ _UA_CLEANUP_PHASE = 2,
+ _UA_HANDLER_FRAME = 4,
+ _UA_FORCE_UNWIND = 8,
+ } _Unwind_Action;
+ #define _UA_PHASE_MASK (_UA_SEARCH_PHASE|_UA_CLEANUP_PHASE)
+
+ struct _Unwind_Context;
+
+ void *_Unwind_GetIP(struct _Unwind_Context *context);
+ void _Unwind_SetIP(struct _Unwind_Context *context, void *new_value);
+ void *_Unwind_GetCFA(struct _Unwind_Context *context);
+ void *_Unwind_GetGR(struct _Unwind_Context *context, int index);
+ void _Unwind_SetGR(struct _Unwind_Context *context, int index, void *new_value);
+
+ struct _Unwind_Exception;
+
+ typedef void (*_Unwind_Exception_Cleanup_Fn)(
+ _Unwind_Reason_Code urc,
+ struct _Unwind_Exception *exception_object);
+
+ struct _Unwind_Exception
+ {
+ ULONG64 exception_class;
+ _Unwind_Exception_Cleanup_Fn exception_cleanup;
+ UINT_PTR private_1;
+ UINT_PTR private_2;
+ } __attribute__((aligned));
+
+ void _Unwind_DeleteException(struct _Unwind_Exception *exception_object);
+
+ typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)(struct _Unwind_Context *context, void *pvParam);
+ _Unwind_Reason_Code _Unwind_Backtrace(_Unwind_Trace_Fn pfnTrace, void *pvParam);
+
+ _Unwind_Reason_Code _Unwind_RaiseException(struct _Unwind_Exception *exception_object);
+ __attribute__((noreturn)) void _Unwind_Resume(struct _Unwind_Exception *exception_object);
+
+ //
+ // Exception Handling ABI Level II: C++ ABI
+ //
+
+ void *__cxa_begin_catch(void *exceptionObject);
+ void __cxa_end_catch();
+
+#ifdef __cplusplus
+};
+#endif // __cplusplus
+
+#endif // FEATURE_PAL_SXS
+
+#endif // __PAL_UNWIND_H__