summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.base/uprobes_ustack.exp
blob: f085fc166a4f3717444fa9dce98e2034e94fda39 (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
set test "uprobes_ustack"
set testpath "$srcdir/$subdir"
set testsrc  "$testpath/uprobes_exe.c"
set testsrclib  "$testpath/uprobes_lib.c"
set testexe  "./uprobes_exe"
set testlibname  "uprobes_lib"
set testlibdir "."
set testso  "$testlibdir/lib${testlibname}.so"
set testflags "additional_flags=-g additional_flags=-O"
set testlibflags "$testflags additional_flags=-fPIC additional_flags=-shared"
set maintestflags "$testflags additional_flags=-L$testlibdir additional_flags=-l$testlibname additional_flags=-Wl,-rpath,$testlibdir"

# Compile our test program and library.
set res [target_compile $testsrclib $testso executable $testlibflags]
if { $res != "" } {
    verbose "target_compile for $testso failed: $res" 2
    fail "$test compile $testsrclib"
    return
} else {
    pass "$test compile $testsrclib"
}

set res [target_compile $testsrc $testexe executable $maintestflags]
if { $res != "" } {
    verbose "target_compile failed: $res" 2
    fail "$test compile $testsrc"
    return
} else {
    pass "$test compile $testsrc"
}

set ::result_string {exe: main=main
exe: main_func=main_func
exe: main_func=main_func
exe: main_func=main_func
lib: lib_main=lib_main
lib: lib_func=lib_func
lib: lib_func=lib_func
lib: lib_func=lib_func}

# Only run on make installcheck
if {! [installtest_p]} { untested "$test"; return }
if {! [utrace_p]} { untested $test; return }

# Output is:
#print_ubacktrace exe 0
# 0x080484ba : main_func+0xa/0x29 [.../uprobes_exe]
# 0x080484f6 : main+0x1d/0x37 [.../uprobes_exe]
#print_ustack exe 1
# 0x080484ba : main_func+0xa/0x29 [.../uprobes_exe]
# 0x080484c9 : main_func+0x19/0x29 [.../uprobes_exe]
# 0x080484f6 : main+0x1d/0x37 [.../uprobes_exe]
#print_ubacktrace lib 2
# 0x00db2422 : lib_func+0x16/0x2b [.../libuprobes_lib.so]
# 0x00db2455 : lib_main+0x1e/0x29 [.../libuprobes_lib.so]
# 0x080484d0 : main_func+0x20/0x29 [.../uprobes_exe]
# 0x080484c9 : main_func+0x19/0x29 [.../uprobes_exe]
# 0x080484c9 : main_func+0x19/0x29 [.../uprobes_exe]
# 0x080484f6 : main+0x1d/0x37 [.../uprobes_exe]
#print_ustack lib 3
# 0x00db2422 : lib_func+0x16/0x2b [.../libuprobes_lib.so]
# 0x00db2431 : lib_func+0x25/0x2b [.../libuprobes_lib.so]
# 0x00db2455 : lib_main+0x1e/0x29 [.../libuprobes_lib.so]
# 0x080484d0 : main_func+0x20/0x29 [.../uprobes_exe]
# 0x080484c9 : main_func+0x19/0x29 [.../uprobes_exe]
# 0x080484c9 : main_func+0x19/0x29 [.../uprobes_exe]
# 0x080484f6 : main+0x1d/0x37 [.../uprobes_exe]

set print 0
set main 0
set main_func 0
set lib_main 0
set lib_func 0
spawn stap $srcdir/$subdir/$test.stp -c $testexe

wait
expect {
  -timeout 60
  -re {^print_[^\r\n]+\r\n} {incr print; exp_continue}
  -re {^ 0x[a-f0-9]+ : main\+0x[^\r\n]+\r\n} {incr main; exp_continue}
  -re {^ 0x[a-f0-9]+ : main_func\+0x[^\r\n]+\r\n} {incr main_func; exp_continue}
  -re {^ 0x[a-f0-9]+ : lib_main\+0x[^\r\n]+\r\n} {incr lib_main; exp_continue}
  -re {^ 0x[a-f0-9]+ : lib_func\+0x[^\r\n]+\r\n} {incr lib_func; exp_continue}
  timeout { fail "$test (timeout)" }
  eof { }
}

if {$print == 4} {pass "$test print"} {fail "$test print ($print)"}
if {$main == 4} {pass "$test main"} {fail "$test main ($main)"}
if {$main_func == 9} {pass "$test main_func"} {fail "$test main_func ($main_func)"}
if {$lib_main == 2} {pass "$test lib_main"} {fail "$test lib_main ($lib_main)"}
if {$lib_func == 3} {pass "$test lib_func"} {fail "$test lib_func ($lib_func)"}

#exec rm -f $testexe $testso