aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2006-11-13 13:28:28 +0000
committerJoseph Myers <jsm28@gcc.gnu.org>2006-11-13 13:28:28 +0000
commit46fb6400ee639a301bafb64bca2698b462d9e931 (patch)
treec1d0aad19273ccb301bcf5a733c832191d1d3a8c
parentb54c93b7b8602e91e284196327ad2646a01d2838 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--libstdc++-v3/libsupc++/eh_globals.cc3
-rw-r--r--libstdc++-v3/libsupc++/eh_personality.cc15
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
{