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
|
set test "process-begin-user"
set testpath "$srcdir/$subdir"
if {! [installtest_p]} { untested $test; return }
if {! [uretprobes_p]} { untested $test; return }
# --- TEST 1 ---
set subtest1 "TEST 1: register() in probe process.begin"
set res [target_compile ${testpath}/${test}_1.c ./a.out executable \
"additional_flags=-O additional_flags=-g"]
if {$res ne ""} {
verbose "target_compile failed: $res" 2
fail "$test: $subtest1: unable to compile ${test}_1.c"
} else {
if {! [process_template_file "$srcdir/$subdir/${test}_1.stp" \
"./${test}_1.stp" "./a.out" nm_err]} {
fail "$test: $subtest1: $nm_err"
} else {
foreach runtime [get_runtime_list] {
if {$runtime eq ""} {
set runtime "kernel"
}
set test_name "$test: $subtest1 ($runtime)"
set cmd "stap --runtime=$runtime -c ./a.out './${test}_1.stp'"
set exit_code [run_cmd_2way $cmd out stderr]
set out_pat "\\Arip: 0x\[1-9a-f\]\[0-9a-f\]*\\nsame uaddr\\n\\Z"
like "${test_name}: stdout" $out $out_pat "-lineanchor"
is "${test_name}: exit code" $exit_code 0
if {$stderr ne ""} {
send_log "stderr:\n$stderr"
}
}
}
}
# --- TEST 2 ---
set subtest2 "TEST 2: register() in probe process.end"
# NB This test case is expected to fail on CentOS 6 on which registers are
# actually usable in the prcoess.end probe.
set res [target_compile ${testpath}/${test}_1.c ./a.out executable \
"additional_flags=-O additional_flags=-g"]
if {$res ne ""} {
verbose "target_compile failed: $res" 2
fail "$test: $subtest2: unable to compile ${test}_1.c"
} else {
if {! [process_template_file "$srcdir/$subdir/${test}_2.stp" \
"./${test}_2.stp" "./a.out" nm_err]} {
fail "$test: $subtest2: $nm_err"
} else {
foreach runtime [get_runtime_list] {
if {$runtime eq ""} {
set runtime "kernel"
}
set test_name "$test: $subtest2 ($runtime)"
set cmd "stap --runtime=$runtime -c ./a.out './${test}_2.stp'"
set exit_code [run_cmd_2way $cmd out stderr]
set exp_out ""
is "${test_name}: stdout" $out $exp_out
isnt "${test_name}: exit code" $exit_code 0
set stderr_pat "ERROR: cannot access CPU registers in this context"
like "${test_name}: stderr" $stderr $stderr_pat "-linestop"
}
}
}
# --- TEST 3 ---
set subtest3 "TEST 3: @var() in probe process(PATH).begin (with vma tracker)"
set res [target_compile ${testpath}/${test}_3.c ./a.out executable \
"additional_flags=-O additional_flags=-g additional_flags=-pie additional_flags=-fpic"]
if {$res ne ""} {
verbose "target_compile failed: $res" 2
fail "$test: $subtest3: unable to compile ${test}_3.c"
} else {
if {! [process_template_file "$srcdir/$subdir/${test}_3.stp" \
"./${test}_3.stp" "./a.out" nm_err]} {
fail "$test: $subtest3: $nm_err"
} else {
foreach runtime [get_runtime_list] {
if {$runtime eq ""} {
set runtime "kernel"
}
set test_name "$test: $subtest3 ($runtime)"
set cmd "stap --runtime=$runtime -c ./a.out './${test}_3.stp'"
set exit_code [run_cmd_2way $cmd out stderr]
set exp_out "a: 32\n"
is "${test_name}: stdout" $out $exp_out
is "${test_name}: exit code" $exit_code 0
if {$stderr ne ""} {
send_log "stderr:\n$stderr"
}
}
}
}
# --- TEST 4 ---
set subtest4 "TEST 4: @var() in probe process.begin (with vma tracker)"
set res [target_compile ${testpath}/${test}_3.c ./a.out executable \
"additional_flags=-O additional_flags=-g additional_flags=-pie additional_flags=-fpic"]
if {$res ne ""} {
verbose "target_compile failed: $res" 2
fail "$test: $subtest4: unable to compile ${test}_3.c"
} else {
if {! [process_template_file "$srcdir/$subdir/${test}_4.stp" \
"./${test}_4.stp" "./a.out" nm_err]} {
fail "$test: $subtest4: $nm_err"
} else {
foreach runtime [get_runtime_list] {
if {$runtime eq ""} {
set runtime "kernel"
}
set test_name "$test: $subtest4 ($runtime)"
set cmd "stap --runtime=$runtime -c ./a.out './${test}_4.stp'"
set exit_code [run_cmd_2way $cmd out stderr]
set exp_out "a: 32\n"
is "${test_name}: stdout" $out $exp_out
is "${test_name}: exit code" $exit_code 0
if {$stderr ne ""} {
send_log "stderr:\n$stderr"
}
}
}
}
|