# itrace test # Initialize variables set exepath "[pwd]/ls_[pid]" set itrace1_script { global instrs = 0 probe begin { printf("systemtap starting probe\n") } probe process("%s").insn { instrs += 1 if (instrs == 5) exit() } probe end { printf("systemtap ending probe\n") printf("itraced = %%d\n", instrs) } } set itrace1_script_output "itraced = 5\r\n" set itrace2_script { global instrs = 0, itrace_on = 0, start_timer = 0 probe begin { start_timer = 1; printf("systemtap starting probe\n") } probe process("%s").insn if (itrace_on) { instrs += 1 if (instrs == 5) exit() } probe timer.ms(1) if (start_timer) { itrace_on = 1 } probe timer.ms(10) if (start_timer) { itrace_on = 0 } probe end { printf("systemtap ending probe\n") printf("itraced = %%d\n", instrs) } } set itrace2_script_output "itraced = 5\r\n" set itrace3_script { global branches = 0 probe begin { printf("systemtap starting probe\n") } probe process("%s").insn.block { branches += 1 if (branches == 5) exit() } probe end { printf("systemtap ending probe\n") printf("itraced block mode = %%d\n", branches) } } set itrace3_script_output "itraced block mode = 5\r\n" # Set up our own copy of /bin/ls, 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/ls is being # exec'ed (instead of our local copy). if {[catch {exec cp /bin/ls $exepath} res]} { fail "unable to copy /bin/ls: $res" return } # "load" generation function for stap_run. It spawns our own copy of # /bin/ls, waits 5 seconds, then kills it. proc run_ls_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 "itrace1" if {![utrace_p]} { untested "$TEST_NAME : no kernel utrace support found" } elseif {![installtest_p]} { untested $TEST_NAME } else { set script [format $itrace1_script $exepath] stap_run $TEST_NAME run_ls_5_sec $itrace1_script_output -e $script } set TEST_NAME "itrace2" if {![utrace_p]} { untested "$TEST_NAME : no kernel utrace support found" } elseif {![installtest_p]} { untested $TEST_NAME } else { set script [format $itrace2_script $exepath] stap_run $TEST_NAME run_ls_5_sec $itrace2_script_output -e $script } set TEST_NAME "itrace3" if {![utrace_p]} { untested "$TEST_NAME : no kernel utrace support found" } elseif {![installtest_p]} { untested $TEST_NAME } else { send_log "ATTENTION: if arch_has_block_step is not defined for this arch, this testcase will fail\n" set script [format $itrace3_script $exepath] stap_run $TEST_NAME run_ls_5_sec $itrace3_script_output -e $script } # Cleanup exec rm -f $exepath