diff --git a/lib/libc++abi2.exp b/lib/libc++abi2.exp new file mode 100644 index 00000000..49e6108f --- /dev/null +++ b/lib/libc++abi2.exp @@ -0,0 +1,199 @@ +___cxa_allocate_exception +___cxa_end_catch +___cxa_demangle +___cxa_current_exception_type +___cxa_call_unexpected +___cxa_free_exception +___cxa_get_exception_ptr +___cxa_get_globals +___cxa_get_globals_fast +___cxa_guard_abort +___cxa_guard_acquire +___cxa_guard_release +___cxa_rethrow +___cxa_pure_virtual +___cxa_begin_catch +___cxa_throw +___cxa_vec_cctor +___cxa_vec_cleanup +___cxa_vec_ctor +___cxa_vec_delete +___cxa_vec_delete2 +___cxa_vec_delete3 +___cxa_vec_dtor +___cxa_vec_new +___cxa_vec_new2 +___cxa_vec_new3 +___dynamic_cast +___gxx_personality_v0 +__ZTIDi +__ZTIDn +__ZTIDs +__ZTIPDi +__ZTIPDn +__ZTIPDs +__ZTIPKDi +__ZTIPKDn +__ZTIPKDs +__ZTSPm +__ZTSPl +__ZTSPj +__ZTSPi +__ZTSPh +__ZTSPf +__ZTSPe +__ZTSPd +__ZTSPc +__ZTSPb +__ZTSPa +__ZTSPKc +__ZTSPKy +__ZTSPKx +__ZTSPKw +__ZTSPKv +__ZTSPKt +__ZTSPKs +__ZTSPKm +__ZTSPKl +__ZTSPKi +__ZTSPKh +__ZTSPs +__ZTSPt +__ZTSPv +__ZTSPw +__ZTSPKa +__ZTSPx +__ZTSPy +__ZTSPKd +__ZTSPKe +__ZTSPKj +__ZTSPKb +__ZTSPKf +__ZTSv +__ZTSt +__ZTSs +__ZTSm +__ZTSl +__ZTSj +__ZTSi +__ZTSh +__ZTSf +__ZTSe +__ZTSd +__ZTSc +__ZTSw +__ZTSx +__ZTSy +__ZTSb +__ZTSa +__ZTIPKh +__ZTIPKf +__ZTIPKe +__ZTIPKd +__ZTIPKc +__ZTIPKb +__ZTIPKa +__ZTIPy +__ZTIPx +__ZTIPw +__ZTIPv +__ZTIPt +__ZTIPs +__ZTIPm +__ZTIPl +__ZTIPj +__ZTIPi +__ZTIPKi +__ZTIPKj +__ZTIPKl +__ZTIPKm +__ZTIPKs +__ZTIPKt +__ZTIPKv +__ZTIPKw +__ZTIPKx +__ZTIPKy +__ZTIPa +__ZTIPb +__ZTIPc +__ZTIPd +__ZTIPe +__ZTIPf +__ZTIPh +__ZTVN10__cxxabiv129__pointer_to_member_type_infoE +__ZTVN10__cxxabiv116__enum_type_infoE +__ZTVN10__cxxabiv117__array_type_infoE +__ZTVN10__cxxabiv117__class_type_infoE +__ZTVN10__cxxabiv117__pbase_type_infoE +__ZTVN10__cxxabiv119__pointer_type_infoE +__ZTVN10__cxxabiv120__function_type_infoE +__ZTVN10__cxxabiv120__si_class_type_infoE +__ZTVN10__cxxabiv121__vmi_class_type_infoE +__ZTVN10__cxxabiv123__fundamental_type_infoE +__ZTIa +__ZTIb +__ZTIc +__ZTId +__ZTIe +__ZTIf +__ZTIh +__ZTIi +__ZTIj +__ZTIl +__ZTIm +__ZTIs +__ZTIt +__ZTSN10__cxxabiv129__pointer_to_member_type_infoE +__ZTSN10__cxxabiv123__fundamental_type_infoE +__ZTSN10__cxxabiv121__vmi_class_type_infoE +__ZTSN10__cxxabiv120__si_class_type_infoE +__ZTSN10__cxxabiv120__function_type_infoE +__ZTSN10__cxxabiv119__pointer_type_infoE +__ZTSN10__cxxabiv117__pbase_type_infoE +__ZTSN10__cxxabiv117__class_type_infoE +__ZTSN10__cxxabiv117__array_type_infoE +__ZTSN10__cxxabiv116__enum_type_infoE +__ZTIy +__ZTIx +__ZTIw +__ZTIv +__ZSt13get_terminatev +__ZSt13set_terminatePFvvE +__ZSt14get_unexpectedv +__ZSt14set_unexpectedPFvvE +__ZSt15get_new_handlerv +__ZSt15set_new_handlerPFvvE +__ZSt9terminatev +__ZNSt9bad_allocD1Ev +__ZTISt9bad_alloc +__ZNSt9bad_allocC1Ev +__ZTISt13bad_exception +__ZTVSt10bad_typeid +__ZTVSt9exception +__ZNSt10bad_typeidC1Ev +__ZNSt10bad_typeidC1Ev +__ZNKSt10bad_typeid4whatEv +__ZNSt10bad_typeidD1Ev +__ZTVSt8bad_cast +__ZNSt8bad_castC1Ev +__ZNKSt8bad_cast4whatEv +__ZNSt8bad_castD1Ev +__ZTVSt9bad_alloc +__ZTVSt20bad_array_new_length +__ZTVSt13bad_exception +__ZNKSt9exception4whatEv +__ZNKSt9bad_alloc4whatEv +__ZNSt20bad_array_new_lengthC1Ev +__ZNKSt13bad_exception4whatEv +__ZNSt9exceptionD1Ev +__ZNKSt20bad_array_new_length4whatEv +__ZNSt13bad_exceptionD1Ev +__ZNSt20bad_array_new_lengthD1Ev +__ZdaPv +__ZdlPv +__ZdlPvRKSt9nothrow_t +__Znam +__ZdaPvRKSt9nothrow_t +__Znwm +__ZnwmRKSt9nothrow_t +__ZnamRKSt9nothrow_t diff --git a/src/exception.cpp b/src/exception.cpp index 26d97a96..40327d6a 100644 --- a/src/exception.cpp +++ b/src/exception.cpp @@ -12,14 +12,17 @@ #if __APPLE__ #include + using namespace __cxxabiv1; - using namespace __cxxabiapple; - // On Darwin, there are two STL shared libraries and a lower level ABI - // shared libray. The globals holding the current terminate handler and - // current unexpected handler are in the ABI library. - #define __terminate_handler __cxxabiapple::__cxa_terminate_handler - #define __unexpected_handler __cxxabiapple::__cxa_unexpected_handler #define HAVE_DEPENDENT_EH_ABI 1 + #ifndef _LIBCPPABI_VERSION + using namespace __cxxabiapple; + // On Darwin, there are two STL shared libraries and a lower level ABI + // shared libray. The globals holding the current terminate handler and + // current unexpected handler are in the ABI library. + #define __terminate_handler __cxxabiapple::__cxa_terminate_handler + #define __unexpected_handler __cxxabiapple::__cxa_unexpected_handler + #endif // _LIBCPPABI_VERSION #elif defined(LIBCXXRT) #include using namespace __cxxabiv1; @@ -29,7 +32,8 @@ static std::unexpected_handler __unexpected_handler; #endif // __APPLE__ -#ifndef LIBCXXRT +#if !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION) + // libcxxrt provides implementations of these functions itself. std::unexpected_handler std::set_unexpected(std::unexpected_handler func) _NOEXCEPT @@ -84,13 +88,13 @@ std::terminate() _NOEXCEPT } #endif // _LIBCPP_NO_EXCEPTIONS } -#endif // LIBCXXRT +#endif // !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION) bool std::uncaught_exception() _NOEXCEPT { #if __APPLE__ // on Darwin, there is a helper function so __cxa_get_globals is private - return __cxxabiapple::__cxa_uncaught_exception(); + return __cxa_uncaught_exception(); #elif LIBCXXRT __cxa_eh_globals * globals = __cxa_get_globals(); return (globals->uncaughtExceptions != 0); @@ -103,6 +107,8 @@ bool std::uncaught_exception() _NOEXCEPT namespace std { +#ifndef _LIBCPPABI_VERSION + exception::~exception() _NOEXCEPT { } @@ -121,6 +127,8 @@ const char* bad_exception::what() const _NOEXCEPT return "std::bad_exception"; } +#endif // _LIBCPPABI_VERSION + exception_ptr::~exception_ptr() _NOEXCEPT { #if HAVE_DEPENDENT_EH_ABI diff --git a/src/new.cpp b/src/new.cpp index f2987b1f..dfeb5a1a 100644 --- a/src/new.cpp +++ b/src/new.cpp @@ -13,14 +13,19 @@ #if __APPLE__ #include - // On Darwin, there are two STL shared libraries and a lower level ABI - // shared libray. The global holding the current new handler is - // in the ABI library and named __cxa_new_handler. - #define __new_handler __cxxabiapple::__cxa_new_handler + + #ifndef _LIBCPPABI_VERSION + // On Darwin, there are two STL shared libraries and a lower level ABI + // shared libray. The global holding the current new handler is + // in the ABI library and named __cxa_new_handler. + #define __new_handler __cxxabiapple::__cxa_new_handler + #endif #else // __APPLE__ static std::new_handler __new_handler; #endif +#ifndef _LIBCPPABI_VERSION + // Implement all new and delete operators as weak definitions // in this shared library, so that they can be overriden by programs // that define non-weak copies of the functions. @@ -129,11 +134,15 @@ operator delete[] (void* ptr, const std::nothrow_t&) _NOEXCEPT ::operator delete[](ptr); } +#endif + namespace std { const nothrow_t nothrow = {}; +#ifndef _LIBCPPABI_VERSION + new_handler set_new_handler(new_handler handler) _NOEXCEPT { @@ -174,6 +183,8 @@ bad_array_new_length::what() const _NOEXCEPT return "bad_array_new_length"; } +#endif + void __throw_bad_alloc() { diff --git a/src/typeinfo.cpp b/src/typeinfo.cpp index 9ca03a18..129998e5 100644 --- a/src/typeinfo.cpp +++ b/src/typeinfo.cpp @@ -13,6 +13,8 @@ #include "typeinfo" +#ifndef _LIBCPPABI_VERSION + std::bad_cast::bad_cast() _NOEXCEPT { } @@ -48,3 +50,4 @@ std::bad_typeid::what() const _NOEXCEPT void __cxxabiv1::__cxa_bad_cast() { throw std::bad_cast(); } #endif +#endif // _LIBCPPABI_VERSION