llvm-6502/runtime/GCCLibraries/crtend/C++-Exception.h

64 lines
2.3 KiB
C
Raw Normal View History

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