File: kretprobe-vars.stp

package info (click to toggle)
systemtap 5.1-5
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 47,964 kB
  • sloc: cpp: 80,838; ansic: 54,757; xml: 49,725; exp: 43,665; sh: 11,527; python: 5,003; perl: 2,252; tcl: 1,312; makefile: 1,006; javascript: 149; lisp: 105; awk: 101; asm: 91; java: 70; sed: 16
file content (70 lines) | stat: -rw-r--r-- 1,296 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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()
}