summaryrefslogtreecommitdiff
path: root/syscall.c
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2013-05-14 16:07:46 +0200
committerDenys Vlasenko <dvlasenk@redhat.com>2013-05-14 16:10:42 +0200
commit2a3d27552f17a5b378344620bec7d255bac65a8d (patch)
tree1f04f471af05982933c3badd2fe31aafc3becd30 /syscall.c
parent01997cf32d4492b9898283ced45e8a4a6fd161b8 (diff)
downloadstrace-2a3d27552f17a5b378344620bec7d255bac65a8d.tar.gz
strace-2a3d27552f17a5b378344620bec7d255bac65a8d.tar.bz2
strace-2a3d27552f17a5b378344620bec7d255bac65a8d.tar.xz
Hide startup syscalls.
Tested with "./strace [-D] [-q] [-bexecve] env true", all cases seem to work. * defs.h: Declare new variable: bool hide_log_until_execve. * strace.c: Define hide_log_until_execve. Rename skip_startup_execve to skip_one_b_execve. (startup_child): Do not set skip_one_b_execve = 1 here. (init): If "strace PROG" case (as opposed to "strace -pPID"), set skip_one_b_execve and hide_log_until_execve to 1. (trace): Don't print signal messages if hide_log_until_execve == 1. * syscall.c (trace_syscall_entering): Skip syscall printing if hide_log_until_execve == 1. Reset hide_log_until_execve if we enter execve syscall. (trace_syscall_exiting): Skip syscall printing if hide_log_until_execve == 1. Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'syscall.c')
-rw-r--r--syscall.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/syscall.c b/syscall.c
index 833dacd..7efee0e 100644
--- a/syscall.c
+++ b/syscall.c
@@ -1985,6 +1985,14 @@ trace_syscall_entering(struct tcb *tcp)
goto ret;
}
+ if ( sys_execve == tcp->s_ent->sys_func
+# if defined(SPARC) || defined(SPARC64)
+ || sys_execv == tcp->s_ent->sys_func
+# endif
+ ) {
+ hide_log_until_execve = 0;
+ }
+
#if defined(SYS_socket_subcall) || defined(SYS_ipc_subcall)
while (1) {
# ifdef SYS_socket_subcall
@@ -2015,7 +2023,7 @@ trace_syscall_entering(struct tcb *tcp)
tcp->flags &= ~TCB_FILTERED;
- if (cflag == CFLAG_ONLY_STATS) {
+ if (cflag == CFLAG_ONLY_STATS || hide_log_until_execve) {
res = 0;
goto ret;
}
@@ -2503,7 +2511,7 @@ trace_syscall_exiting(struct tcb *tcp)
get_error(tcp); /* never fails */
if (need_fork_exec_workarounds)
syscall_fixup_for_fork_exec(tcp);
- if (filtered(tcp))
+ if (filtered(tcp) || hide_log_until_execve)
goto ret;
}