diff options
author | Joseph Myers <joseph@codesourcery.com> | 2006-11-13 13:28:28 +0000 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2006-11-13 13:28:28 +0000 |
commit | 46fb6400ee639a301bafb64bca2698b462d9e931 (patch) | |
tree | c1d0aad19273ccb301bcf5a733c832191d1d3a8c | |
parent | b54c93b7b8602e91e284196327ad2646a01d2838 (diff) | |
download | gcc-46fb6400ee639a301bafb64bca2698b462d9e931.zip gcc-46fb6400ee639a301bafb64bca2698b462d9e931.tar.gz gcc-46fb6400ee639a301bafb64bca2698b462d9e931.tar.bz2 |
eh_globals.cc (__cxxabiv1::__cxa_get_globals): Initialize propagatingExceptions if __ARM_EABI_UNWINDER__.
* libsupc++/eh_globals.cc (__cxxabiv1::__cxa_get_globals):
Initialize propagatingExceptions if __ARM_EABI_UNWINDER__.
* libsupc++/eh_personality.cc (empty_exception_spec): Define
separately in __ARM_EABI_UNWINDER__ case.
From-SVN: r118757
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/eh_globals.cc | 3 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/eh_personality.cc | 15 |
3 files changed, 23 insertions, 2 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index bb9d08c..bb7ec9c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,12 @@ 2006-11-13 Joseph Myers <joseph@codesourcery.com> + * libsupc++/eh_globals.cc (__cxxabiv1::__cxa_get_globals): + Initialize propagatingExceptions if __ARM_EABI_UNWINDER__. + * libsupc++/eh_personality.cc (empty_exception_spec): Define + separately in __ARM_EABI_UNWINDER__ case. + +2006-11-13 Joseph Myers <joseph@codesourcery.com> + * libsupc++/typeinfo (__GXX_TYPEINFO_EQUALITY_INLINE): Define. Use instead of __GXX_MERGED_TYPEINFO_NAMES to condition inline definitions. diff --git a/libstdc++-v3/libsupc++/eh_globals.cc b/libstdc++-v3/libsupc++/eh_globals.cc index 424e375..317c67b 100644 --- a/libstdc++-v3/libsupc++/eh_globals.cc +++ b/libstdc++-v3/libsupc++/eh_globals.cc @@ -140,6 +140,9 @@ __cxxabiv1::__cxa_get_globals() throw() g = static_cast<__cxa_eh_globals*>(v); g->caughtExceptions = 0; g->uncaughtExceptions = 0; +#ifdef __ARM_EABI_UNWINDER__ + g->propagatingExceptions = 0; +#endif } } else diff --git a/libstdc++-v3/libsupc++/eh_personality.cc b/libstdc++-v3/libsupc++/eh_personality.cc index 5fd25f2..9b0654b 100644 --- a/libstdc++-v3/libsupc++/eh_personality.cc +++ b/libstdc++-v3/libsupc++/eh_personality.cc @@ -192,6 +192,17 @@ restore_caught_exception(struct _Unwind_Exception* ue_header, } \ while (0) +// Return true if the filter spec is empty, ie throw(). + +static bool +empty_exception_spec (lsda_header_info *info, _Unwind_Sword filter_value) +{ + const _Unwind_Word* e = ((const _Unwind_Word*) info->TType) + - filter_value - 1; + + return *e == 0; +} + #else typedef const std::type_info _throw_typet; @@ -312,8 +323,6 @@ restore_caught_exception(struct _Unwind_Exception* ue_header, #define CONTINUE_UNWINDING return _URC_CONTINUE_UNWIND -#endif // !__ARM_EABI_UNWINDER__ - // Return true if the filter spec is empty, ie throw(). static bool @@ -326,6 +335,8 @@ empty_exception_spec (lsda_header_info *info, _Unwind_Sword filter_value) return tmp == 0; } +#endif // !__ARM_EABI_UNWINDER__ + namespace __cxxabiv1 { |