summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.base
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/systemtap.base')
-rw-r--r--testsuite/systemtap.base/cache.exp1
-rw-r--r--testsuite/systemtap.base/cast.exp4
-rw-r--r--testsuite/systemtap.base/cast.stp22
-rw-r--r--testsuite/systemtap.base/ctime.exp3
-rw-r--r--testsuite/systemtap.base/gtod_init.exp29
-rw-r--r--testsuite/systemtap.base/labels.exp86
-rw-r--r--testsuite/systemtap.base/limits.exp3
-rw-r--r--testsuite/systemtap.base/overflow_error.exp32
-rw-r--r--testsuite/systemtap.base/overflow_error.stp22
-rw-r--r--testsuite/systemtap.base/sdt.c71
-rw-r--r--testsuite/systemtap.base/sdt.exp64
-rw-r--r--testsuite/systemtap.base/sdt.stp49
-rw-r--r--testsuite/systemtap.base/static_uprobes.exp11
-rw-r--r--testsuite/systemtap.base/stmt_rel.exp3
-rw-r--r--testsuite/systemtap.base/tracepoints.exp3
-rw-r--r--testsuite/systemtap.base/tracepoints.stp23
16 files changed, 411 insertions, 15 deletions
diff --git a/testsuite/systemtap.base/cache.exp b/testsuite/systemtap.base/cache.exp
index 390af054..b10a4f28 100644
--- a/testsuite/systemtap.base/cache.exp
+++ b/testsuite/systemtap.base/cache.exp
@@ -116,6 +116,7 @@ set env(SYSTEMTAP_DIR) /dev/null
stap_compile DISABLED1 [F_UNCACHED_COMPILE] $basic_script1
stap_compile DISABLED2 [F_UNCACHED_COMPILE] $basic_script1
set env(SYSTEMTAP_DIR) $local_systemtap_dir
+eval [list exec /bin/rm -f] [glob "stap_*.ko"]
# Disable the cache with '-m'
stap_compile MODNAM1 [F_UNCACHED_COMPILE] $basic_script1 -m modnam
diff --git a/testsuite/systemtap.base/cast.exp b/testsuite/systemtap.base/cast.exp
new file mode 100644
index 00000000..df3246e8
--- /dev/null
+++ b/testsuite/systemtap.base/cast.exp
@@ -0,0 +1,4 @@
+set test "cast"
+set ::result_string {PID OK
+execname OK}
+stap_run2 $srcdir/$subdir/$test.stp
diff --git a/testsuite/systemtap.base/cast.stp b/testsuite/systemtap.base/cast.stp
new file mode 100644
index 00000000..bec0cc9b
--- /dev/null
+++ b/testsuite/systemtap.base/cast.stp
@@ -0,0 +1,22 @@
+probe begin
+{
+ curr = task_current()
+
+ // Compare PIDs
+ pid = pid()
+ cast_pid = @cast(curr, "task_struct")->tgid
+ if (pid == cast_pid)
+ println("PID OK")
+ else
+ printf("PID %d != %d\n", pid, cast_pid)
+
+ // Compare execnames
+ name = execname()
+ cast_name = kernel_string(@cast(curr, "task_struct")->comm)
+ if (name == cast_name)
+ println("execname OK")
+ else
+ printf("execname \"%s\" != \"%s\"\n", name, cast_name)
+
+ exit()
+}
diff --git a/testsuite/systemtap.base/ctime.exp b/testsuite/systemtap.base/ctime.exp
index f6db096a..d5ae07d5 100644
--- a/testsuite/systemtap.base/ctime.exp
+++ b/testsuite/systemtap.base/ctime.exp
@@ -13,6 +13,5 @@ a long, long time ago...
Tue Jan 19 03:14:07 2038
far far in the future...
a long, long time ago...
-far far in the future...
-}
+far far in the future...}
stap_run2 $srcdir/$subdir/$test.stp
diff --git a/testsuite/systemtap.base/gtod_init.exp b/testsuite/systemtap.base/gtod_init.exp
new file mode 100644
index 00000000..48616b1f
--- /dev/null
+++ b/testsuite/systemtap.base/gtod_init.exp
@@ -0,0 +1,29 @@
+# test for checking initialization of the time subsystem
+set test "gtod_init"
+
+# check that init and kill are both present with a gettimeofday
+set time_init 0
+set time_kill 0
+spawn stap -p2 -e {probe begin { println(gettimeofday_s()) }}
+expect {
+ -timeout 120
+ -re {\n_gettimeofday_init:} { incr time_init; exp_continue }
+ -re {\n_gettimeofday_kill:} { incr time_kill; exp_continue }
+ timeout { fail "$test (timeout)" }
+ eof {
+ if {$time_init == 1} { pass "$test (init)" } { fail "$test (init $time_init)" }
+ if {$time_kill == 1} { pass "$test (kill)" } { fail "$test (kill $time_kill)" }
+ }
+}
+wait
+
+# check that init and kill are both NOT present without a gettimeofday
+spawn stap -p2 -e {probe begin { println(get_cycles()) }}
+expect {
+ -timeout 120
+ -re {\n_gettimeofday_init:} { fail "$test (bad init)" }
+ -re {\n_gettimeofday_kill:} { fail "$test (bad kill)" }
+ timeout { fail "$test (timeout)" }
+ eof { pass "$test (no init/kill)" }
+}
+wait
diff --git a/testsuite/systemtap.base/labels.exp b/testsuite/systemtap.base/labels.exp
index 9c92d69c..6db81c54 100644
--- a/testsuite/systemtap.base/labels.exp
+++ b/testsuite/systemtap.base/labels.exp
@@ -13,6 +13,7 @@ if {$utrace_support_found == 0} { untested "$test"; return }
# Compile a C program to use as the user-space probing target
set label_srcpath "[pwd]/labels.c"
set label_exepath "[pwd]/labels.x"
+set label_sopath "[pwd]/labels.so"
set label_flags "additional_flags=-g"
set fp [open $label_srcpath "w"]
puts $fp "
@@ -54,9 +55,12 @@ if { $res != "" } {
pass "compiling labels.c -g"
}
+# label in an executable
+
verbose -log "spawn stap -c $label_exepath $label_stppath"
spawn stap -c $label_exepath $label_stppath
+wait
expect {
-timeout 180
-re {VARS a=0x0 b=0x0.*VARS a=0x2 b=0x0.*VARS a=0x2 b=0x3 c=0x[a-f01-9]} { incr ok; exp_continue }
@@ -64,7 +68,83 @@ expect {
eof { }
}
-wait
+if {$ok == 1} { pass "$test exe .label" } { fail "$test exe .label" }
+
+# address of label in an executable
+
+set label_shpath "[pwd]/label.sh"
+set fp [open $label_shpath "w"]
+puts $fp "
+readelf --debug-dump $label_exepath | awk \"
+/init_another_int/ {have_label=1}
+/DW_AT_low_pc/ {if (have_label) {print \$3;exit;}}
+\"
+"
+close $fp
+spawn sh $label_shpath
+expect {
+ -re {0x[0-9a-f]*}
+}
+set nomatch 0
+spawn stap -p2 -l "process\(\"$label_exepath\"\).statement($expect_out(0,string))"
+expect {
+ -timeout 180
+ -re {semantic error: no match} { incr nomatch; exp_continue }
+ timeout { fail "$test (timeout)" }
+ eof { }
+}
+
+if {$nomatch == 0} { pass "$test exe .statement" } { fail "$test exe .statement" }
+
+set ok 0
+
+set label_flags "additional_flags=-g additional_flags=-shared additional_flags=-fPIC"
+set res [target_compile $label_srcpath $label_sopath executable $label_flags]
+if { $res != "" } {
+ verbose "target_compile failed: $res" 2
+ fail "compiling labels.c -g"
+ catch {exec rm -f $label_srcpath $label_stppath}
+ return
+} else {
+ pass "compiling labels.c -g"
+}
+
+# label in a shared object
+
+spawn stap -p2 -l "process\(\"$label_sopath\"\).function\(\"\*\"\).label\(\"init_another_int\"\)"
+expect {
+ -timeout 180
+ -re {process.*function} { incr ok; exp_continue }
+ timeout { fail "$test (timeout)" }
+ eof { }
+}
+
+if {$ok == 1} { pass "$test so .label" } { fail "$test so .label" }
+
+# address of label in a shared object
+
+set label_shpath "[pwd]/label.sh"
+set fp [open $label_shpath "w"]
+puts $fp "
+readelf --debug-dump $label_sopath | awk \"
+/init_another_int/ {have_label=1}
+/DW_AT_low_pc/ {if (have_label) {print \$3;exit;}}
+\"
+"
+close $fp
+spawn sh $label_shpath
+expect {
+ -re {0x[0-9a-f]*}
+}
+set nomatch 0
+spawn stap -p2 -l "process\(\"$label_sopath\"\).statement($expect_out(0,string))"
+expect {
+ -timeout 180
+ -re {semantic error: no match} { incr nomatch; exp_continue }
+ timeout { fail "$test (timeout)" }
+ eof { }
+}
+
+if {$nomatch == 0} { pass "$test so .statement" } { fail "$test so .statement" }
-if {$ok == 1} { pass "$test" } { fail "$test ($ok)" }
-catch {exec rm -f $label_srcpath $label_stppath $label_exepath}
+catch {exec rm -f $label_srcpath $label_stppath $label_exepath $label_shpath $label_sopath}
diff --git a/testsuite/systemtap.base/limits.exp b/testsuite/systemtap.base/limits.exp
index c5328e8f..c04d507d 100644
--- a/testsuite/systemtap.base/limits.exp
+++ b/testsuite/systemtap.base/limits.exp
@@ -32,7 +32,6 @@ Minimum signed 64-bit number
-9223372036854775808 0x8000000000000000
-9223372036854775808 0x8000000000000000
-9223372036854775808 0x8000000000000000
--9223372036854775808 0x8000000000000000
-}
+-9223372036854775808 0x8000000000000000}
stap_run2 $srcdir/$subdir/$test.stp
diff --git a/testsuite/systemtap.base/overflow_error.exp b/testsuite/systemtap.base/overflow_error.exp
new file mode 100644
index 00000000..33be90a7
--- /dev/null
+++ b/testsuite/systemtap.base/overflow_error.exp
@@ -0,0 +1,32 @@
+# Test overflow errors point to the correct thing.
+
+set test "overflow_error"
+if {![installtest_p]} { untested $test; return }
+
+set error_msg1 "ERROR: Array overflow, check size limit (3) near identifier 'overflow1' at $srcdir/$subdir/$test.stp"
+set error_msg2 "ERROR: Array overflow, check size limit (5) near identifier 'overflow2' at $srcdir/$subdir/$test.stp"
+set exit_warning "WARNING: Number of errors: 2, skipped probes: 0"
+
+set pass 0
+
+spawn stap -DMAXERRORS=1 $srcdir/$subdir/$test.stp
+expect {
+ $error_msg1 {incr pass; exp_continue}
+ $error_msg2 {incr pass; exp_continue}
+ $exit_warning {incr pass; exp_continue}
+ timeout {
+ exec kill -INT -[exp_pid]
+ fail "$test timed out"
+ }
+ eof {}
+}
+catch { close }
+wait
+
+if {$pass == 3} {
+ pass $test
+} else {
+ fail "$test ($pass)"
+}
+
+
diff --git a/testsuite/systemtap.base/overflow_error.stp b/testsuite/systemtap.base/overflow_error.stp
new file mode 100644
index 00000000..f5a3e917
--- /dev/null
+++ b/testsuite/systemtap.base/overflow_error.stp
@@ -0,0 +1,22 @@
+# overflow some stuff to see if error message point to the correct thing.
+global count;
+global overflow1[3];
+global overflow2[5];
+
+probe timer.ms(10)
+{
+ if (count <= 3)
+ {
+ overflow1[count++] = gettimeofday_ns();
+ }
+ else
+ {
+ overflow2[count++] <<< gettimeofday_ns();
+ }
+}
+
+probe timer.s(3)
+{
+ exit();
+}
+
diff --git a/testsuite/systemtap.base/sdt.c b/testsuite/systemtap.base/sdt.c
new file mode 100644
index 00000000..7c7398e5
--- /dev/null
+++ b/testsuite/systemtap.base/sdt.c
@@ -0,0 +1,71 @@
+#include "sdt.h" /* Really <sys/sdt.h>, but pick current source version. */
+
+static void call1(int a)
+{
+ STAP_PROBE1(test, mark_a, a);
+}
+
+static void call2(int a, int b)
+{
+ STAP_PROBE2(test, mark_b, a, b);
+}
+
+static void call3(int a, int b, int c)
+{
+ STAP_PROBE3(test, mark_c, a, b, c);
+}
+
+static void call4(int a, int b, int c, int d)
+{
+ STAP_PROBE4(test, mark_d, a, b, c, d);
+}
+
+static void call5(int a, int b, int c, int d, int e)
+{
+ STAP_PROBE5(test, mark_e, a, b, c, d, e);
+}
+
+static void call6(int a, int b, int c, int d, int e, int f)
+{
+ STAP_PROBE6(test, mark_f, a, b, c, d, e, f);
+}
+
+static void call7(int a, int b, int c, int d, int e, int f, int g)
+{
+ STAP_PROBE7(test, mark_g, a, b, c, d, e, f, g);
+}
+
+static void call8(int a, int b, int c, int d, int e, int f, int g, int h)
+{
+ STAP_PROBE8(test, mark_h, a, b, c, d, e, f, g, h);
+}
+
+static void call9(int a, int b, int c, int d, int e, int f, int g, int h, int i)
+{
+ STAP_PROBE9(test, mark_i, a, b, c, d, e, f, g, h, i);
+}
+
+static void call10(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j)
+{
+ STAP_PROBE10(test, mark_j, a, b, c, d, e, f, g, h, i, j);
+}
+
+int
+main (int argc, char **argv)
+{
+ int a, b, c, d, e, f, g, h, i, j;
+ a = 1; b = 2; c = 3; d = 4; e = 5; f = 6; g = 7; h = 8; i = 9; j = 10;
+ call1(a);
+ call2(a, b);
+ call3(a, b, c);
+ call4(a, b, c, d);
+ call5(a, b, c, d, e);
+ call6(a, b, c, d, e, f);
+ call7(a, b, c, d, e, f, g);
+ call8(a, b, c, d, e, f, g, h);
+ call9(a, b, c, d, e, f, g, h, i);
+ call10(a, b, c, d, e, f, g, h, i, j);
+ (void) argv;
+ (void) argc;
+ return 0;
+}
diff --git a/testsuite/systemtap.base/sdt.exp b/testsuite/systemtap.base/sdt.exp
new file mode 100644
index 00000000..21b94810
--- /dev/null
+++ b/testsuite/systemtap.base/sdt.exp
@@ -0,0 +1,64 @@
+set test "sdt"
+set ::result_string {1
+1 2
+1 2 3
+1 2 3 4
+1 2 3 4 5
+1 2 3 4 5 6
+1 2 3 4 5 6 7
+1 2 3 4 5 6 7 8
+1 2 3 4 5 6 7 8 9
+1 2 3 4 5 6 7 8 9 10}
+
+set extra_flags {{""} {additional_flags=-std=gnu89} {additional_flags=-ansi} {additional_flags=-pedantic} {additional_flags=-ansi additional_flags=-pedantic} {additional_flags=-O2} {additional_flags="-O3"}}
+
+# Iterate extra_flags, trying each with C and C++
+for {set i 0} {$i < [llength $extra_flags]} {incr i} {
+set extra_flag [lindex $extra_flags $i]
+
+# C
+set test_flags "additional_flags=-g"
+set test_flags "$test_flags additional_flags=-I$srcdir/../includes/sys"
+set test_flags "$test_flags additional_flags=-Wall"
+set test_flags "$test_flags additional_flags=-Wextra"
+set test_flags "$test_flags additional_flags=-Werror"
+
+set res [target_compile $srcdir/$subdir/$test.c $test.prog executable "$test_flags $extra_flag"]
+if { $res != "" } {
+ verbose "target_compile failed: $res" 2
+ fail "compiling $test.c $extra_flag"
+ return
+} else {
+ pass "compiling $test.c $extra_flag"
+}
+
+if {[installtest_p]} {
+ stap_run3 "$test $extra_flag" $srcdir/$subdir/$test.stp -c ./$test.prog
+} else {
+ untested "$test $extra_flag"
+}
+
+# C++
+set test_flags "additional_flags=-g"
+set test_flags "$test_flags additional_flags=-I$srcdir/../includes/sys"
+set test_flags "$test_flags additional_flags=-Wall"
+set test_flags "$test_flags additional_flags=-Werror"
+set test_flags "$test_flags additional_flags=-x additional_flags=c++"
+
+set res [target_compile $srcdir/$subdir/$test.c $test.prog executable "$test_flags $extra_flag"]
+if { $res != "" } {
+ verbose "target_compile failed: $res" 2
+ fail "compiling $test.c c++ $extra_flag"
+ return
+} else {
+ pass "compiling $test.c c++ $extra_flag"
+}
+
+if {[installtest_p]} {
+ stap_run3 "$test c++ $extra_flag" $srcdir/$subdir/$test.stp -c ./$test.prog
+} else {
+ untested "$test c++ $extra_flag"
+}
+}
+
+catch {exec rm -f $test.prog}
diff --git a/testsuite/systemtap.base/sdt.stp b/testsuite/systemtap.base/sdt.stp
new file mode 100644
index 00000000..1f075bca
--- /dev/null
+++ b/testsuite/systemtap.base/sdt.stp
@@ -0,0 +1,49 @@
+probe process("sdt.prog").mark("mark_a")
+{
+ printf("%d\n", $arg1);
+}
+
+probe process("sdt.prog").mark("mark_b")
+{
+ printf("%d %d\n", $arg1, $arg2);
+}
+
+probe process("sdt.prog").mark("mark_c")
+{
+ printf("%d %d %d\n", $arg1, $arg2, $arg3);
+}
+
+probe process("sdt.prog").mark("mark_d")
+{
+ printf("%d %d %d %d\n", $arg1, $arg2, $arg3, $arg4);
+}
+
+probe process("sdt.prog").mark("mark_e")
+{
+ printf("%d %d %d %d %d\n", $arg1, $arg2, $arg3, $arg4, $arg5);
+}
+
+probe process("sdt.prog").mark("mark_f")
+{
+ printf("%d %d %d %d %d %d\n", $arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
+}
+
+probe process("sdt.prog").mark("mark_g")
+{
+ printf("%d %d %d %d %d %d %d\n", $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7);
+}
+
+probe process("sdt.prog").mark("mark_h")
+{
+ printf("%d %d %d %d %d %d %d %d\n", $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8);
+}
+
+probe process("sdt.prog").mark("mark_i")
+{
+ printf("%d %d %d %d %d %d %d %d %d\n", $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8, $arg9);
+}
+
+probe process("sdt.prog").mark("mark_j")
+{
+ printf("%d %d %d %d %d %d %d %d %d %d\n", $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8, $arg9, $arg10);
+}
diff --git a/testsuite/systemtap.base/static_uprobes.exp b/testsuite/systemtap.base/static_uprobes.exp
index 11fec9b1..a4bd5e2c 100644
--- a/testsuite/systemtap.base/static_uprobes.exp
+++ b/testsuite/systemtap.base/static_uprobes.exp
@@ -14,6 +14,7 @@ puts $fp "
void
bar (int i)
{
+ STATIC_UPROBES_TEST_PROBE_2(i);
if (i == 0)
i = 1000;
STAP_PROBE1(static_uprobes,test_probe_2,i);
@@ -88,6 +89,7 @@ if {[installtest_p]} {
if {[catch {exec $dtrace -h -s $sup_dpath} res]} {
verbose -log "unable to run $dtrace: $res"
}
+catch {exec rm -f $sup_dpath}
if {[file exists $sup_hpath]} then {
pass "$test generating header"
} else {
@@ -96,8 +98,6 @@ if {[file exists $sup_hpath]} then {
return
}
-catch {exec rm -f $sup_dpath}
-
if {[installtest_p]} {
set sdtdir $env(SYSTEMTAP_INCLUDES)
} else {
@@ -159,7 +159,7 @@ expect {
wait
-if {$ok == 4} { pass "$test C" } { fail "$test C ($ok)" }
+if {$ok == 5} { pass "$test C" } { fail "$test C ($ok)" }
set ok 0
@@ -170,7 +170,6 @@ verbose -log "spawn stap -c $sup_exepath $sup_stppath"
spawn stap -c $sup_exepath $sup_stppath
expect {
-timeout 180
- -re {In test_probe_1 probe} { incr ok; exp_continue }
-re {In test_probe_2 probe 0x2} { incr ok; exp_continue }
-re {In test_probe_0 probe 0x3} { incr ok; exp_continue }
-re {In test_probe_3 probe 0x3 0x[0-9a-f][0-9a-f]} { incr ok; exp_continue }
@@ -181,9 +180,9 @@ expect {
wait
-if {$ok == 4} { pass "$test C++" } { fail "$test C++ ($ok)" }
+if {$ok == 5} { pass "$test C++" } { fail "$test C++ ($ok)" }
# catch {exec rm -f $sup_srcpath $sup_exepath $supcplus_exepath $sup_hpath $sup_stppath}
# It's not so important to clean up, and it's unhelpful if
-# one needs to diagnose a test failure. \ No newline at end of file
+# one needs to diagnose a test failure.
diff --git a/testsuite/systemtap.base/stmt_rel.exp b/testsuite/systemtap.base/stmt_rel.exp
index 25156d9b..be51fef9 100644
--- a/testsuite/systemtap.base/stmt_rel.exp
+++ b/testsuite/systemtap.base/stmt_rel.exp
@@ -3,7 +3,6 @@
set test "stmt_rel"
set ::result_string {PASS bio_init
PASS line number
-PASS wildcard
-}
+PASS wildcard}
stap_run2 $srcdir/$subdir/$test.stp
diff --git a/testsuite/systemtap.base/tracepoints.exp b/testsuite/systemtap.base/tracepoints.exp
new file mode 100644
index 00000000..bea461c4
--- /dev/null
+++ b/testsuite/systemtap.base/tracepoints.exp
@@ -0,0 +1,3 @@
+set test "tracepoints"
+set ::result_string {tracepoints OK}
+stap_run2 $srcdir/$subdir/$test.stp
diff --git a/testsuite/systemtap.base/tracepoints.stp b/testsuite/systemtap.base/tracepoints.stp
new file mode 100644
index 00000000..bdb4d730
--- /dev/null
+++ b/testsuite/systemtap.base/tracepoints.stp
@@ -0,0 +1,23 @@
+// This checks that we can compile and register every tracepoint
+// we can find, along with all of their context variables.
+global hits
+probe all_tracepoints = kernel.trace("*")
+{
+ if ($$name . $$vars . $$parms == "")
+ next
+
+ // Allow it to quit once we hit our hundredth tracepoint
+ if (++hits < 100)
+ next
+}
+
+// If there aren't any tracepoints in the kernel,
+// we use "begin" instead to quit right away.
+probe all_tracepoints!, begin {
+ println("tracepoints OK")
+ exit()
+}
+
+// give hits a use so there's no warning
+// when we don't have tracepoints
+probe never { hits++ }