blob: 327ce9ed7494a09f9b2e149b19b6fd51257b9c37 (
plain)
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# Test cases for procfs probes
set test "PROCFS"
if {![installtest_p]} { untested $test; return }
proc proc_read_value { test path} {
set value "<unknown>"
if [catch {open $path RDONLY} channel] {
fail "$test $channel"
} else {
set value [read -nonewline $channel]
close $channel
pass "$test read $value"
}
return $value
}
proc proc_write_value { test path value} {
if [catch {open $path WRONLY} channel] {
fail "$test $channel"
} else {
puts $channel $value
close $channel
pass "$test wrote $value"
}
}
proc proc_read_write {} {
global test
set path "/proc/systemtap/$test/command"
# read the initial value, which should be '100'
set value [proc_read_value $test $path]
if { $value == "100" } {
pass "$test received correct initial value"
} else {
fail "$test received incorrect initial value: $value"
}
# write a new value of '200'
proc_write_value $test $path "200"
# make sure it got set to '200'
set value [proc_read_value $test $path]
if { $value == "200" } {
pass "$test received correct value"
} else {
fail "$test received incorrect value: $value"
}
# read it again to make sure nothing changed
set value [proc_read_value $test $path]
if { $value == "200" } {
pass "$test received correct value"
} else {
fail "$test received incorrect value: $value"
}
# write a new value of 'hello'
proc_write_value $test $path "hello"
# make sure it got set to 'hello'
set value [proc_read_value $test $path]
if { $value == "hello" } {
pass "$test received correct value"
} else {
fail "$test received incorrect value: $value"
}
# write a new value of 'goodbye'
proc_write_value $test $path "goodbye"
# make sure it got set to 'goodbye'
set value [proc_read_value $test $path]
if { $value == "goodbye" } {
pass "$test received correct value"
} else {
fail "$test received incorrect value: $value"
}
return 0;
}
# The script starts with a value of "100". If the user writes into
# /proc/systemtap/MODNAME/command, that value is returned by the next
# read.
set systemtap_script {
global saved_value
probe procfs("command").read {
$value = saved_value
}
probe procfs("command").write {
saved_value = $value
}
probe begin {
saved_value = "100\n"
printf("systemtap starting probe\n")
}
probe end {
printf("systemtap ending probe\n")
printf("final value = %s", saved_value)
}
}
# test procfs probes
set output_string "\\mfinal value = goodbye\\M\r\n"
stap_run $test proc_read_write $output_string -e $systemtap_script -m $test
exec /bin/rm -f ${test}.ko
|