OSDN Git Service

* libsupc++/unwind-cxx.h: Include sys/sdt.h if detected.
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 15 Mar 2013 08:55:07 +0000 (08:55 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 15 Mar 2013 08:55:07 +0000 (08:55 +0000)
(PROBE2): New macro.
* libsupc++/eh_throw.cc (__cxa_throw, __cxa_rethrow): Add probe.
* libsupc++/eh_catch.cc (__cxa_begin_catch): Add probe.
* configure.ac: Check for sys/sdt.h.
* configure, config.h.in: Rebuild.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196674 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/config.h.in
libstdc++-v3/configure
libstdc++-v3/configure.ac
libstdc++-v3/libsupc++/eh_catch.cc
libstdc++-v3/libsupc++/eh_throw.cc
libstdc++-v3/libsupc++/unwind-cxx.h

index 65ed5fc..c5a5dde 100644 (file)
@@ -1,3 +1,12 @@
+2013-03-15  Tom Tromey  <tromey@redhat.com>
+
+       * libsupc++/unwind-cxx.h: Include sys/sdt.h if detected.
+       (PROBE2): New macro.
+       * libsupc++/eh_throw.cc (__cxa_throw, __cxa_rethrow): Add probe.
+       * libsupc++/eh_catch.cc (__cxa_begin_catch): Add probe.
+       * configure.ac: Check for sys/sdt.h.
+       * configure, config.h.in: Rebuild.
+
 2013-03-14  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
        PR libstdc++/56613
index 07a1e50..9937a1e 100644 (file)
 /* Define to 1 if you have the <sys/resource.h> header file. */
 #undef HAVE_SYS_RESOURCE_H
 
+/* Define to 1 if you have the <sys/sdt.h> header file. */
+#undef HAVE_SYS_SDT_H
+
 /* Define to 1 if you have the <sys/sem.h> header file. */
 #undef HAVE_SYS_SEM_H
 
index fa44bac..f40ddcf 100755 (executable)
@@ -20417,7 +20417,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 for ac_header in 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
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
index a64fee2..de66406 100644 (file)
@@ -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.
index 779f5a3..43e875a 100644 (file)
@@ -80,6 +80,9 @@ __cxxabiv1::__cxa_begin_catch (void *exc_obj_in) _GLIBCXX_NOTHROW
     }
 
   objectp = __gxx_caught_object(exceptionObject);
+
+  PROBE2 (catch, objectp, header->exceptionType);
+
 #ifdef __ARM_EABI_UNWINDER__
   _Unwind_Complete(exceptionObject);
 #endif
index 297aa04..a79a025 100644 (file)
@@ -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;
       else
-       header->handlerCount = -header->handlerCount;
+       {
+         header->handlerCount = -header->handlerCount;
+         // Only notify probe for C++ exceptions.
+         PROBE2 (rethrow, __get_object_from_ambiguous_exception(header),
+                 header->exceptionType);
+       }
 
 #ifdef _GLIBCXX_SJLJ_EXCEPTIONS
       _Unwind_SjLj_Resume_or_Rethrow (&header->unwindHeader);
index e2b945d..ed4eea5 100644 (file)
 #include <bits/atomic_word.h>
 #include <cxxabi.h>
 
+#ifdef _GLIBCXX_HAVE_SYS_SDT_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)
+#endif
+#endif
+
+#ifndef PROBE2
+#define PROBE2(name, arg1, arg2)
+#endif
+
 #pragma GCC visibility push(default)
 
 namespace __cxxabiv1