diff options
-rwxr-xr-x | dtrace.in | 2 | ||||
-rw-r--r-- | includes/sys/sdt.h | 2 | ||||
-rw-r--r-- | testsuite/Makefile.am | 4 | ||||
-rw-r--r-- | testsuite/Makefile.in | 4 | ||||
-rwxr-xr-x | testsuite/configure | 20 | ||||
-rw-r--r-- | testsuite/configure.ac | 12 | ||||
-rw-r--r-- | testsuite/systemtap.apps/mysql.exp (renamed from testsuite/systemtap.base/mysql.exp) | 0 | ||||
-rw-r--r-- | testsuite/systemtap.apps/postgres.exp (renamed from testsuite/systemtap.base/postgres.exp) | 0 | ||||
-rw-r--r-- | testsuite/systemtap.apps/stap-tcl.sh | 25 | ||||
-rw-r--r-- | testsuite/systemtap.apps/stap-tcl.stp | 30 | ||||
-rw-r--r-- | testsuite/systemtap.apps/tcl.exp | 67 | ||||
-rw-r--r-- | testsuite/systemtap.apps/xulrunner.exp (renamed from testsuite/systemtap.base/xulrunner.exp) | 0 | ||||
-rw-r--r-- | testsuite/systemtap.base/tcl.exp | 165 |
13 files changed, 161 insertions, 170 deletions
@@ -46,7 +46,7 @@ class provider: self.f = open(provider) self.h = open(header,mode='w') self.h.write("/* Generated by the Systemtap dtrace wrapper */\n") - self.h.write("\n#define STAP_HAS_SEMAPHORES 1\n\n") + # self.h.write("\n#define STAP_HAS_SEMAPHORES 1\n\n") self.h.write("\n#include <sys/sdt.h>\n\n") in_comment = False typedefs = "" diff --git a/includes/sys/sdt.h b/includes/sys/sdt.h index d31d7326..3847c497 100644 --- a/includes/sys/sdt.h +++ b/includes/sys/sdt.h @@ -42,7 +42,7 @@ #if defined STAP_HAS_SEMAPHORES && defined EXPERIMENTAL_UTRACE_SDT #define STAP_SEMAPHORE(probe) \ - if ( probe ## _semaphore ) + if (__builtin_expect ( probe ## _semaphore , 0)) #else #define STAP_SEMAPHORE(probe) #endif diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am index 9607ebe3..248a0fb3 100644 --- a/testsuite/Makefile.am +++ b/testsuite/Makefile.am @@ -12,7 +12,7 @@ clean-local: -rm -rf .systemtap* .cache_test* 2>/dev/null DEJAZILLA=@dejazilla@ - +TESTAPPS=@enable_testapps@ TOOL_OPTS= # automake's dejagnu library already runs check-DEJAGNU before check-local @@ -37,4 +37,4 @@ SYSTEMTAP_INCLUDES=$(DESTDIR)$(includedir) RUNTESTDEFAULTFLAGS = --tool $$tool --tool_opts \'$(TOOL_OPTS)\' --srcdir $$srcdir EXPECT = expect -RUNTEST="env SYSTEMTAP_RUNTIME=$(SYSTEMTAP_RUNTIME) SYSTEMTAP_TAPSET=$(SYSTEMTAP_TAPSET) LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) CRASH_LIBDIR=$(CRASH_LIBDIR) PATH=$(SYSTEMTAP_PATH):$$PATH SYSTEMTAP_PATH=$(SYSTEMTAP_PATH) SYSTEMTAP_INCLUDES=$(SYSTEMTAP_INCLUDES) $(srcdir)/execrc runtest" +RUNTEST="env SYSTEMTAP_TESTAPPS=$(TESTAPPS) SYSTEMTAP_RUNTIME=$(SYSTEMTAP_RUNTIME) SYSTEMTAP_TAPSET=$(SYSTEMTAP_TAPSET) LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) CRASH_LIBDIR=$(CRASH_LIBDIR) PATH=$(SYSTEMTAP_PATH):$$PATH SYSTEMTAP_PATH=$(SYSTEMTAP_PATH) SYSTEMTAP_INCLUDES=$(SYSTEMTAP_INCLUDES) $(srcdir)/execrc runtest" diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in index 7358bd2c..3853cdd4 100644 --- a/testsuite/Makefile.in +++ b/testsuite/Makefile.in @@ -95,6 +95,7 @@ datarootdir = @datarootdir@ dejazilla = @dejazilla@ docdir = @docdir@ dvidir = @dvidir@ +enable_testapps = @enable_testapps@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ @@ -122,6 +123,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = dejagnu no-dist DEJAZILLA = @dejazilla@ +TESTAPPS = @enable_testapps@ TOOL_OPTS = # $(srcdir)/These values point the test suite to the install tree, and @@ -134,7 +136,7 @@ SYSTEMTAP_PATH = $(DESTDIR)$(bindir) SYSTEMTAP_INCLUDES = $(DESTDIR)$(includedir) RUNTESTDEFAULTFLAGS = --tool $$tool --tool_opts \'$(TOOL_OPTS)\' --srcdir $$srcdir EXPECT = expect -RUNTEST = "env SYSTEMTAP_RUNTIME=$(SYSTEMTAP_RUNTIME) SYSTEMTAP_TAPSET=$(SYSTEMTAP_TAPSET) LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) CRASH_LIBDIR=$(CRASH_LIBDIR) PATH=$(SYSTEMTAP_PATH):$$PATH SYSTEMTAP_PATH=$(SYSTEMTAP_PATH) SYSTEMTAP_INCLUDES=$(SYSTEMTAP_INCLUDES) $(srcdir)/execrc runtest" +RUNTEST = "env SYSTEMTAP_TESTAPPS=$(TESTAPPS) SYSTEMTAP_RUNTIME=$(SYSTEMTAP_RUNTIME) SYSTEMTAP_TAPSET=$(SYSTEMTAP_TAPSET) LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) CRASH_LIBDIR=$(CRASH_LIBDIR) PATH=$(SYSTEMTAP_PATH):$$PATH SYSTEMTAP_PATH=$(SYSTEMTAP_PATH) SYSTEMTAP_INCLUDES=$(SYSTEMTAP_INCLUDES) $(srcdir)/execrc runtest" all: all-am .SUFFIXES: diff --git a/testsuite/configure b/testsuite/configure index 5e75929c..d64ca089 100755 --- a/testsuite/configure +++ b/testsuite/configure @@ -602,6 +602,7 @@ PACKAGE_BUGREPORT='systemtap@sources.redhat.com' ac_subst_vars='LTLIBOBJS LIBOBJS +enable_testapps dejazilla MAINT MAINTAINER_MODE_FALSE @@ -671,6 +672,7 @@ ac_user_opts=' enable_option_checking enable_maintainer_mode enable_dejazilla +enable_testapps ' ac_precious_vars='build_alias host_alias @@ -1308,6 +1310,9 @@ Optional Features: results to a central public collection point (default is disabled). Optional EMAIL overrides the default email address. + --enable-testapps=foo,bar or all + enable rebuilding of large external apps for testing + <sdt.h> markers Report bugs to <systemtap@sources.redhat.com>. _ACEOF @@ -2317,6 +2322,21 @@ $as_echo "$as_me: A \"make *check\" will email results to $dejazilla" >&6;} fi +apps= +for exp in $srcdir/systemtap.apps/*.exp +do + app=`basename $exp .exp` + apps="$app $apps" +done +# Check whether --enable-testapps was given. +if test "${enable_testapps+set}" = set; then + enableval=$enable_testapps; +fi + +{ $as_echo "$as_me:$LINENO: Will test ${enable_testapps-none} from: $apps" >&5 +$as_echo "$as_me: Will test ${enable_testapps-none} from: $apps" >&6;} + + ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF diff --git a/testsuite/configure.ac b/testsuite/configure.ac index 5166d226..bc5aed17 100644 --- a/testsuite/configure.ac +++ b/testsuite/configure.ac @@ -23,5 +23,17 @@ if test -n "$dejazilla"; then fi AC_SUBST(dejazilla) +apps= +for exp in $srcdir/systemtap.apps/*.exp +do + app=`basename $exp .exp` + apps="$app $apps" +done +AC_ARG_ENABLE([testapps], + AC_HELP_STRING([--enable-testapps=foo,bar or all], + [enable rebuilding of large external apps for testing <sdt.h> markers])) +AC_MSG_NOTICE([Will test ${enable_testapps-no} apps from: $apps]) +AC_SUBST(enable_testapps) + AC_CONFIG_FILES(Makefile) AC_OUTPUT diff --git a/testsuite/systemtap.base/mysql.exp b/testsuite/systemtap.apps/mysql.exp index efeffbae..efeffbae 100644 --- a/testsuite/systemtap.base/mysql.exp +++ b/testsuite/systemtap.apps/mysql.exp diff --git a/testsuite/systemtap.base/postgres.exp b/testsuite/systemtap.apps/postgres.exp index 2d58a54f..2d58a54f 100644 --- a/testsuite/systemtap.base/postgres.exp +++ b/testsuite/systemtap.apps/postgres.exp diff --git a/testsuite/systemtap.apps/stap-tcl.sh b/testsuite/systemtap.apps/stap-tcl.sh new file mode 100644 index 00000000..919f632d --- /dev/null +++ b/testsuite/systemtap.apps/stap-tcl.sh @@ -0,0 +1,25 @@ +#! /bin/sh + +set -e + +tclreleasemajor="8.6" +tclrelease="8.6b1" +tcldir=`pwd`/tcl/install/ + +mkdir -p tcl + +if [ ! -r tcl$tclrelease-src.tar.gz ] ; then + wget http://sourceforge.net/projects/tcl/files/Tcl/$tclrelease/tcl$tclrelease-src.tar.gz/download +fi + +if [ ! -d tcl/src ] ; then + tar -x -z -f tcl$tclrelease-src.tar.gz + mv tcl$tclrelease tcl/src +fi + +cd tcl/src/unix +env CPPFLAGS="-I$SYSTEMTAP_INCLUDES" CFLAGS="-g -O2" ./configure --prefix=$tcldir --enable-dtrace +make -j2 +make install + +exit 0 diff --git a/testsuite/systemtap.apps/stap-tcl.stp b/testsuite/systemtap.apps/stap-tcl.stp new file mode 100644 index 00000000..d3293b09 --- /dev/null +++ b/testsuite/systemtap.apps/stap-tcl.stp @@ -0,0 +1,30 @@ +global counts + +probe process(@1).mark("*") { + counts[$$name]<<<1 # PR10878; check also $$parms length +} + +function judge(name, minvalue) { + value = @count(counts[name]) + printf("%s %s %d %d\n", ((value>=minvalue)?"OK":"KO"), name, value, minvalue) +} + +probe end,error { + /* foreach (name in counts-) { + printf("== %s %d\n", name, @count(counts[name])) + } */ + judge("proc__entry", 9000) + judge("proc__return", 9000) + judge("proc__result", 9000) + judge("proc__args", 9000) + judge("proc__info", 9000) + judge("cmd__entry", 37000) + judge("cmd__return", 37000) + judge("cmd__result", 37000) + judge("cmd__args", 3700 /* not 37000? */) + judge("cmd__info", 37000) + judge("inst__start", 542000) + judge("inst__done", 542000) + judge("obj__create", 723000) + judge("obj__free", 704000) +} diff --git a/testsuite/systemtap.apps/tcl.exp b/testsuite/systemtap.apps/tcl.exp new file mode 100644 index 00000000..bfcf2239 --- /dev/null +++ b/testsuite/systemtap.apps/tcl.exp @@ -0,0 +1,67 @@ +set test "tcl" + +# Test sdt support in tcl. + +global env + +if {! [info exists env(SYSTEMTAP_TESTAPPS)] || ( + ! [string match "tcl" $env(SYSTEMTAP_TESTAPPS)] && + ! [string match "all" $env(SYSTEMTAP_TESTAPPS)])} { + untested "$test sdt app" + return +} + +########## Create /tmp/stap-tcl.stp ########## +set tclreleasemajor "8.6" +set tclrelease "8.6b1" +set tcldir "[pwd]/tcl/install/" +set testsuite "[pwd]" + +verbose -log "Building tcl" +set test "tcl${tclreleasemajor} build" +set rc [catch {exec sh $srcdir/$subdir/stap-tcl.sh 2>@ stdout} out] +if {$rc != 0} { + clone_output $out + fail $test + return +} else { + pass $test +} + +set test "stap-tcl.stp compilation" +set rc [catch {exec stap -DMAXSKIPPED=8024 -t -p4 $srcdir/$subdir/stap-tcl.stp tcl/install/lib/libtcl${tclreleasemajor}.so} out] +clone_output $out +if {$rc != 0} { + fail $test + return +} else { + pass $test +} + +set test "stap-tcl.stp execution" +if {![installtest_p]} { + untested $test + return +} + +set ok 0 +set ko 0 +set lines 0 +spawn stap -DMAXSKIPPED=8024 -t -c "tcl/install/bin/tclsh${tclreleasemajor} tcl/src/tests/all.tcl > tcl-test.out" $srcdir/$subdir/stap-tcl.stp tcl/install/lib/libtcl${tclreleasemajor}.so +expect { + -timeout 1000 + -re {^OK [^\r\n]*[\r\n]} { incr ok; exp_continue } + -re {^KO [^\r\n]*[\r\n]} { incr ko; exp_continue } + -re {^ERROR[^\r\n]*[\r\n]} { incr ko; exp_continue } + -re {^[^\r\n]*[\r\n]} { incr lines; exp_continue } + timeout { fail "$test (timeout)" } + eof { } +} +catch {close}; catch {wait} + +if {$ok == 14 && $ko == 0} { + pass "$test ($ok $ko $lines)" +} else { + fail "$test ($ok $ko $lines)" +} + diff --git a/testsuite/systemtap.base/xulrunner.exp b/testsuite/systemtap.apps/xulrunner.exp index be2db0c7..be2db0c7 100644 --- a/testsuite/systemtap.base/xulrunner.exp +++ b/testsuite/systemtap.apps/xulrunner.exp diff --git a/testsuite/systemtap.base/tcl.exp b/testsuite/systemtap.base/tcl.exp deleted file mode 100644 index 8056f5e5..00000000 --- a/testsuite/systemtap.base/tcl.exp +++ /dev/null @@ -1,165 +0,0 @@ -set test "tcl" - -# Test sdt support in tcl. - -global env - -if {! [info exists env(SYSTEMTAP_TEST_SDT)]} { - unsupported "tcl (\"SYSTEMTAP_TEST_SDT\" not in env)" - return -} - -########## Create /tmp/stap-tcl.stp ########## -set tclreleasemajor "8.6" -set tclrelease "8.6b1" -set tcldir "[pwd]/tcl/install/" -set testsuite "[pwd]" - -set fp [open "$testsuite/stap-tcl.stp" "w"] -puts $fp " -probe process(@1).mark(\"proc__entry\") -{ - printf (\"%s %#x,%#x,%#x\\n\",\$\$name, \$arg1,\$arg2,\$arg3) -} -probe process(@1).mark(\"proc__return\") -{ - printf (\"%s %#x,%#x\\n\",\$\$name, \$arg1,\$arg2) -} -probe process(@1).mark(\"proc__result\") -{ - printf (\"%s %#x,%#x,%#x,%#x\\n\",\$\$name, \$arg1,\$arg2,\$arg3,\$arg4) -} -probe process(@1).mark(\"proc__args\") -{ - printf (\"%s %#x,%#x,%#x,%#x,%#x,%#x,%#x,%#x,%#x,%#x\\n\",\$\$name, \$arg1,\$arg2,\$arg3,\$arg4,\$arg5,\$arg6,\$arg7,\$arg8,\$arg9,\$arg10) -} -probe process(@1).mark(\"proc__info\") -{ - printf (\"%s %#x,%#x,%#x,%#x,%#x,%#x\\n\",\$\$name, \$arg1,\$arg2,\$arg3,\$arg4,\$arg5,\$arg6) -} -probe process(@1).mark(\"cmd__entry\") -{ - printf (\"%s %#x,%#x,%#x\\n\",\$\$name, \$arg1,\$arg2,\$arg3) -} -probe process(@1).mark(\"cmd__return\") -{ - printf (\"%s %#x,%#x\\n\",\$\$name, \$arg1,\$arg2) -} -probe process(@1).mark(\"cmd__result\") -{ - printf (\"%s %#x,%#x,%#x,%#x\\n\",\$\$name, \$arg1,\$arg2,\$arg3,\$arg4) -} -probe process(@1).mark(\"cmd__args\") -{ - printf (\"%s %#x,%#x,%#x,%#x,%#x,%#x,%#x,%#x,%#x,%#x\\n\",\$\$name, \$arg1,\$arg2,\$arg3,\$arg4,\$arg5,\$arg6,\$arg7,\$arg8,\$arg9,\$arg10) -} -probe process(@1).mark(\"cmd__info\") -{ - printf (\"%s %#x,%#x,%#x,%#x,%#x,%#x\\n\",\$\$name, \$arg1,\$arg2,\$arg3,\$arg4,\$arg5,\$arg6) -} -probe process(@1).mark(\"inst__start\") -{ - printf (\"%s %#x,%#x,%#x\\n\",\$\$name, \$arg1,\$arg2,\$arg3) -} -probe process(@1).mark(\"inst__done\") -{ - printf (\"%s %#x,%#x,%#x\\n\",\$\$name, \$arg1,\$arg2,\$arg3) -} -probe process(@1).mark(\"obj__create\") -{ - printf (\"%s %#x\\n\",\$\$name, \$arg1) -} -probe process(@1).mark(\"obj__free\") -{ - printf (\"%s %#x\\n\",\$\$name, \$arg1) -} -probe process(@1).mark(\"tcl__probe\") -{ - printf (\"%s %#x,%#x,%#x,%#x,%#x,%#x,%#x,%#x,%#x,%#x\\n\",\$\$name, \$arg1,\$arg2,\$arg3,\$arg4,\$arg5,\$arg6,\$arg7,\$arg8,\$arg9,\$arg10) -} -" -close $fp - -########## Begin /tmp/stap-tcl.sh ########## -set fp [open "$testsuite/stap-tcl.sh" "w"] -puts $fp " -##### begin run_tests ##### -function run_tests \{ -(cd $tcldir/.. -MOD=stapsdt_\$(date +%j%k%M%N | sed 's/ //') -$env(SYSTEMTAP_PATH)/stap -m \$MOD -c install/bin/tclsh$tclreleasemajor $testsuite/stap-tcl.stp $testsuite/tcl/install/lib//libtcl$tclreleasemajor.so << END >$testsuite/stap-tcl-markers.log 2>&1 -source src/tests/all.tcl -quit -END -) - -PROC_ENTRY=\$(grep 'proc__entry' $testsuite/stap-tcl-markers.log | wc -l) -PROC_RETURN=\$(grep 'proc__return' $testsuite/stap-tcl-markers.log | wc -l) -PROC_RESULT=\$(grep 'proc__result' $testsuite/stap-tcl-markers.log | wc -l) -PROC_ARGS=\$(grep 'proc__args' $testsuite/stap-tcl-markers.log | wc -l) -PROC_INFO=\$(grep 'proc__info' $testsuite/stap-tcl-markers.log | wc -l) -CMD_ENTRY=\$(grep 'cmd__entry' $testsuite/stap-tcl-markers.log | wc -l) -CMD_RETURN=\$(grep 'cmd__return' $testsuite/stap-tcl-markers.log | wc -l) -CMD_RESULT=\$(grep 'cmd__result' $testsuite/stap-tcl-markers.log | wc -l) -CMD_ARGS=\$(grep 'cmd__args' $testsuite/stap-tcl-markers.log | wc -l) -CMD_INFO=\$(grep 'cmd__info' $testsuite/stap-tcl-markers.log | wc -l) -INST_START=\$(grep 'inst__start' $testsuite/stap-tcl-markers.log | wc -l) -INST_DONE=\$(grep 'inst__done' $testsuite/stap-tcl-markers.log | wc -l) -OBJ_CREATE=\$(grep 'obj__create' $testsuite/stap-tcl-markers.log | wc -l) -OBJ_FREE=\$(grep 'obj__free' $testsuite/stap-tcl-markers.log | wc -l) - -echo PROC_ENTRY=\$PROC_ENTRY PROC_RETURN=\$PROC_RETURN PROC_RESULT=\$PROC_RESULT PROC_ARGS=\$PROC_ARGS PROC_INFO=\$PROC_INFO CMD_ENTRY=\$CMD_ENTRY CMD_RETURN=\$CMD_RETURN CMD_RESULT=\$CMD_RESULT CMD_ARGS=\$CMD_ARGS CMD_INFO=\$CMD_INFO INST_START=\$INST_START INST_DONE=\$INST_DONE OBJ_CREATE=\$OBJ_CREATE OBJ_FREE=\$OBJ_FREE - -if \[ \$PROC_ENTRY -gt 9000 -a \$PROC_RETURN -gt 9000 -a \$PROC_RESULT -gt 9000 -a \$PROC_ARGS -gt 9000 -a \$PROC_INFO -gt 9000 -a \$CMD_ENTRY -gt 37000 -a \$CMD_RETURN -gt 37000 -a \$CMD_RESULT -gt 37000 -a \$CMD_ARGS -gt 3700 -a \$CMD_INFO -gt 37000 -a \$INST_START -gt 542000 -a \$INST_DONE -gt 542000 -a \$OBJ_CREATE -gt 723000 -a \$OBJ_FREE -gt 704000 \] ; then - echo PASS: tcl markers \$1 -else - echo FAIL: tcl markers \$1 -fi - -\} -##### end run_tests ##### - -if \[ ! -r tcl$tclrelease-src.tar.gz \] ; then -wget http://sourceforge.net/projects/tcl/files/Tcl/$tclrelease/tcl$tclrelease-src.tar.gz/download -fi - -if \[ ! -d tcl/src \] ; then -tar -x -z -f tcl$tclrelease-src.tar.gz -mkdir tcl -mv tcl$tclrelease tcl/src -fi - -if \[ ! -d tcl/install/bin \] ; then -cd tcl/src/unix -./configure --prefix=$tcldir --enable-dtrace CFLAGS='-I$env(SYSTEMTAP_INCLUDES) -g' - -make -j2 -make install -fi - -run_tests uprobe -" -########## End /tmp/stap-tcl.sh ########## -close $fp - -########## /tmp/stap-tcl.sh does most of the work ########## -verbose -log Running tcl testsuite -spawn sh stap-tcl.sh 2>&1 -expect { - -timeout 1000 - -re {FAIL: [a-z_ ]+} { regexp " .*$" $expect_out(0,string) s; - fail "$s"; exp_continue } - -re {PASS: [a-z_ ]+} { regexp " .*$" $expect_out(0,string) s; - pass "$s"; exp_continue } - -re {UNSUPPORTED: [a-zA-Z_/: ]+} { regexp " .*$" $expect_out(0,string) s; - verbose -log "$s" - unsupported "$s"; exp_continue } - timeout { fail "$test (timeout)" } - eof { } -} - -if { $verbose == 0 } { -catch {exec rm -rf $testsuite/stap-tcl.stp tcl$tclrelease-src.tar.gz \ - $testsuite/stap-tcl-markers.log $testsuite/stap-tcl.sh } -catch {exec rm -rf tcl} -} |