diff --git a/libs/uclibc++/Makefile b/libs/uclibc++/Makefile index 59725259f..b73e8bdd8 100644 --- a/libs/uclibc++/Makefile +++ b/libs/uclibc++/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=uclibc++ -PKG_VERSION:=0.2.2 -PKG_RELEASE:=4 +PKG_VERSION:=0.2.3 +PKG_RELEASE:=1 PKG_SOURCE:=uClibc++-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=http://cxx.uclibc.org/src/ -PKG_MD5SUM:=1ceef3209cca88be8f1bd9de99735954 +PKG_MD5SUM:=fd71a433ce1de85885d658f47885ab30 PKG_BUILD_DIR:=$(BUILD_DIR)/uClibc++-$(PKG_VERSION) PKG_BUILD_PARALLEL:=1 diff --git a/libs/uclibc++/patches/001-path_to_make.patch b/libs/uclibc++/patches/001-path_to_make.patch deleted file mode 100644 index 840dac326..000000000 --- a/libs/uclibc++/patches/001-path_to_make.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff -ur old/Makefile dev/Makefile ---- old/Makefile Sat Oct 14 17:49:55 2006 -+++ dev/Makefile Sat Oct 14 17:50:18 2006 -@@ -1,4 +1,3 @@ --MAKE = make - SUBDIRS = bin include src - - # User defines: -@@ -43,10 +42,10 @@ - #Menu configuration system - - extra/config/conf: -- make -C extra/config conf -+ $(MAKE) -C extra/config conf - - extra/config/mconf: -- make -C extra/config ncurses mconf -+ $(MAKE) -C extra/config ncurses mconf - - menuconfig: extra/config/mconf - @./extra/config/mconf extra/Configs/Config.in -@@ -71,7 +70,7 @@ - - include/system_configuration.h: .config - @if [ ! -x ./extra/config/conf ] ; then \ -- make -C extra/config conf; \ -+ $(MAKE) -C extra/config conf; \ - fi; - @./extra/config/conf -o extra/Configs/Config.in - diff --git a/libs/uclibc++/patches/002-path_to_bash.patch b/libs/uclibc++/patches/002-path_to_bash.patch index 46b793b68..05d0e6ff4 100644 --- a/libs/uclibc++/patches/002-path_to_bash.patch +++ b/libs/uclibc++/patches/002-path_to_bash.patch @@ -5,8 +5,8 @@ diff -ur old/bin/Makefile dev/bin/Makefile $(INSTALL) -m 755 $(WRAPPER) $(PREFIX)$(UCLIBCXX_RUNTIME_BINDIR) $(WRAPPER): -- echo "#!/bin/bash" > $(WRAPPER) -+ echo "#!/usr/bin/env bash" > $(WRAPPER) - echo "" >> $(WRAPPER) +- echo '#!/bin/sh' > $(WRAPPER) ++ echo '#!/usr/bin/env bash' > $(WRAPPER) + echo '' >> $(WRAPPER) echo 'WRAPPER_INCLUDEDIR="$${WRAPPER_INCLUDEDIR:=-I$(UCLIBCXX_RUNTIME_INCLUDEDIR)}"' >> $(WRAPPER) echo 'WRAPPER_LIBDIR="$${WRAPPER_LIBDIR:=-L$(UCLIBCXX_RUNTIME_LIBDIR)}"' >> $(WRAPPER) diff --git a/libs/uclibc++/patches/007-numeric_limits.patch b/libs/uclibc++/patches/007-numeric_limits.patch deleted file mode 100644 index 1ed7d6c6e..000000000 --- a/libs/uclibc++/patches/007-numeric_limits.patch +++ /dev/null @@ -1,66 +0,0 @@ -Index: uClibc++-0.2.2/include/limits -=================================================================== ---- uClibc++-0.2.2/include/limits (revision 1877) -+++ uClibc++-0.2.2/include/limits (revision 1878) -@@ -143,6 +143,53 @@ - static T signaling_NaN(); - }; - -+template <> class numeric_limits { -+public: -+ typedef bool T; -+ // General -- meaningful for all specializations. -+ static const bool is_specialized = true; -+ static T min(){ -+ return false; -+ } -+ static T max(){ -+ return true; -+ } -+ static const int radix = 2; -+ static const int digits = 1; -+ static const int digits10 = 0; -+ static const bool is_signed = false; -+ static const bool is_integer = true; -+ static const bool is_exact = true; -+ static const bool traps = false; -+ static const bool is_modulo = false; -+ static const bool is_bounded = true; -+ -+ // Floating point specific. -+ -+ static T epsilon(){ -+ return 0; -+ } -+ static T round_error(){ -+ return 0; -+ } -+ static const int min_exponent10 = 0; -+ static const int max_exponent10 = 0; -+ static const int min_exponent = 0; -+ -+ static const int max_exponent = 0; -+ static const bool has_infinity = false; -+ static const bool has_quiet_NaN = false; -+ static const bool has_signaling_NaN = false; -+ static const bool is_iec559 = false; -+ static const bool has_denorm = false; -+ static const bool tinyness_before = false; -+ static const float_round_style round_style = round_indeterminate; -+ static T denorm_min(); -+ static T infinity(); -+ static T quiet_NaN(); -+ static T signaling_NaN(); -+}; -+ - template <> class numeric_limits { - public: - typedef unsigned char T; -@@ -567,6 +614,7 @@ - }; - - template <> class numeric_limits { -+public: - typedef double numeric_type; - - static const bool is_specialized = true; diff --git a/libs/uclibc++/patches/008-integer_width.patch b/libs/uclibc++/patches/008-integer_width.patch deleted file mode 100644 index c467e6011..000000000 --- a/libs/uclibc++/patches/008-integer_width.patch +++ /dev/null @@ -1,314 +0,0 @@ -Index: uClibc++-0.2.2/include/ostream -=================================================================== ---- uClibc++-0.2.2/include/ostream (revision 708) -+++ uClibc++-0.2.2/include/ostream (revision 709) -@@ -129,6 +129,18 @@ - return *this; - } - -+ _UCXXEXPORT void printout(const char_type* s, streamsize n) -+ { -+ int extra = ios::width() - n; -+ if ((ios::flags()&ios::adjustfield) == ios::right) -+ while (extra-- > 0) -+ put(ios::fill()); -+ write(s, n); -+ if ((ios::flags()&ios::adjustfield) == ios::left) -+ while (extra-- > 0) -+ put(ios::fill()); -+ } -+ - protected: - basic_ostream(const basic_ostream &){ } - basic_ostream & operator=(const basic_ostream &){ return *this; } -@@ -142,15 +154,15 @@ - sentry s(*this); - if( basic_ios::flags() & ios_base::boolalpha){ - if(n){ -- write("true", 4); -+ printout("true", 4); - }else{ -- write("false", 5); -+ printout("false", 5); - } - }else{ - if(n){ -- write("1", 1); -+ printout("1", 1); - }else{ -- write("0", 1); -+ printout("0", 1); - } - } - if(basic_ios::flags() & ios_base::unitbuf){ -@@ -219,7 +231,7 @@ - template _UCXXEXPORT basic_ostream& basic_ostream::operator<<(void* p){ - sentry s(*this); - char buffer[20]; -- write(buffer, snprintf(buffer, 20, "%p", p) ); -+ printout(buffer, snprintf(buffer, 20, "%p", p) ); - if(basic_ios::flags() & ios_base::unitbuf){ - flush(); - } -@@ -356,7 +368,7 @@ - operator<<(basic_ostream& out, const charT* c) - { - typename basic_ostream::sentry s(out); -- out.write(c, traits::length(c) ); -+ out.printout(c, traits::length(c) ); - return out; - } - -@@ -364,7 +376,7 @@ - operator<<(basic_ostream& out, const char* c) - { - typename basic_ostream::sentry s(out); -- out.write(c, char_traits::length(c) ); -+ out.printout(c, char_traits::length(c) ); - return out; - } - -@@ -373,7 +385,7 @@ - operator<<(basic_ostream& out, const char* c) - { - typename basic_ostream::sentry s(out); -- out.write(c, traits::length(c)); -+ out.printout(c, traits::length(c)); - return out; - } - -@@ -389,7 +401,7 @@ - temp[i] = out.widen(c[i]); - } - -- out.write(temp, numChars); -+ out.printout(temp, numChars); - return out; - } - #endif -@@ -399,7 +411,7 @@ - operator<<(basic_ostream& out, const signed char* c) - { - typename basic_ostream::sentry s(out); -- out.write(reinterpret_cast(c), traits::length( reinterpret_cast(c))); -+ out.printout(reinterpret_cast(c), traits::length( reinterpret_cast(c))); - return out; - } - -@@ -407,7 +419,7 @@ - operator<<(basic_ostream& out, const unsigned char* c) - { - typename basic_ostream::sentry s(out); -- out.write(reinterpret_cast(c), traits::length( reinterpret_cast(c))); -+ out.printout(reinterpret_cast(c), traits::length( reinterpret_cast(c))); - return out; - } - -Index: uClibc++-0.2.2/include/ostream_helpers -=================================================================== ---- uClibc++-0.2.2/include/ostream_helpers (revision 708) -+++ uClibc++-0.2.2/include/ostream_helpers (revision 709) -@@ -88,7 +88,7 @@ - } - } - -- stream.write(buffer, snprintf(buffer, 20, formatString, n) ); -+ stream.printout(buffer, snprintf(buffer, 20, formatString, n) ); - - if(stream.flags() & ios_base::unitbuf){ - stream.flush(); -@@ -135,7 +135,7 @@ - } - } - -- stream.write(buffer, snprintf(buffer, 20, formatString, n)); -+ stream.printout(buffer, snprintf(buffer, 20, formatString, n)); - if(stream.flags() & ios_base::unitbuf){ - stream.flush(); - } -@@ -182,7 +182,7 @@ - } - } - -- stream.write(buffer, snprintf(buffer, 27, formatString, n) ); -+ stream.printout(buffer, snprintf(buffer, 27, formatString, n) ); - - if(stream.flags() & ios_base::unitbuf){ - stream.flush(); -@@ -228,7 +228,7 @@ - } - } - -- stream.write(buffer, snprintf(buffer, 27, formatString, n) ); -+ stream.printout(buffer, snprintf(buffer, 27, formatString, n) ); - - if(stream.flags() & ios_base::unitbuf){ - stream.flush(); -@@ -256,7 +256,7 @@ - } else { - length = snprintf(buffer, 32, "%*.*g",static_cast(stream.width()),static_cast(stream.precision()), f); - } -- stream.write(buffer, length); -+ stream.printout(buffer, length); - if(stream.flags() & ios_base::unitbuf){ - stream.flush(); - } -@@ -280,7 +280,7 @@ - } else { - length = snprintf(buffer, 32, "%*.*Lg", static_cast(stream.width()), static_cast(stream.precision()), f); - } -- stream.write(buffer, length); -+ stream.printout(buffer, length); - if(stream.flags() & ios_base::unitbuf){ - stream.flush(); - } -@@ -295,25 +295,25 @@ - { - wchar_t buffer[20]; - if( stream.flags() & ios_base::dec){ -- stream.write(buffer, swprintf(buffer, 20, L"%ld", n)); -+ stream.printout(buffer, swprintf(buffer, 20, L"%ld", n)); - }else if( stream.flags() & ios_base::oct){ - if( stream.flags() & ios_base::showbase){ -- stream.write(buffer, swprintf(buffer, 20, L"%#lo", n)); -+ stream.printout(buffer, swprintf(buffer, 20, L"%#lo", n)); - }else{ -- stream.write(buffer, swprintf(buffer, 20, L"%lo", n) ); -+ stream.printout(buffer, swprintf(buffer, 20, L"%lo", n) ); - } - }else if (stream.flags() & ios_base::hex){ - if(stream.flags() & ios_base::showbase){ - if(stream.flags() & ios_base::uppercase){ -- stream.write(buffer, swprintf(buffer, 20, L"%#lX", n) ); -+ stream.printout(buffer, swprintf(buffer, 20, L"%#lX", n) ); - }else{ -- stream.write(buffer, swprintf(buffer, 20, L"%#lx", n) ); -+ stream.printout(buffer, swprintf(buffer, 20, L"%#lx", n) ); - } - }else{ - if(stream.flags() & ios_base::uppercase){ -- stream.write(buffer, swprintf(buffer, 20, L"%lX", n) ); -+ stream.printout(buffer, swprintf(buffer, 20, L"%lX", n) ); - }else{ -- stream.write(buffer, swprintf(buffer, 20, L"%lx", n) ); -+ stream.printout(buffer, swprintf(buffer, 20, L"%lx", n) ); - } - } - } -@@ -329,25 +329,25 @@ - { - wchar_t buffer[20]; - if( stream.flags() & ios_base::dec){ -- stream.write(buffer, swprintf(buffer, 20, L"%lu", n)); -+ stream.printout(buffer, swprintf(buffer, 20, L"%lu", n)); - }else if( stream.flags() & ios_base::oct){ - if( stream.flags() & ios_base::showbase){ -- stream.write(buffer, swprintf(buffer, 20, L"%#lo", n)); -+ stream.printout(buffer, swprintf(buffer, 20, L"%#lo", n)); - }else{ -- stream.write(buffer, swprintf(buffer, 20, L"%lo", n) ); -+ stream.printout(buffer, swprintf(buffer, 20, L"%lo", n) ); - } - }else if (stream.flags() & ios_base::hex){ - if(stream.flags() & ios_base::showbase){ - if(stream.flags() & ios_base::uppercase){ -- stream.write(buffer, swprintf(buffer, 20, L"%#lX", n) ); -+ stream.printout(buffer, swprintf(buffer, 20, L"%#lX", n) ); - }else{ -- stream.write(buffer, swprintf(buffer, 20, L"%#lx", n) ); -+ stream.printout(buffer, swprintf(buffer, 20, L"%#lx", n) ); - } - }else{ - if(stream.flags() & ios_base::uppercase){ -- stream.write(buffer, swprintf(buffer, 20, L"%lX", n) ); -+ stream.printout(buffer, swprintf(buffer, 20, L"%lX", n) ); - }else{ -- stream.write(buffer, swprintf(buffer, 20, L"%lx", n) ); -+ stream.printout(buffer, swprintf(buffer, 20, L"%lx", n) ); - } - } - } -@@ -365,25 +365,25 @@ - { - wchar_t buffer[28]; - if( stream.flags() & ios_base::dec){ -- stream.write(buffer, swprintf(buffer, 27, L"%lld", n)); -+ stream.printout(buffer, swprintf(buffer, 27, L"%lld", n)); - }else if( stream.flags() & ios_base::oct){ - if( stream.flags() & ios_base::showbase){ -- stream.write(buffer, swprintf(buffer, 27, L"%#llo", n)); -+ stream.printout(buffer, swprintf(buffer, 27, L"%#llo", n)); - }else{ -- stream.write(buffer, swprintf(buffer, 27, L"%llo", n) ); -+ stream.printout(buffer, swprintf(buffer, 27, L"%llo", n) ); - } - }else if (stream.flags() & ios_base::hex){ - if(stream.flags() & ios_base::showbase){ - if(stream.flags() & ios_base::uppercase){ -- stream.write(buffer, swprintf(buffer, 27, L"%#llX", n) ); -+ stream.printout(buffer, swprintf(buffer, 27, L"%#llX", n) ); - }else{ -- stream.write(buffer, swprintf(buffer, 27, L"%#llx", n) ); -+ stream.printout(buffer, swprintf(buffer, 27, L"%#llx", n) ); - } - }else{ - if(stream.flags() & ios_base::uppercase){ -- stream.write(buffer, swprintf(buffer, 27, L"%llX", n) ); -+ stream.printout(buffer, swprintf(buffer, 27, L"%llX", n) ); - }else{ -- stream.write(buffer, swprintf(buffer, 27, L"%llx", n) ); -+ stream.printout(buffer, swprintf(buffer, 27, L"%llx", n) ); - } - } - } -@@ -399,25 +399,25 @@ - { - wchar_t buffer[28]; - if( stream.flags() & ios_base::dec){ -- stream.write(buffer, swprintf(buffer, 27, L"%llu", n)); -+ stream.printout(buffer, swprintf(buffer, 27, L"%llu", n)); - }else if( stream.flags() & ios_base::oct){ - if( stream.flags() & ios_base::showbase){ -- stream.write(buffer, swprintf(buffer, 27, L"%#llo", n)); -+ stream.printout(buffer, swprintf(buffer, 27, L"%#llo", n)); - }else{ -- stream.write(buffer, swprintf(buffer, 27, L"%llo", n) ); -+ stream.printout(buffer, swprintf(buffer, 27, L"%llo", n) ); - } - }else if (stream.flags() & ios_base::hex){ - if(stream.flags() & ios_base::showbase){ - if(stream.flags() & ios_base::uppercase){ -- stream.write(buffer, swprintf(buffer, 27, L"%#llX", n) ); -+ stream.printout(buffer, swprintf(buffer, 27, L"%#llX", n) ); - }else{ -- stream.write(buffer, swprintf(buffer, 27, L"%#llx", n) ); -+ stream.printout(buffer, swprintf(buffer, 27, L"%#llx", n) ); - } - }else{ - if(stream.flags() & ios_base::uppercase){ -- stream.write(buffer, swprintf(buffer, 27, L"%llX", n) ); -+ stream.printout(buffer, swprintf(buffer, 27, L"%llX", n) ); - }else{ -- stream.write(buffer, swprintf(buffer, 27, L"%llx", n) ); -+ stream.printout(buffer, swprintf(buffer, 27, L"%llx", n) ); - } - } - } -@@ -447,7 +447,7 @@ - } else { - swprintf(format_string, 32, L"%%%u.%ug", static_cast(stream.width()), static_cast(stream.precision())); - } -- stream.write(buffer, swprintf(buffer, 32, format_string, f) ); -+ stream.printout(buffer, swprintf(buffer, 32, format_string, f) ); - if(stream.flags() & ios_base::unitbuf){ - stream.flush(); - } -@@ -471,7 +471,7 @@ - } else { - swprintf(format_string, 32, L"%%%u.%uLg", static_cast(stream.width()), static_cast(stream.precision())); - } -- stream.write(buffer, swprintf(buffer, 32, format_string, f) ); -+ stream.printout(buffer, swprintf(buffer, 32, format_string, f) ); - if(stream.flags() & ios_base::unitbuf){ - stream.flush(); - } diff --git a/libs/uclibc++/patches/009-compile_fixes.patch b/libs/uclibc++/patches/009-compile_fixes.patch deleted file mode 100644 index efcb9e6d7..000000000 --- a/libs/uclibc++/patches/009-compile_fixes.patch +++ /dev/null @@ -1,70 +0,0 @@ ---- a/include/associative_base -+++ b/include/associative_base -@@ -318,7 +318,7 @@ protected: - typedef std::list listtype; - - typename listtype::iterator base_iter; -- typedef _associative_citer _associative_citer; -+ typedef _associative_citer __associative_citer; - - - public: -@@ -347,13 +347,13 @@ public: - bool operator==(const _associative_iter & m) const{ - return m.base_iter == base_iter; - } -- bool operator==(const _associative_citer & m) const{ -+ bool operator==(const __associative_citer & m) const{ - return m.base_iter == base_iter; - } - bool operator!=(const _associative_iter & m) const{ - return m.base_iter != base_iter; - } -- bool operator!=(const _associative_citer & m) const{ -+ bool operator!=(const __associative_citer & m) const{ - return m.base_iter != base_iter; - } - _associative_iter & operator++(){ -@@ -378,8 +378,8 @@ public: - --base_iter; - return temp; - } -- operator _associative_citer() const{ -- return _associative_citer(base_iter); -+ operator __associative_citer() const{ -+ return __associative_citer(base_iter); - } - typename listtype::iterator base_iterator(){ - return base_iter; ---- a/include/string -+++ b/include/string -@@ -1017,11 +1017,11 @@ template _UCXXEXPORT bool operator==(const string & lhs, const string & rhs); - template <> _UCXXEXPORT bool operator==(const char * lhs, const string & rhs); --template <> _UCXXEXPORT bool operator==(const string & rhs, const char * rhs); -+template <> _UCXXEXPORT bool operator==(const string & lhs, const char * rhs); - - template <> _UCXXEXPORT bool operator!=(const string & lhs, const string & rhs); - template <> _UCXXEXPORT bool operator!=(const char * lhs, const string & rhs); --template <> _UCXXEXPORT bool operator!=(const string & rhs, const char * rhs); -+template <> _UCXXEXPORT bool operator!=(const string & lhs, const char * rhs); - - template <> _UCXXEXPORT string operator+(const string & lhs, const char* rhs); - template <> _UCXXEXPORT string operator+(const char* lhs, const string & rhs); ---- a/src/string.cpp -+++ b/src/string.cpp -@@ -76,11 +76,11 @@ namespace std{ - - template _UCXXEXPORT bool operator==(const string & lhs, const string & rhs); - template _UCXXEXPORT bool operator==(const char * lhs, const string & rhs); -- template _UCXXEXPORT bool operator==(const string & rhs, const char * rhs); -+ template _UCXXEXPORT bool operator==(const string & lhs, const char * rhs); - - template _UCXXEXPORT bool operator!=(const string & lhs, const string & rhs); - template _UCXXEXPORT bool operator!=(const char * lhs, const string & rhs); -- template _UCXXEXPORT bool operator!=(const string & rhs, const char * rhs); -+ template _UCXXEXPORT bool operator!=(const string & lhs, const char * rhs); - - template _UCXXEXPORT string operator+(const string & lhs, const char* rhs); - template _UCXXEXPORT string operator+(const char* lhs, const string & rhs); diff --git a/libs/uclibc++/patches/010-cstring_conflicts.patch b/libs/uclibc++/patches/010-cstring_conflicts.patch deleted file mode 100644 index 4b17c7eb6..000000000 --- a/libs/uclibc++/patches/010-cstring_conflicts.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/include/cstring -+++ b/include/cstring -@@ -47,31 +47,6 @@ namespace std{ - using ::strstr; - using ::strtok; - using ::strxfrm; -- -- -- //Extra definitions required in c++ spec -- -- -- inline void* memchr(void* s, int c, size_t n){ -- return memchr(const_cast(s), c, n); -- } -- -- inline char* strchr(char* s, int c){ -- return strchr(const_cast(s), c); -- } -- -- inline char* strpbrk(char* s1, const char* s2){ -- return strpbrk(const_cast(s1), s2); -- } -- -- inline char* strrchr(char* s, int c){ -- return strrchr(const_cast(s), c); -- } -- -- inline char* strstr(char* s1, const char* s2){ -- return strstr(const_cast(s1), s2); -- } -- - } - - #endif diff --git a/libs/uclibc++/patches/900-dependent_exception.patch b/libs/uclibc++/patches/900-dependent_exception.patch deleted file mode 100644 index 3a5cb7dbc..000000000 --- a/libs/uclibc++/patches/900-dependent_exception.patch +++ /dev/null @@ -1,68 +0,0 @@ ---- a/src/eh_alloc.cpp 2007-06-03 23:51:13.000000000 +0100 -+++ b/src/eh_alloc.cpp 2009-07-13 09:42:39.000000000 +0100 -@@ -42,4 +42,21 @@ - free( (char *)(vptr) - sizeof(__cxa_exception) ); - } - -+#if __GNUC__ * 100 + __GNUC_MINOR__ >= 404 -+extern "C" __cxa_dependent_exception* __cxa_allocate_dependent_exception() throw(){ -+ __cxa_dependent_exception *retval; -+ -+ retval = static_cast<__cxa_dependent_exception*>(malloc(sizeof(__cxa_dependent_exception))); -+ if(0 == retval){ -+ std::terminate(); -+ } -+ memset (retval, 0, sizeof(__cxa_dependent_exception)); -+ return retval ; -+} -+ -+extern "C" void __cxa_free_dependent_exception(__cxa_dependent_exception *vptr) throw(){ -+ free( vptr ); -+} -+#endif -+ - } ---- a/include/unwind-cxx.h 2009-07-13 10:01:11.000000000 +0100 -+++ b/include/unwind-cxx.h 2009-07-13 10:14:08.000000000 +0100 -@@ -79,6 +79,41 @@ - _Unwind_Exception unwindHeader; - }; - -+#if __GNUC__ * 100 + __GNUC_MINOR__ >= 404 -+// A dependent C++ exception object consists of a wrapper around an unwind -+// object header with additional C++ specific information, containing a pointer -+// to a primary exception object. -+ -+struct __cxa_dependent_exception -+{ -+ // The primary exception this thing depends on. -+ void *primaryException; -+ -+ // The C++ standard has entertaining rules wrt calling set_terminate -+ // and set_unexpected in the middle of the exception cleanup process. -+ std::unexpected_handler unexpectedHandler; -+ std::terminate_handler terminateHandler; -+ -+ // The caught exception stack threads through here. -+ __cxa_exception *nextException; -+ -+ // How many nested handlers have caught this exception. A negated -+ // value is a signal that this object has been rethrown. -+ int handlerCount; -+ -+ // Cache parsed handler data from the personality routine Phase 1 -+ // for Phase 2 and __cxa_call_unexpected. -+ int handlerSwitchValue; -+ const unsigned char *actionRecord; -+ const unsigned char *languageSpecificData; -+ _Unwind_Ptr catchTemp; -+ void *adjustedPtr; -+ -+ // The generic exception header. Must be last. -+ _Unwind_Exception unwindHeader; -+}; -+ -+#endif - // Each thread in a C++ program has access to a __cxa_eh_globals object. - struct __cxa_eh_globals - {