Doing diffs in libstdc++-v3:
--- libstdc++-v3/config/os/bsd/darwin/dtrace_cxa_runtime.d.~1~ 2009-01-09 12:12:36.000000000 -0800
+++ libstdc++-v3/config/os/bsd/darwin/dtrace_cxa_runtime.d 2009-01-09 13:24:25.000000000 -0800
@@ -0,0 +1,7 @@
+/* build with: dtrace -C -h -s dtrace_cxa_runtime.d -o dtrace_cxa_runtime.h */
+
+provider cxa_runtime
+{
+ probe cxa_exception_throw(void *obj);
+ probe cxa_exception_rethrow();
+};
--- libstdc++-v3/config/os/bsd/darwin/os_defines.h.~1~ 2008-12-13 12:42:50.000000000 -0800
+++ libstdc++-v3/config/os/bsd/darwin/os_defines.h 2009-01-09 13:17:57.000000000 -0800
@@ -48,6 +48,56 @@
#define _GLIBCXX_VISIBILITY_DEFAULT /* _GLIBCXX_VISIBILITY(default) */
#endif
+/* APPLE LOCAL begin dtrace 6144676 */
+/* Enable dtrace probes. */
+/* Inline copy of dtrace_cxa_runtime.h. */
+/*
+ * Generated by dtrace(1M).
+ */
+
+#ifndef _DTRACE_CXA_RUNTIME_H
+#define _DTRACE_CXA_RUNTIME_H
+
+#include <unistd.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CXA_RUNTIME_STABILITY "___dtrace_stability$cxa_runtime$v1$1_1_0_1_1_0_1_1_0_1_1_0_1_1_0"
+
+#define CXA_RUNTIME_TYPEDEFS "___dtrace_typedefs$cxa_runtime$v2"
+
+#define CXA_RUNTIME_CXA_EXCEPTION_RETHROW() \
+do { \
+ __asm__ volatile(".reference " CXA_RUNTIME_TYPEDEFS); \
+ __dtrace_probe$cxa_runtime$cxa_exception_rethrow$v1(); \
+ __asm__ volatile(".reference " CXA_RUNTIME_STABILITY); \
+} while (0)
+#define CXA_RUNTIME_CXA_EXCEPTION_RETHROW_ENABLED() \
+ __dtrace_isenabled$cxa_runtime$cxa_exception_rethrow$v1()
+#define CXA_RUNTIME_CXA_EXCEPTION_THROW(arg0) \
+do { \
+ __asm__ volatile(".reference " CXA_RUNTIME_TYPEDEFS); \
+ __dtrace_probe$cxa_runtime$cxa_exception_throw$v1$766f6964202a(arg0); \
+ __asm__ volatile(".reference " CXA_RUNTIME_STABILITY); \
+} while (0)
+#define CXA_RUNTIME_CXA_EXCEPTION_THROW_ENABLED() \
+ __dtrace_isenabled$cxa_runtime$cxa_exception_throw$v1()
+
+
+extern void __dtrace_probe$cxa_runtime$cxa_exception_rethrow$v1(void);
+extern int __dtrace_isenabled$cxa_runtime$cxa_exception_rethrow$v1(void);
+extern void __dtrace_probe$cxa_runtime$cxa_exception_throw$v1$766f6964202a(void *);
+extern int __dtrace_isenabled$cxa_runtime$cxa_exception_throw$v1(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DTRACE_CXA_RUNTIME_H */
+/* APPLE LOCAL end dtrace 6144676 */
+
/* APPLE LOCAL begin version */
#ifndef __GNUC_LIBSTD__
--- libstdc++-v3/libsupc++/eh_throw.cc.~1~ 2005-11-21 16:19:07.000000000 -0800
+++ libstdc++-v3/libsupc++/eh_throw.cc 2009-01-09 13:18:48.000000000 -0800
@@ -65,6 +65,10 @@ __cxxabiv1::__cxa_throw (void *obj, std:
__GXX_INIT_EXCEPTION_CLASS(header->unwindHeader.exception_class);
header->unwindHeader.exception_cleanup = __gxx_exception_cleanup;
+#ifdef CXA_RUNTIME_CXA_EXCEPTION_THROW
+ CXA_RUNTIME_CXA_EXCEPTION_THROW(obj);
+#endif
+
#ifdef _GLIBCXX_SJLJ_EXCEPTIONS
_Unwind_SjLj_RaiseException (&header->unwindHeader);
#else
@@ -93,6 +97,10 @@ __cxxabiv1::__cxa_rethrow ()
else
header->handlerCount = -header->handlerCount;
+#ifdef CXA_RUNTIME_CXA_EXCEPTION_RETHROW
+ CXA_RUNTIME_CXA_EXCEPTION_RETHROW();
+#endif
+
#ifdef _GLIBCXX_SJLJ_EXCEPTIONS
_Unwind_SjLj_Resume_or_Rethrow (&header->unwindHeader);
#else
--------------