diff options
author | Dave Brolley <brolley@redhat.com> | 2009-03-16 12:15:24 -0400 |
---|---|---|
committer | Dave Brolley <brolley@redhat.com> | 2009-03-16 12:15:24 -0400 |
commit | 24068a1f2e17857f4ce096a17244d09575a199c1 (patch) | |
tree | b00dd1b858b19cc21a440d734e44ebe14d080d5a /testsuite/systemtap.base | |
parent | 5bc7237f1c7bdb0eb850752c9611f94d009feff0 (diff) | |
parent | 2497c78e8aa704366683dad56fc8d749a5e92f52 (diff) | |
download | systemtap-steved-24068a1f2e17857f4ce096a17244d09575a199c1.tar.gz systemtap-steved-24068a1f2e17857f4ce096a17244d09575a199c1.tar.xz systemtap-steved-24068a1f2e17857f4ce096a17244d09575a199c1.zip |
Merge branch 'master' of git://sources.redhat.com/git/systemtap
Conflicts:
Makefile.in
main.cxx
stap-find-servers
stap-start-server
Diffstat (limited to 'testsuite/systemtap.base')
-rw-r--r-- | testsuite/systemtap.base/cast.exp | 4 | ||||
-rw-r--r-- | testsuite/systemtap.base/cast.stp | 22 | ||||
-rw-r--r-- | testsuite/systemtap.base/ctime.exp | 3 | ||||
-rw-r--r-- | testsuite/systemtap.base/labels.exp | 86 | ||||
-rw-r--r-- | testsuite/systemtap.base/limits.exp | 3 | ||||
-rw-r--r-- | testsuite/systemtap.base/overflow_error.exp | 32 | ||||
-rw-r--r-- | testsuite/systemtap.base/overflow_error.stp | 22 | ||||
-rw-r--r-- | testsuite/systemtap.base/sdt.c | 71 | ||||
-rw-r--r-- | testsuite/systemtap.base/sdt.exp | 64 | ||||
-rw-r--r-- | testsuite/systemtap.base/sdt.stp | 49 | ||||
-rw-r--r-- | testsuite/systemtap.base/stmt_rel.exp | 3 | ||||
-rw-r--r-- | testsuite/systemtap.base/tracepoints.exp | 3 | ||||
-rw-r--r-- | testsuite/systemtap.base/tracepoints.stp | 23 |
13 files changed, 376 insertions, 9 deletions
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/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/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++ } |