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
|
global stack2pp, stack2func, stack3pp, stack3func
global wildcardpp, wild_count
probe kernel.statement("bio_init@fs/bio.c+2") {
# stack2 = tokenize(backtrace(), " ")
stack2func = probefunc()
stack2pp = pp()
}
probe kernel.statement("bio_init@fs/bio.c+3") {
# stack3 = tokenize(backtrace(), " " )
stack3func = probefunc()
stack3pp = pp()
}
probe kernel.statement("bio_put@fs/bio.c:*") {
line = tokenize(pp(),":")
line = tokenize("",":")
line = substr(line,0,strlen(line)-2)
wildcardpp[strtol(line,10)]++
if (wild_count++ <= 10) {
next
}
stack2pp = tokenize(stack2pp,":")
stack2pp = tokenize("",":")
stack3pp = tokenize(stack3pp,":")
stack3pp = tokenize("",":")
stack2line = strtol (substr(stack2pp,0,strlen(stack2pp)-2), 10)
stack3line = strtol (substr(stack3pp,0,strlen(stack3pp)-2), 10)
# Did functions for both bio_init probes match?
if (stack2func == stack3func) {
printf ("PASS %s\n", stack2func)
}
else {
printf ("FAIL %s %s\n", stack2func, stack3func)
}
# Was line # for bio_init probe +2 < line # for bio_init probe +3?
if ((stack2line + 1) == stack3line) {
printf ("PASS line number\n")
}
else {
printf ("FAIL line number %d %d\n", stack2line, stack3line)
}
# This test does not take optimized code into account
# Was address for bio_init probe +2 < address for bio_init probe +3?
# if (stack2 < stack3) {
# printf ("PASS address\n")
# }
# else {
# printf ("FAIL address %s %s\n", stack2, stack3)
# }
# Did wildcard probe hit at least 4 different statements?
foreach ([i] in wildcardpp) {
statement_count += 1
}
if (statement_count >= 4) {
printf ("PASS wildcard\n")
}
else
{
printf ("FAIL wildcard %d\n", statement_count)
}
exit()
}
|