* defs.h (ptrace_setoptions_for_all): Expose this variable.
* strace.c (ptrace_setoptions_for_all): Remove "static".
* process.c (internal_exec): Don't set TCB_WAITEXECVE bit
if we know that post-execve SIGTRAP is not going to happen.
extern int *qual_flags;
extern int debug, followfork;
extern unsigned int ptrace_setoptions_followfork;
+extern unsigned int ptrace_setoptions_for_all;
extern int dtime, xflag, qflag;
extern cflag_t cflag;
extern int acolumn;
#endif
int
-internal_exec(tcp)
-struct tcb *tcp;
+internal_exec(struct tcb *tcp)
{
#ifdef SUNOS4
if (exiting(tcp) && !syserror(tcp) && followfork)
#if defined LINUX && defined TCB_WAITEXECVE
if (exiting(tcp) && syserror(tcp))
tcp->flags &= ~TCB_WAITEXECVE;
- else
- tcp->flags |= TCB_WAITEXECVE;
+ else {
+ /* Maybe we have post-execve SIGTRAP suppressed? */
+ if (!(ptrace_setoptions_for_all & PTRACE_O_TRACEEXEC))
+ tcp->flags |= TCB_WAITEXECVE; /* no */
+ }
#endif /* LINUX && TCB_WAITEXECVE */
return 0;
}
int debug = 0, followfork = 0;
unsigned int ptrace_setoptions_followfork = 0;
-static unsigned int ptrace_setoptions_for_all = 0;
+unsigned int ptrace_setoptions_for_all = 0;
/* Which WSTOPSIG(status) value marks syscall traps? */
static unsigned int SYSCALLTRAP = SIGTRAP;
int dtime = 0, xflag = 0, qflag = 0;