blob: cbb867d1e2f4950d7b3bd379c6fa32e85c600a8c (
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
# Utrace run (pass 5) tests.
# Initialize variables
set utrace_support_found 0
set exepath "[pwd]/cat_[pid]"
set death_script {
global death_probes_fired = 0
probe begin { printf("systemtap starting probe\n") }
probe process("%s").death { death_probes_fired++ }
probe end { printf("systemtap ending probe\n")
printf("deaths = %%d\n", death_probes_fired) }
}
set death_script_output "deaths = 1\r\n"
set exec_script {
global exec_probes_fired = 0
probe begin { printf("systemtap starting probe\n") }
probe process("%s").exec { exec_probes_fired++ }
probe end { printf("systemtap ending probe\n")
printf("execs = %%d\n", exec_probes_fired) }
}
set exec_script_output "execs = 1\r\n"
set syscall_script {
global syscall_probes_fired = 0
probe begin { printf("systemtap starting probe\n") }
probe process("%s").syscall { syscall_probes_fired++ }
probe end { printf("systemtap ending probe\n")
if (syscall_probes_fired > 0) {
printf("syscalls = %%d\n", syscall_probes_fired)
}
}
}
set syscall_script_output "syscalls = \\d+\r\n"
set syscall_return_script {
global syscall_return_probes_fired = 0
probe begin { printf("systemtap starting probe\n") }
probe process("%s").syscall.return { syscall_return_probes_fired++ }
probe end { printf("systemtap ending probe\n")
if (syscall_return_probes_fired > 0) {
printf("syscall_returns = %%d\n", syscall_return_probes_fired)
}
}
}
set syscall_return_script_output "syscall_returns = \\d+\r\n"
set clone_script {
global clone_probes_fired = 0
probe begin { printf("systemtap starting probe\n") }
probe process(%d).clone { clone_probes_fired++ }
probe end { printf("systemtap ending probe\n")
if (clone_probes_fired > 0) {
printf("clones = %%d\n", clone_probes_fired)
}
}
}
set clone_script_output "clones = \\d+\r\n"
# Try to find utrace_attach symbol in /proc/kallsyms
set path "/proc/kallsyms"
if {! [catch {exec grep -q utrace_attach $path} dummy]} {
set utrace_support_found 1
}
# Set up our own copy of /bin/cat, to make testing for a particular
# executable easy. We can't use 'ln' here, since we might be creating
# a cross-device link. We can't use 'ln -s' here, since the kernel
# resolves the symbolic link and reports that /bin/cat is being
# exec'ed (instead of our local copy).
if {[catch {exec cp /bin/cat $exepath} res]} {
fail "unable to copy /bin/cat: $res"
return
}
# "load" generation function for stap_run. It spawns our own copy of
# /bin/cat, waits 5 seconds, then kills it.
proc run_cat_5_sec {} {
global exepath
spawn $exepath
set exe_id $spawn_id
after 5000;
exec kill -INT -[exp_pid -i $exe_id]
return 0;
}
set TEST_NAME "UTRACE_P5_01"
if {$utrace_support_found == 0} {
untested "$TEST_NAME : no kernel utrace support found"
} elseif {![installtest_p]} {
untested "$TEST_NAME"
} else {
set script [format $death_script $exepath]
stap_run $TEST_NAME run_cat_5_sec $death_script_output -e $script
}
set TEST_NAME "UTRACE_P5_02"
if {$utrace_support_found == 0} {
untested "$TEST_NAME : no kernel utrace support found"
} elseif {![installtest_p]} {
untested "$TEST_NAME"
} else {
set script [format $exec_script $exepath]
stap_run $TEST_NAME run_cat_5_sec $exec_script_output -e $script
}
set TEST_NAME "UTRACE_P5_03"
if {$utrace_support_found == 0} {
untested "$TEST_NAME : no kernel utrace support found"
} elseif {![installtest_p]} {
untested "$TEST_NAME"
} else {
set script [format $syscall_script $exepath]
stap_run $TEST_NAME run_cat_5_sec $syscall_script_output -e $script
}
set TEST_NAME "UTRACE_P5_04"
if {$utrace_support_found == 0} {
untested "$TEST_NAME : no kernel utrace support found"
} elseif {![installtest_p]} {
untested "$TEST_NAME"
} else {
set script [format $syscall_return_script $exepath]
stap_run $TEST_NAME run_cat_5_sec $syscall_return_script_output -e $script
}
set TEST_NAME "UTRACE_P5_05"
if {$utrace_support_found == 0} {
untested "$TEST_NAME : no kernel utrace support found"
} elseif {![installtest_p]} {
untested "$TEST_NAME"
} else {
set script [format $clone_script [pid]]
stap_run $TEST_NAME run_cat_5_sec $clone_script_output -e $script
}
# Cleanup
exec rm -f $exepath
|