diff options
Diffstat (limited to 'stap_tutorial-1.0/examples/cmd-eval/cmd-eval-opens.stp')
-rwxr-xr-x | stap_tutorial-1.0/examples/cmd-eval/cmd-eval-opens.stp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/stap_tutorial-1.0/examples/cmd-eval/cmd-eval-opens.stp b/stap_tutorial-1.0/examples/cmd-eval/cmd-eval-opens.stp new file mode 100755 index 0000000..a040059 --- /dev/null +++ b/stap_tutorial-1.0/examples/cmd-eval/cmd-eval-opens.stp @@ -0,0 +1,73 @@ +#!/usr/bin/env stap + +global target_pids, target_execs +global opens_by_file_success, opens_by_exec_success, total_opens_success +global opens_by_file_fail, opens_by_exec_fail, total_opens_fail +global closes_by_exec, total_closes +global open_failure_by_type + +probe process.exec_complete { + if (success && (ppid() in target_pids || pid() == target())) { + target_pids[pid()] = kernel_string($filename) + target_execs[kernel_string($filename)] ++ + } +} + +probe syscall.open.return { + if (!(pid() in target_pids)) next + + if ($return >= 0) { + opens_by_exec_success[target_pids[pid()]] ++ + opens_by_file_success[user_string($filename)] ++ + total_opens_success ++ + } else { + opens_by_exec_fail[target_pids[pid()]] ++ + opens_by_file_fail[user_string($filename)] ++ + open_failure_by_type[retstr] ++ + total_opens_fail ++ + } +} + +probe syscall.close { + if (!(pid() in target_pids)) next + + closes_by_exec[target_pids[pid()]] ++ + total_closes ++ +} + +probe end { + prt_limit = 10 + + printf ("Total opens: %d (%d succeeded, %d failed)\n", + total_opens_success + total_opens_fail, + total_opens_success, total_opens_fail) + printf ("Total closes: %d\n\n", total_closes) + + printf ("# Binary Instances:\n") + foreach(name in target_execs) + printf("%d\t%s\n", target_execs[name], name) + + printf("\n# Successful Opens by Binary:\n") + foreach (name in opens_by_exec_success-) + printf("%d\t%s\n", opens_by_exec_success[name], name) + + printf("\n# Failed Opens by Binary:\n") + foreach (name in opens_by_exec_fail-) + printf("%d\t%s\n", opens_by_exec_fail[name], name) + + printf("\n# Successful Opens by File (top %d):\n", prt_limit) + foreach (name in opens_by_file_success- limit prt_limit) + printf("%d\t%s\n", opens_by_file_success[name], name) + + printf("\n# Failed Opens by File: (top %d)\n", prt_limit) + foreach (name in opens_by_file_fail- limit prt_limit) + printf("%d\t%s\n", opens_by_file_fail[name], name) + + printf("\n# Closes by Binary:\n") + foreach (name in closes_by_exec-) + printf("%d\t%s\n", closes_by_exec[name], name) + + printf("\n# Open Failures by Type:\n") + foreach (type in open_failure_by_type-) + printf("%d\t%s\n", open_failure_by_type[type], type) +} |