| Index: third_party/libc++abi/src/cxa_exception.hpp
|
| ===================================================================
|
| --- third_party/libc++abi/src/cxa_exception.hpp (revision 0)
|
| +++ third_party/libc++abi/src/cxa_exception.hpp (revision 0)
|
| @@ -0,0 +1,123 @@
|
| +//===------------------------- cxa_exception.hpp --------------------------===//
|
| +//
|
| +// The LLVM Compiler Infrastructure
|
| +//
|
| +// This file is dual licensed under the MIT and the University of Illinois Open
|
| +// Source Licenses. See LICENSE.TXT for details.
|
| +//
|
| +//
|
| +// This file implements the "Exception Handling APIs"
|
| +// http://www.codesourcery.com/public/cxx-abi/abi-eh.html
|
| +//
|
| +//===----------------------------------------------------------------------===//
|
| +
|
| +#ifndef _CXA_EXCEPTION_H
|
| +#define _CXA_EXCEPTION_H
|
| +
|
| +#include <exception> // for std::unexpected_handler and std::terminate_handler
|
| +#include <cxxabi.h>
|
| +#include "unwind.h"
|
| +
|
| +namespace __cxxabiv1 {
|
| +
|
| +#pragma GCC visibility push(hidden)
|
| +
|
| +static const uint64_t kOurExceptionClass = 0x434C4E47432B2B00; // CLNGC++\0
|
| +static const uint64_t kOurDependentExceptionClass = 0x434C4E47432B2B01; // CLNGC++\1
|
| +static const uint64_t get_vendor_and_language = 0xFFFFFFFFFFFFFF00; // mask for CLNGC++
|
| +
|
| + struct __cxa_exception {
|
| +#if __LP64__
|
| + // This is a new field to support C++ 0x exception_ptr.
|
| + // For binary compatibility it is at the start of this
|
| + // struct which is prepended to the object thrown in
|
| + // __cxa_allocate_exception.
|
| + size_t referenceCount;
|
| +#endif
|
| +
|
| + // Manage the exception object itself.
|
| + std::type_info *exceptionType;
|
| + void (*exceptionDestructor)(void *);
|
| + std::unexpected_handler unexpectedHandler;
|
| + std::terminate_handler terminateHandler;
|
| +
|
| + __cxa_exception *nextException;
|
| +
|
| + int handlerCount;
|
| +
|
| +#ifdef __ARM_EABI_UNWINDER__
|
| + __cxa_exception* nextPropagatingException;
|
| + int propagationCount;
|
| +#else
|
| + int handlerSwitchValue;
|
| + const unsigned char *actionRecord;
|
| + const unsigned char *languageSpecificData;
|
| + void *catchTemp;
|
| + void *adjustedPtr;
|
| +#endif
|
| +
|
| +#if !__LP64__
|
| + // This is a new field to support C++ 0x exception_ptr.
|
| + // For binary compatibility it is placed where the compiler
|
| + // previously adding padded to 64-bit align unwindHeader.
|
| + size_t referenceCount;
|
| +#endif
|
| +
|
| + _Unwind_Exception unwindHeader;
|
| + };
|
| +
|
| +// http://sourcery.mentor.com/archives/cxx-abi-dev/msg01924.html
|
| +
|
| + struct __cxa_dependent_exception {
|
| +#if __LP64__
|
| + void* primaryException;
|
| +#endif
|
| +
|
| + std::type_info *exceptionType;
|
| + void (*exceptionDestructor)(void *);
|
| + std::unexpected_handler unexpectedHandler;
|
| + std::terminate_handler terminateHandler;
|
| +
|
| + __cxa_exception *nextException;
|
| +
|
| + int handlerCount;
|
| +
|
| +#ifdef __ARM_EABI_UNWINDER__
|
| + __cxa_exception* nextPropagatingException;
|
| + int propagationCount;
|
| +#else
|
| + int handlerSwitchValue;
|
| + const unsigned char *actionRecord;
|
| + const unsigned char *languageSpecificData;
|
| + void * catchTemp;
|
| + void *adjustedPtr;
|
| +#endif
|
| +
|
| +#if !__LP64__
|
| + void* primaryException;
|
| +#endif
|
| +
|
| + _Unwind_Exception unwindHeader;
|
| + };
|
| +
|
| + struct __cxa_eh_globals {
|
| + __cxa_exception * caughtExceptions;
|
| + unsigned int uncaughtExceptions;
|
| +#ifdef __ARM_EABI_UNWINDER__
|
| + __cxa_exception* propagatingExceptions;
|
| +#endif
|
| + };
|
| +
|
| +#pragma GCC visibility pop
|
| +#pragma GCC visibility push(default)
|
| +
|
| + extern "C" __cxa_eh_globals * __cxa_get_globals ();
|
| + extern "C" __cxa_eh_globals * __cxa_get_globals_fast ();
|
| +
|
| + extern "C" void * __cxa_allocate_dependent_exception ();
|
| + extern "C" void __cxa_free_dependent_exception (void * dependent_exception);
|
| +
|
| +#pragma GCC visibility pop
|
| +}
|
| +
|
| +#endif // _CXA_EXCEPTION_H
|
|
|