This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFC: add some static probes to libstdc++

Dave>   How did it build in the without sys/sdt.h case?

Sorry about that again.
I must have made some change after testing it.

Here is an updated version.

One thing I found out while fixing this up is that changes to
unwind-cxx.h do not cause anything to rebuild if I just run "make".  I
have to "make clean" each time.

On the plus side, while digging around after being confused by this, I
found that I didn't actually need "../config.h" -- the code now checks


2013-02-27  Tom Tromey  <>

	* libsupc++/unwind-cxx.h: Include sys/sdt.h if detected.
	(PROBE2): New macro.
	* libsupc++/ (__cxa_throw, __cxa_rethrow): Add probe.
	* libsupc++/ (__cxa_begin_catch): Add probe.
	* Check for sys/sdt.h.
	* configure, Rebuild.

diff --git a/libstdc++-v3/ b/libstdc++-v3/
index a64fee2..de66406 100644
--- a/libstdc++-v3/
+++ b/libstdc++-v3/
@@ -216,7 +216,7 @@ GLIBCXX_CHECK_SYSCTL_HW_NCPU
 AC_CHECK_HEADERS([endian.h execinfo.h float.h fp.h ieeefp.h inttypes.h \
 locale.h machine/endian.h machine/param.h nan.h stdint.h stdlib.h string.h \
 strings.h sys/ipc.h sys/isa_defs.h sys/machine.h sys/param.h \
-sys/resource.h sys/sem.h sys/stat.h sys/time.h sys/types.h unistd.h \
+sys/resource.h sys/sdt.h sys/sem.h sys/stat.h sys/time.h sys/types.h unistd.h \
 wchar.h wctype.h])
 # Only do link tests if native. Else, hardcode.
diff --git a/libstdc++-v3/libsupc++/ b/libstdc++-v3/libsupc++/
index 779f5a3..43e875a 100644
--- a/libstdc++-v3/libsupc++/
+++ b/libstdc++-v3/libsupc++/
@@ -80,6 +80,9 @@ __cxxabiv1::__cxa_begin_catch (void *exc_obj_in) _GLIBCXX_NOTHROW
   objectp = __gxx_caught_object(exceptionObject);
+  PROBE2 (catch, objectp, header->exceptionType);
diff --git a/libstdc++-v3/libsupc++/ b/libstdc++-v3/libsupc++/
index 297aa04..a79a025 100644
--- a/libstdc++-v3/libsupc++/
+++ b/libstdc++-v3/libsupc++/
@@ -60,6 +60,8 @@ extern "C" void
 __cxxabiv1::__cxa_throw (void *obj, std::type_info *tinfo,
 			 void (_GLIBCXX_CDTOR_CALLABI *dest) (void *))
+  PROBE2 (throw, obj, tinfo);
   // Definitely a primary.
   __cxa_refcounted_exception *header
     = __get_refcounted_exception_header_from_obj (obj);
@@ -97,7 +99,12 @@ __cxxabiv1::__cxa_rethrow ()
       if (!__is_gxx_exception_class(header->unwindHeader.exception_class))
 	globals->caughtExceptions = 0;
-	header->handlerCount = -header->handlerCount;
+	{
+	  header->handlerCount = -header->handlerCount;
+	  // Only notify probe for C++ exceptions.
+	  PROBE2 (rethrow, __get_object_from_ambiguous_exception(header),
+		  header->exceptionType);
+	}
       _Unwind_SjLj_Resume_or_Rethrow (&header->unwindHeader);
diff --git a/libstdc++-v3/libsupc++/unwind-cxx.h b/libstdc++-v3/libsupc++/unwind-cxx.h
index e2b945d..ed4eea5 100644
--- a/libstdc++-v3/libsupc++/unwind-cxx.h
+++ b/libstdc++-v3/libsupc++/unwind-cxx.h
@@ -37,6 +37,19 @@
 #include <bits/atomic_word.h>
 #include <cxxabi.h>
+#include <sys/sdt.h>
+/* We only want to use stap probes starting with v3.  Earlier versions
+   added too much startup cost.  */
+#if defined (STAP_PROBE2) && _SDT_NOTE_TYPE >= 3
+#define PROBE2(name, arg1, arg2) STAP_PROBE2 (libstdcxx, name, arg1, arg2)
+#ifndef PROBE2
+#define PROBE2(name, arg1, arg2)
 #pragma GCC visibility push(default)
 namespace __cxxabiv1

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]