summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.base
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/systemtap.base')
-rw-r--r--testsuite/systemtap.base/kretprobe-vars.exp4
-rw-r--r--testsuite/systemtap.base/kretprobe-vars.stp70
2 files changed, 74 insertions, 0 deletions
diff --git a/testsuite/systemtap.base/kretprobe-vars.exp b/testsuite/systemtap.base/kretprobe-vars.exp
new file mode 100644
index 00000000..5955b64f
--- /dev/null
+++ b/testsuite/systemtap.base/kretprobe-vars.exp
@@ -0,0 +1,4 @@
+# Check that implicitly-saved $target variables have the same
+# value as those manually saved on entry.
+set test "kretprobe-vars"
+stap_run $srcdir/$subdir/$test.stp no_load $all_pass_string -c "cat /dev/null"
diff --git a/testsuite/systemtap.base/kretprobe-vars.stp b/testsuite/systemtap.base/kretprobe-vars.stp
new file mode 100644
index 00000000..b932e202
--- /dev/null
+++ b/testsuite/systemtap.base/kretprobe-vars.stp
@@ -0,0 +1,70 @@
+# Check that implicitly-saved $target variables have the same
+# value as those manually saved on entry.
+
+
+# saved individual parameters
+global read_file
+global read_file_mode
+global read_buf
+global read_count
+global read_pos
+
+# the saved string $$parms
+global read_parms
+
+# error count
+global errors
+
+probe begin
+{
+ println("systemtap starting probe")
+}
+
+function check_num(name, ent, ret)
+{
+ if (ent != ret) {
+ printf("%s mismatch, entry:%#x vs. return:%#x\n", name, ent, ret)
+ errors++
+ }
+}
+function check_str(name, ent, ret)
+{
+ if (ent != ret) {
+ printf("%s mismatch, entry:'%s' vs. return:'%s'\n", name, ent, ret)
+ errors++
+ }
+}
+
+probe kernel.function("vfs_read").call
+{
+ if (tid() != target())
+ next
+
+ read_file = $file
+ read_file_mode = $file->f_mode
+ read_buf = $buf
+ read_count = $count
+ read_pos = $pos
+
+ read_parms = $$parms
+}
+
+probe kernel.function("vfs_read").return
+{
+ if (tid() != target())
+ next
+
+ println("systemtap ending probe")
+
+ check_num("file", read_file, $file)
+ check_num("file->f_mode", read_file_mode, $file->f_mode)
+ check_num("buf", read_buf, $buf)
+ check_num("count", read_count, $count)
+ check_num("pos", read_pos, $pos)
+
+ check_str("parms", read_parms, $$parms)
+
+ if (!errors)
+ println("systemtap test success")
+ exit()
+}