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
|
set test_name "process_by_pid"
if {! [installtest_p]} {
untested $test_name
return
}
# building the test program
set compile_result [target_compile $srcdir/$subdir/$test_name.c ./$test_name executable "additional_flags=-g [sdt_includes]"]
proc sleep_twenty_secs {} {
wait_n_secs 20;
return 0;
}
# expected output
set output_string "pass\r\n"
# running multiple instances of the test program
# the idea behind this is that in the stap script, it will check the pid it is
# probing against the one that we told it to probe. if all goes well, then we
# know that process(PID).* probes will probe processes based on their PID and
# not the program it is runnning.
set pid1 [exec ./$test_name &]
set pid2 [exec ./$test_name &]
set pid3 [exec ./$test_name &]
# There are two different versions of the test script. One for
# platforms that support .plt probes (process_by_pid.stp) and one for
# platforms that don't support .plt probes
# (process_by_pid_no_plt.stp).
if {[plt_probes_p]} {
set test_script "${test_name}.stp"
} else {
set test_script "${test_name}_no_plt.stp"
}
# running the script
foreach runtime [get_runtime_list] {
verbose -log "starting the stap script"
if {$runtime != ""} {
if {$runtime == "dyninst"} {
# PR17352 (dyninst: process probes require a target -c/-x)
setup_kfail 17352 "*-*-*"
}
set cur_test_name "$test_name ($runtime)"
stap_run $cur_test_name sleep_twenty_secs $output_string --runtime=$runtime $srcdir/$subdir/${test_script} $pid2
} elseif {[uprobes_p]} {
stap_run $test_name sleep_twenty_secs $output_string $srcdir/$subdir/${test_script} $pid2
} else {
untested $test_name
continue
}
}
# kill all the instances of the test program.
kill -INT $pid1 2
kill -INT $pid2 2
kill -INT $pid3 2
# remove the executable
exec rm -f ./$test_name
|