2011-01-14 Tom Tromey * unwind-dw2.c: Include sys/sdt.h if it exists. (_Unwind_DebugHook): Use STAP_PROBE2. * config.in, configure: Rebuild. * configure.ac: Check for sys/sdt.h. --- gcc/configure.ac +++ gcc/configure.ac @@ -4313,6 +4313,16 @@ if test x$gcc_cv_libc_provides_ssp = xyes; then [Define if your target C library provides stack protector support]) fi +# Test for on the target. +GCC_TARGET_TEMPLATE([HAVE_SYS_SDT_H]) +AC_MSG_CHECKING(sys/sdt.h in the target C library) +have_sys_sdt_h=no +if test -f $target_header_dir/sys/sdt.h; then + AC_DEFINE(HAVE_SYS_SDT_H, 1, + [Define if your target C library provides sys/sdt.h]) +fi +AC_MSG_RESULT($have_sys_sdt_h) + # Check if TFmode long double should be used by default or not. # Some glibc targets used DFmode long double, but with glibc 2.4 # and later they can use TFmode. --- gcc/unwind-dw2.c +++ gcc/unwind-dw2.c @@ -37,6 +37,10 @@ #include "gthr.h" #include "unwind-dw2.h" +#ifdef HAVE_SYS_SDT_H +#include +#endif + #ifndef __USING_SJLJ_EXCEPTIONS__ #ifndef STACK_GROWS_DOWNWARD @@ -1493,7 +1497,13 @@ static void _Unwind_DebugHook (void *cfa __attribute__ ((__unused__)), void *handler __attribute__ ((__unused__))) { + /* We only want to use stap probes starting with v3. Earlier + versions added too much startup cost. */ +#if defined (HAVE_SYS_SDT_H) && defined (STAP_PROBE2) && _SDT_NOTE_TYPE >= 3 + STAP_PROBE2 (libgcc, unwind, cfa, handler); +#else asm (""); +#endif } /* Install TARGET into CURRENT so that we can return to it. This is a --- gcc/config.in.jj 2011-01-22 10:21:47.000000000 +0100 +++ gcc/config.in 2011-01-22 11:10:39.000000000 +0100 @@ -1405,6 +1407,9 @@ #endif +/* Define if your target C library provides sys/sdt.h */ +#undef HAVE_SYS_SDT_H + /* Define to 1 if you have the header file. */ #ifndef USED_FOR_TARGET #undef HAVE_SYS_STAT_H --- gcc/configure.jj 2011-01-22 10:20:55.000000000 +0100 +++ gcc/configure 2011-01-22 11:10:34.990648298 +0100 @@ -25757,6 +25757,19 @@ $as_echo "#define TARGET_LIBC_PROVIDES_S fi +# Test for on the target. + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking sys/sdt.h in the target C library" >&5 +$as_echo_n "checking sys/sdt.h in the target C library... " >&6; } +have_sys_sdt_h=no +if test -f $target_header_dir/sys/sdt.h; then + +$as_echo "#define HAVE_SYS_SDT_H 1" >>confdefs.h + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_sys_sdt_h" >&5 +$as_echo "$have_sys_sdt_h" >&6; } + # Check if TFmode long double should be used by default or not. # Some glibc targets used DFmode long double, but with glibc 2.4 # and later they can use TFmode.