diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2013-05-14 16:07:46 +0200 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2013-05-14 16:10:42 +0200 |
commit | 2a3d27552f17a5b378344620bec7d255bac65a8d (patch) | |
tree | 1f04f471af05982933c3badd2fe31aafc3becd30 /syscall.c | |
parent | 01997cf32d4492b9898283ced45e8a4a6fd161b8 (diff) | |
download | strace-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.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -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; } |