summaryrefslogtreecommitdiffstats
path: root/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/ChangeLog22
-rwxr-xr-xtestsuite/buildok/signal-embedded.stp5
-rwxr-xr-xtestsuite/semko/procfs11.stp4
-rwxr-xr-xtestsuite/semko/procfs12.stp4
-rw-r--r--testsuite/systemtap.base/marker.exp40
-rw-r--r--testsuite/systemtap.base/onoffprobe.exp67
-rw-r--r--testsuite/systemtap.base/onoffprobe.stp23
7 files changed, 115 insertions, 50 deletions
diff --git a/testsuite/ChangeLog b/testsuite/ChangeLog
index d8439450..6dd0d8de 100644
--- a/testsuite/ChangeLog
+++ b/testsuite/ChangeLog
@@ -1,3 +1,25 @@
+2008-01-17 David Smith <dsmith@redhat.com>
+
+ * semko/procfs11.stp: Added test for invalid use of procfs probe
+ '$value' target variable.
+ * semko/procfs12.stp: Ditto.
+
+2008-01-16 David Smith <dsmith@redhat.com>
+
+ PR 5608.
+ * systemtap.base/marker.exp: Added 2 tests for treating marker
+ arguments incorrectly.
+
+2008-01-16 Eugene Teo <eteo@redhat.com>
+
+ * buildok/signal-embedded.stp: Add all new embedded C functions
+ in signal.
+
+2008-01-14 Frank Ch. Eigler <fche@elastic.org>
+
+ PR 4935.
+ * systemtap.base/onoffprobe.*: Toughen test.
+
2008-01-12 Frank Ch. Eigler <fche@elastic.org>
* lib/systemtap.exp (get_system_info): Look for $builddir/SNAPSHOT too.
diff --git a/testsuite/buildok/signal-embedded.stp b/testsuite/buildok/signal-embedded.stp
index 5a0d9d8b..24e218e9 100755
--- a/testsuite/buildok/signal-embedded.stp
+++ b/testsuite/buildok/signal-embedded.stp
@@ -2,5 +2,10 @@
probe begin {
print (get_sigset(0))
+ print (get_sa_flags(0))
+ print (get_sa_handler(0))
+ print (sigset_mask_str(0))
+ print (is_sig_blocked(0, 0))
+ print (sa_flags_str(0))
}
diff --git a/testsuite/semko/procfs11.stp b/testsuite/semko/procfs11.stp
new file mode 100755
index 00000000..719346fb
--- /dev/null
+++ b/testsuite/semko/procfs11.stp
@@ -0,0 +1,4 @@
+#! stap -p2
+
+# use $value as a structure pointer in a procfs probe
+probe procfs.write { print($value->foo) }
diff --git a/testsuite/semko/procfs12.stp b/testsuite/semko/procfs12.stp
new file mode 100755
index 00000000..c8af619b
--- /dev/null
+++ b/testsuite/semko/procfs12.stp
@@ -0,0 +1,4 @@
+#! stap -p2
+
+# use $value as an array in a procfs probe
+probe procfs.write { print($value[0]) }
diff --git a/testsuite/systemtap.base/marker.exp b/testsuite/systemtap.base/marker.exp
index 01d1ed54..bfa3b02d 100644
--- a/testsuite/systemtap.base/marker.exp
+++ b/testsuite/systemtap.base/marker.exp
@@ -11,7 +11,7 @@
proc stap_compile { TEST_NAME compile script args } {
set cmd [concat {stap -v -p4 -e} $script $args]
- #puts "running $cmd"
+ puts "running $cmd"
eval spawn $cmd
set compile_errors 0
expect {
@@ -47,9 +47,13 @@ proc stap_compile { TEST_NAME compile script args } {
set kernel_markers_found 0
set kernel_marker_names {}
+set num_marker_found 0
+set num_marker_name ""
+
set kernel_script {"probe kernel.mark(\"%s\") { }"}
set kernel_script_arg {"probe kernel.mark(\"%s\") { print(%s) }"}
set kernel_script_arg2 {"probe kernel.mark(\"%s\") { %s = 0 }"}
+set kernel_script_arg3 {"probe kernel.mark(\"%s\") { print(\$arg1%s) }"}
# Try to read in the marker list from the Module.markers file.
set uname [exec /bin/uname -r]
@@ -59,9 +63,17 @@ if {! [catch {open $path RDONLY} fl]} {
while {[gets $fl s] >= 0} {
# This regexp only picks up markers that contain arguments.
# This helps ensure that K_MARKER04 passes correctly.
- if [regexp {^([^ \t]+)\t[^ \t]+.*%.+$} $s match name] {
+ if [regexp {^([^ \t]+)\t[^ \t]+.*(%.+)$} $s match name fmt] {
set kernel_markers_found 1
lappend kernel_marker_names $name
+
+ # Look for a marker whose first argument is numeric
+ # (either '%d', '%u', or '%p'). If we find such a marker,
+ # we can run K_MARKER09 and K_MARKER10.
+ if {$num_marker_found == 0 && [regexp {^%[dup]} $fmt]} {
+ set num_marker_found 1
+ set num_marker_name $name
+ }
}
}
catch {close $fl}
@@ -156,3 +168,27 @@ if {$kernel_markers_found == 0} {
[lindex $kernel_marker_names 0] {\$arg1}]
stap_compile $TEST_NAME 0 $script
}
+
+set TEST_NAME "K_MARKER09"
+if {$kernel_markers_found == 0} {
+ untested "$TEST_NAME : no kernel markers present"
+} elseif {$num_marker_found == 0} {
+ untested "$TEST_NAME : no kernel marker found with a numeric first argument"
+} else {
+ # Try compiling a script that treats its first marker argument
+ # as a structure (which isn't allowed).
+ set script [format $kernel_script_arg3 $num_marker_name "->foo"]
+ stap_compile $TEST_NAME 0 $script
+}
+
+set TEST_NAME "K_MARKER10"
+if {$kernel_markers_found == 0} {
+ untested "$TEST_NAME : no kernel markers present"
+} elseif {$num_marker_found == 0} {
+ untested "$TEST_NAME : no kernel marker found with a numeric first argument"
+} else {
+ # Try compiling a script that treats its first marker argument
+ # like an array (which isn't allowed).
+ set script [format $kernel_script_arg3 $num_marker_name {\[0\]}]
+ stap_compile $TEST_NAME 0 $script
+}
diff --git a/testsuite/systemtap.base/onoffprobe.exp b/testsuite/systemtap.base/onoffprobe.exp
index 41e107d7..b86de4ea 100644
--- a/testsuite/systemtap.base/onoffprobe.exp
+++ b/testsuite/systemtap.base/onoffprobe.exp
@@ -4,54 +4,37 @@ if {![installtest_p]} { untested $test; return }
spawn stap $srcdir/$subdir/$test.stp -m $test
set pid $spawn_id
set ok 0
+
+proc advance {} {
+ global test
+ global expect_out
+ global ok
+ pass "$test $expect_out(1,string)"
+ incr ok
+ exec echo $ok > /proc/systemtap/$test/switch
+ exec echo dummy > /dev/null
+ exp_continue
+}
+
expect {
-timeout 240
- "begin probed\r\n" {
- if {$ok == 0} {
- incr ok
- pass "conditional begin probe"
- exec echo 1 > /proc/systemtap/$test/switch
- exec echo "dummy" > /dev/null
- exp_continue;
- }
- }
- "function return probed\r\n" {
- if {$ok == 1} {
- incr ok
- pass "conditional dwarf probe (return)"
- exec echo 2 > /proc/systemtap/$test/switch
- exec echo "dummy" > /dev/null
- exp_continue;
- }
- }
- "function entry probed\r\n" {
- if {$ok == 2} {
- incr ok
- pass "conditional dwarf probe (entry)"
- exec echo 3 > /proc/systemtap/$test/switch
- exp_continue;
- }
- }
- "timer probed\r\n" {
- if {$ok == 3} {
- incr ok
- pass "conditional timer probe"
- exec echo 4 > /proc/systemtap/$test/switch
- exp_continue;
- }
- }
- "profile probed\r\n" {
- if {$ok == 4} {
- incr ok
- pass "conditional profile probe"
- }
+ -re "(begin1 probed)\r\n" { advance }
+ -re "^(function return probed)\r\n" { advance }
+ -re "^(function entry probed)\r\n" { advance }
+ -re "^(timer probed)\r\n" { advance }
+ -re "^(profile probed)\r\n" { advance }
+ -re "^(alias\.one\.a and alias\.one and alias\.\* probed)\r\n" { advance }
+ -re "^(alias\.one\.b and alias\.one and alias\.\* probed)\r\n" { advance }
+ -re "^(alias\.two and alias\.\* probed)\r\n" {
+ pass "$test $expect_out(1,string)"
+ incr ok
}
- timeout { fail "$test (timeout)" }
- eof { }
+ timeout { fail "$test (timeout)" }
+ eof { }
}
send "\003"
#FIXME does not handle case of hanging pfaults.stp correctly
wait
exec rm -f $test.ko
-if {$ok != 5} {fail "conditional probes ($ok)"}
+if {$ok != 8} {fail "conditional probes ($ok)"}
diff --git a/testsuite/systemtap.base/onoffprobe.stp b/testsuite/systemtap.base/onoffprobe.stp
index 11968540..f7169039 100644
--- a/testsuite/systemtap.base/onoffprobe.stp
+++ b/testsuite/systemtap.base/onoffprobe.stp
@@ -1,34 +1,45 @@
-global switch=0
+global switch=-1
#begin probe
+probe begin if (switch==-1) {
+ log("begin1 probed");
+}
+
probe begin if (switch==0) {
- log("begin probed\n");
+ log("begin2 probed");
}
#dwarf probe (return)
probe kernel.function("sys_write").return if (switch == 1) {
- log("function return probed\n")
+ log("function return probed")
switch = 0
}
#dwarf probe (entry)
probe kernel.function("sys_write") if (switch == 2) {
- log("function entry probed\n")
+ log("function entry probed")
switch = 0
}
#timer probe
probe timer.s(1) if (switch == 3) {
- log("timer probed\n")
+ log("timer probed")
switch = 0
}
#profile probe
probe timer.profile if (switch == 4) {
- log("profile probed\n")
+ log("profile probed")
switch = 0
}
+# aliasess
+probe alias.one.a = timer.s(2) if (switch == 5) { print("alias.one.a and") }
+probe alias.one.b = timer.s(3) if (switch == 6) { print("alias.one.b and") }
+probe alias.one = alias.one.* if (switch >= 5 && switch < 7) { print(" alias.one and") }
+probe alias.two = timer.s(4) if (switch == 7) { print("alias.two and") }
+probe alias.* if (switch) { log(" alias.* probed") }
+
probe procfs("switch").write {
switch = strtol($value, 10)
}