//===- 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 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_begin_catch_if_isa(const std::type_info *CatchType); void __llvm_cxxeh_end_catch(void); void __llvm_cxxeh_rethrow(void); } #endif