diff options
author | Patrik Nyblom <[email protected]> | 2012-03-22 18:29:34 +0100 |
---|---|---|
committer | Patrik Nyblom <[email protected]> | 2012-03-22 18:30:07 +0100 |
commit | 5957a8338fe1f4e79a39277174094bbd9e978896 (patch) | |
tree | 4abcf47850e2a577b401a61bb1693d85cb137ffe /erts/configure.in | |
parent | b5f6596f49db47e6dacddb2b10292a7294e13993 (diff) | |
parent | 1e653c3539423e4cfdeab1d232483bcac0e8b073 (diff) | |
download | otp-5957a8338fe1f4e79a39277174094bbd9e978896.tar.gz otp-5957a8338fe1f4e79a39277174094bbd9e978896.tar.bz2 otp-5957a8338fe1f4e79a39277174094bbd9e978896.zip |
Merge branch 'pan/dtrace' into maint
* pan/dtrace: (22 commits)
Use distinct function-entry probes for local and global calls
Correct calculation of stack depth in call/return probes
Add probes for all kind of calls
Don't try to "clean up" generated fun names
erl_process.c: Fix probe for process exit
Remove code causing dialyzer warning from prim_file
Add documentation for dyntrace and system_info changes
Update slogan and add system_info for dynamic trace
Update README's for dtrace and systemtap
Rename dyntrace BIFs to more suiting names
If VM probes are not enabled, short-circuit calls to probe BIFs
beam_makeops: Add a simple preprocessor
Ifdef all dynamic trace code
Move dtrace erlang code and NIF into runtime_tools
Correct some errors in the user tag spreading
Change to more specific configure options for dtrace
Add user tag spreading functionality to VM and use in file
Update dtrace for changes in R15
Add DTrace support for OS X, Solaris, and Linux (via SystemTap), 4/4
Add DTrace support for OS X, Solaris, and Linux (via SystemTap), 3/4
...
OTP-10017
Diffstat (limited to 'erts/configure.in')
-rw-r--r-- | erts/configure.in | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/erts/configure.in b/erts/configure.in index b801994e14..cb1b00b8b1 100644 --- a/erts/configure.in +++ b/erts/configure.in @@ -276,6 +276,61 @@ else [Define to enable hrvtime() on Linux systems with perfctr extension]) fi + +AC_ARG_WITH(dynamic-trace, +AS_HELP_STRING([--with-dynamic-trace={dtrace|systemtap}], + [specify use of dynamic trace framework, dtrace or systemtap]) +AS_HELP_STRING([--without-dynamic-trace], + [don't enable any dynamic tracing (default)])) + +if test X"$with_dynamic_trace" = X""; then + with_dynamic_trace=no +fi + +case "$with_dynamic_trace" in + no) DYNAMIC_TRACE_FRAMEWORK=;; + dtrace) + AC_DEFINE(USE_DTRACE,[1], + [Define if you want to use dtrace for dynamic tracing]) + DYNAMIC_TRACE_FRAMEWORK=dtrace;; + systemtap) + AC_DEFINE(USE_SYSTEMTAP,[1], + [Define if you want to use systemtap for dynamic tracing]) + DYNAMIC_TRACE_FRAMEWORK=systemtap;; + *) + AC_MSG_ERROR(Unknown dynamic tracing framework specified with --with-dynamic-trace!);; +esac + +if test X"$DYNAMIC_TRACE_FRAMEWORK" != X""; then + AC_DEFINE(USE_DYNAMIC_TRACE,[1], + [Define if you want to use dynamic tracing]) +fi + +AC_ARG_ENABLE(vm-probes, +AS_HELP_STRING([--enable-vm-probes], + [add dynamic trace probes to the Beam VM (only possible if --with-dynamic-trace is enabled, and then default)]), + [ case "$enableval" in + no) use_vm_probes=no ;; + *) + if test X"$DYNAMIC_TRACE_FRAMEWORK" != X""; then + use_vm_probes=yes ; + else + AC_MSG_ERROR(Can not enable VM probes without any dynamic tracing framework!); + fi;; + esac ], if test X"$DYNAMIC_TRACE_FRAMEWORK" != X""; then + use_vm_probes=yes ; + else + use_vm_probes=no + fi) + +AC_SUBST(USE_VM_PROBES) +if test X"$use_vm_probes" = X"yes"; then + USE_VM_PROBES=yes + AC_DEFINE(USE_VM_PROBES,[1], + [Define to enable VM dynamic trace probes]) +fi + + AC_ARG_ENABLE(clock-gettime, AS_HELP_STRING([--enable-clock-gettime], [use clock-gettime for time correction]), @@ -3546,6 +3601,74 @@ dnl LM_FIND_EMU_CC dnl +dnl DTrace +dnl +case $DYNAMIC_TRACE_FRAMEWORK in + dtrace|systemtap) + AC_CHECK_TOOL(DTRACE, dtrace, none) + test "$DTRACE" = "none" && AC_MSG_ERROR([No dtrace utility found.]); + enable_dtrace_test=yes;; + *) enable_dtrace_test=no;; +esac + +AC_SUBST(DTRACE) + +AC_SUBST(DTRACE_CPP) +AC_SUBST(DTRACE_ENABLED) +AC_SUBST(DTRACE_ENABLED_2STEP) +DTRACE_CPP=-C +DTRACE_ENABLED= +DTRACE_ENABLED_2STEP= +DTRACE_2STEP_TEST=./dtrace-test.o +DTRACE_BITS_FLAG= +case $OPSYS in + freebsd) + if test "$BITS64" = "yes" ; then + DTRACE_BITS_FLAG=-64 + else + DTRACE_BITS_FLAG=-32 + fi + ;; + *) + : # Nothing to do + ;; +esac +if test "$enable_dtrace_test" = "yes" ; then + if test "$DTRACE" = "dtrace" ; then + AC_CHECK_HEADERS(sys/sdt.h) + # The OS X version of dtrace prints a spurious line here. + if ! dtrace -h $DTRACE_CPP -Iemulator/beam -o ./foo-dtrace.h -s emulator/beam/erlang_dtrace.d; then + AC_MSG_ERROR([Could not precompile erlang_dtrace.d: dtrace -h failed]) + fi + rm -f foo-dtrace.h + + $RM -f $DTRACE_2STEP_TEST + if dtrace -G $DTRACE_CPP $DTRACE_BITS_FLAG -Iemulator/beam -o $DTRACE_2STEP_TEST -s emulator/beam/erlang_dtrace.d 2> /dev/null && \ + test -f $DTRACE_2STEP_TEST ; then + rm $DTRACE_2STEP_TEST + DTRACE_ENABLED_2STEP=yes + AC_MSG_NOTICE([dtrace precompilation for 2-stage DTrace successful]) + else + AC_MSG_NOTICE([dtrace precompilation for 1-stage DTrace successful]) + fi + DTRACE_ENABLED=yes + case $OPSYS in + linux) + : # No extra libs to add to LIBS + ;; + freebsd) + LIBS="$LIBS -lelf" + ;; + *) + LIBS="$LIBS -ldtrace" + ;; + esac + else + AC_MSG_ERROR([Dtrace preprocessing test failed.]) + fi +fi + +dnl dnl SSL, SSH and CRYPTO need the OpenSSL libraries dnl dnl Check flags --with-ssl, --without-ssl --with-ssl=PATH. |