summaryrefslogtreecommitdiff
path: root/runtime/GCCLibraries/libexception/C++-Exception.h
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/GCCLibraries/libexception/C++-Exception.h')
-rw-r--r--runtime/GCCLibraries/libexception/C++-Exception.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/runtime/GCCLibraries/libexception/C++-Exception.h b/runtime/GCCLibraries/libexception/C++-Exception.h
new file mode 100644
index 0000000000..cc37294572
--- /dev/null
+++ b/runtime/GCCLibraries/libexception/C++-Exception.h
@@ -0,0 +1,62 @@
+//===- c++-exception.h - C++ Specific exception Handling --------*- C++ -*-===//
+//
+// This file defines the data structures and API used by the C++ exception
+// handling runtime library.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef CXX_EXCEPTION_H
+#define CXX_EXCEPTION_H
+
+#include "exception.h"
+#include <typeinfo>
+
+typedef struct llvm_cxx_exception {
+ /* TypeInfo - A pointer to the C++ std::type_info object for this exception
+ * class. This is required because the class may not be polymorphic.
+ */
+ const std::type_info *TypeInfo;
+
+ /* ExceptionObjectDestructor - A pointer to the function which destroys the
+ * object represented by this exception. This is required because the class
+ * may not be polymorphic. This may be null if there is no cleanup required.
+ */
+ void (*ExceptionObjectDestructor)(void *);
+
+ /* UnexpectedHandler - This contains a pointer to the "unexpected" handler
+ * which may be registered by the user program with set_unexpected. Calls to
+ * unexpected which are a result of an exception throw are supposed to use the
+ * value of the handler at the time of the throw, not the currently set value.
+ */
+ void *UnexpectedHandler;
+
+ /* TerminateHandler - This contains a pointer to the "terminate" handler which
+ * may be registered by the user program with set_terminate. Calls to
+ * unexpected which are a result of an exception throw are supposed to use the
+ * value of the handler at the time of the throw, not the currently set value.
+ */
+ void *TerminateHandler;
+
+ /* BaseException - The language independent portion of the exception state.
+ * This is at the end of the record so that we can add additional members to
+ * this structure without breaking binary compatibility.
+ */
+ llvm_exception BaseException;
+} llvm_cxx_exception;
+
+
+
+extern "C" {
+ void *__llvm_cxxeh_allocate_exception(unsigned NumBytes);
+ void __llvm_cxxeh_free_exception(void *ObjectPtr);
+ void __llvm_cxxeh_throw(void *ObjectPtr, const std::type_info *TypeInfoPtr,
+ void (*DtorPtr)(void*));
+
+ void * __llvm_cxxeh_current_uncaught_exception_isa(const std::type_info *Ty);
+ void *__llvm_cxxeh_begin_catch(void);
+ void __llvm_cxxeh_end_catch(void);
+
+ void __llvm_cxxeh_rethrow(void);
+}
+
+#endif