summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhiramatu <hiramatu>2007-09-12 16:48:00 +0000
committerhiramatu <hiramatu>2007-09-12 16:48:00 +0000
commitcf9be511f05d0b310b2c4ce4c050d3707be9e65a (patch)
tree66ca48f389da6fd0ad2ce64341b8ca0d5a62fb09
parent737f98f027f838e976afae7b3586e1806e4ed26e (diff)
downloadsystemtap-steved-cf9be511f05d0b310b2c4ce4c050d3707be9e65a.tar.gz
systemtap-steved-cf9be511f05d0b310b2c4ce4c050d3707be9e65a.tar.xz
systemtap-steved-cf9be511f05d0b310b2c4ce4c050d3707be9e65a.zip
2007-09-12 Masami Hiramatsu <mhiramat@redhat.com>
PR 4633 * systemtap.context/backtrace.stp: Add testcases for the return probe and the profile probe. * systemtap.context/backtrace.tcl: Ditto. * /systemtap.context/systemtap_test_module2.c: Ditto.
-rw-r--r--testsuite/ChangeLog8
-rw-r--r--testsuite/systemtap.context/backtrace.stp21
-rw-r--r--testsuite/systemtap.context/backtrace.tcl92
-rw-r--r--testsuite/systemtap.context/systemtap_test_module2.c4
4 files changed, 116 insertions, 9 deletions
diff --git a/testsuite/ChangeLog b/testsuite/ChangeLog
index a5c84ed0..8d44386e 100644
--- a/testsuite/ChangeLog
+++ b/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2007-09-12 Masami Hiramatsu <mhiramat@redhat.com>
+
+ PR 4633
+ * systemtap.context/backtrace.stp: Add testcases for the return
+ probe and the profile probe.
+ * systemtap.context/backtrace.tcl: Ditto.
+ * /systemtap.context/systemtap_test_module2.c: Ditto.
+
2007-09-12 Frank Ch. Eigler <fche@elastic.org>
PR 5023.
diff --git a/testsuite/systemtap.context/backtrace.stp b/testsuite/systemtap.context/backtrace.stp
index 8f02c174..73781371 100644
--- a/testsuite/systemtap.context/backtrace.stp
+++ b/testsuite/systemtap.context/backtrace.stp
@@ -1,9 +1,9 @@
-function print_all_trace_info() {
+function print_all_trace_info(point:string) {
printf("backtrace from %s:\n", pp())
print_backtrace()
print("--------\n")
bt = backtrace()
- printf("the stack is %s\n", bt)
+ printf("the %s stack is %s\n", point, bt)
print("--------\n")
print_stack(bt);
print("--------\n")
@@ -17,8 +17,19 @@ probe end {
print_backtrace()
}
-probe module("systemtap_test_module2").function("yyy_func3") {
- print_all_trace_info()
+global flag = 0
+probe module("systemtap_test_module2").function("yyy_func3").call {
+ print_all_trace_info("call")
+ flag ++
+}
+probe module("systemtap_test_module2").function("yyy_func4").return {
+ print_all_trace_info("return")
+ flag ++
+}
+probe timer.profile {
+ if (cpu() == 0 && flag == 2 && probemod() != "systemtap_test_module2") {
+ print_all_trace_info("profile")
+ flag ++
+ }
}
-
diff --git a/testsuite/systemtap.context/backtrace.tcl b/testsuite/systemtap.context/backtrace.tcl
index 98a765a2..8d63604d 100644
--- a/testsuite/systemtap.context/backtrace.tcl
+++ b/testsuite/systemtap.context/backtrace.tcl
@@ -1,5 +1,9 @@
set m1 0
set m2 0
+set m3 0
+set m4 0
+set m5 0
+set m6 0
spawn stap backtrace.stp
#exp_internal 1
@@ -28,11 +32,11 @@ expect {
}
exp_continue
}
- -re {.*---\r\nthe stack is 0x[a-f0-9]+ [^\r\n]+\r\n} {
+ -re {.*---\r\nthe call stack is 0x[a-f0-9]+ [^\r\n]+\r\n} {
incr m2
expect {
-timeout 5
- -re {.*0x[a-f0-9]+ : yyy_func3[^\[]+\[systemtap_test_module2\]\r\n} {
+ -re {.*---\r\n 0x[a-f0-9]+ : yyy_func3[^\[]+\[systemtap_test_module2\]\r\n} {
if {$m2 == 1} {incr m2}
exp_continue
}
@@ -44,20 +48,100 @@ expect {
if {$m2 == 3} {incr m2}
}
}
+ exp_continue
+ }
+ -re {.*backtrace from module\(\"systemtap_test_module2\"\)\.function\(\"yyy_func4@[^\r\n]+\r\n} {
+ incr m3
+ expect {
+ -timeout 5
+ -re {^Returning from: 0x[a-f0-9]+ : yyy_func4[^\[]+\[systemtap_test_module2\]\r\n} {
+ if {$m3 == 1} {incr m3}
+ exp_continue
+ }
+ -re {^Returning to : 0x[a-f0-9]+ : yyy_func3[^\[]+\[systemtap_test_module2\]\r\n} {
+ if {$m3 == 2} {incr m3}
+ exp_continue
+ }
+ -re {^ 0x[a-f0-9]+ : yyy_func2[^\[]+\[systemtap_test_module2\]\r\n} {
+ if {$m3 == 3} {incr m3}
+ exp_continue
+ }
+ -re {^ 0x[a-f0-9]+ : yyy_func1[^\[]+\[systemtap_test_module2\]\r\n} {
+ if {$m3 == 4} {incr m3}
+ }
+ }
+ exp_continue
+ }
+ -re {.*---\r\nthe return stack is 0x[a-f0-9]+ [^\r\n]+\r\n} {
+ incr m4
+ expect {
+ -timeout 5
+ -re {.*0x[a-f0-9]+ : kretprobe_trampoline_holder[^\[]+\[\]\r\n} {
+ if {$m4 == 1} {incr m4}
+ exp_continue
+ }
+ -re {^ 0x[a-f0-9]+ : yyy_func2[^\[]+\[systemtap_test_module2\]\r\n} {
+ if {$m4 == 2} {incr m4}
+ exp_continue
+ }
+ -re {^ 0x[a-f0-9]+ : yyy_func1[^\[]+\[systemtap_test_module2\]\r\n} {
+ if {$m4 == 3} {incr m4}
+ }
+ }
+ exp_continue
+ }
+ -re {.*backtrace from timer.profile:\r\n} {
+ incr m5
+ expect {
+ -timeout 5
+ -re {^ 0x[a-f0-9]+ : [^\r\n]+\r\n 0x[a-f0-9]+ : [^\r\n]+\r\n} {
+ if {$m5 == 1} {incr m5}
+ }
+ }
+ exp_continue
+ }
+ -re {.*---\r\nthe profile stack is 0x[a-f0-9]+ [^\r\n]+\r\n} {
+ incr m6
+ expect {
+ -timeout 5
+ -re {.*---\r\n 0x[a-f0-9]+ : [^\r\n]+\r\n 0x[a-f0-9]+ : [^\r\n]+\r\n} {
+ if {$m6 == 1} {incr m6}
+ }
+ }
}
- eof {fail "backtrace of yyy_func3. unexpected EOF" }
+ eof {fail "backtrace of yyy_func3, yyy_func4.return and timer.profile. unexpected EOF" }
}
send "\003"
if {$m1 == 4} {
pass "backtrace of yyy_func3"
} else {
- fail "backtrace of yyy_func3"
+ fail "backtrace of yyy_func3 ($m1)"
}
if {$m2 == 4} {
pass "print_stack of yyy_func3"
} else {
fail "print_stack of yyy_func3 ($m2)"
}
+if {$m3 == 5} {
+ pass "backtrace of yyy_func4.return"
+} else {
+ fail "backtrace of yyy_func4.return ($m3)"
+}
+if {$m4 == 4} {
+ pass "print_stack of yyy_func4.return"
+} else {
+ fail "print_stack of yyy_func4.return ($m4)"
+}
+if {$m5 == 2} {
+ pass "backtrace of timer.profile"
+} else {
+ fail "backtrace of timer.profile ($m5)"
+}
+if {$m6 == 2} {
+ pass "print_stack of timer.profile"
+} else {
+ fail "print_stack of timer.profile ($m6)"
+}
close
wait
diff --git a/testsuite/systemtap.context/systemtap_test_module2.c b/testsuite/systemtap.context/systemtap_test_module2.c
index 35a28efb..51cb58bb 100644
--- a/testsuite/systemtap.context/systemtap_test_module2.c
+++ b/testsuite/systemtap.context/systemtap_test_module2.c
@@ -21,7 +21,11 @@
/** Here are all the functions we will probe **/
/* some nested functions to test backtraces */
+int noinline yyy_func4 (int foo) {
+ return foo + 1;
+}
int noinline yyy_func3 (int foo) {
+ foo = yyy_func4(foo);
return foo + 1;
}
int noinline yyy_func2 (int foo) {