]> granicus.if.org Git - strace/commitdiff
2008-07-03 Jan Kratochvil <jan.kratochvil@redhat.com>
authorRoland McGrath <roland@redhat.com>
Fri, 18 Jul 2008 00:25:10 +0000 (00:25 +0000)
committerRoland McGrath <roland@redhat.com>
Fri, 18 Jul 2008 00:25:10 +0000 (00:25 +0000)
Trace even VFORK on -f on all the platforms.
* strace.1 <-f>: Describe Linux catches new children immediately.
<-F>: Make the option obsolete.  Move the SunOS VFORK comment to the
`-f' option description.
* defs.h (followvfork): Declaration removed.
* strace.c (followvfork): Variable removed.
(main) <-F>: Merge with the `-f' option.
(trace): Make !FOLLOWVFORK unconditional.
* process.c (internal_fork): Make !FOLLOWVFORK unconditional.

defs.h
process.c
strace.1
strace.c

diff --git a/defs.h b/defs.h
index 0ac733f3ec8338d9ff9efa0fe47d0b9107d22515..cf21c048de178f746040bf70fd64d2957214366c 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -434,7 +434,7 @@ struct xlat {
 
 extern struct tcb **tcbtab;
 extern int *qual_flags;
-extern int debug, followfork, followvfork;
+extern int debug, followfork;
 extern int dtime, cflag, xflag, qflag;
 extern int acolumn;
 extern unsigned int nprocs, tcbtabsize;
index 63122139443d7116c4b247dd7fb8a75c93916fc8..a2109fe3cb796bb178e23b0768db7960344eb355 100644 (file)
--- a/process.c
+++ b/process.c
@@ -989,8 +989,7 @@ struct tcb *tcp;
 #ifdef SYS_vfork
        if (known_scno(tcp) == SYS_vfork) {
                /* Attempt to make vfork into fork, which we can follow. */
-               if (!followvfork ||
-                   change_syscall(tcp, SYS_fork) < 0)
+               if (change_syscall(tcp, SYS_fork) < 0)
                        dont_follow = 1;
        }
 #endif
index aa79d6e8afedd78a014a21fe2f5b2a58207617c2..18cd5ae10153da6ad6f329573e5ff85ddfa3d0f8 100644 (file)
--- a/strace.1
+++ b/strace.1
@@ -232,7 +232,9 @@ itself on the standard error.
 Trace child processes as they are created by currently traced
 processes as a result of the
 .BR fork (2)
-system call.  The new process is
+system call.
+.IP
+On non-Linux platforms the new process is
 attached to as soon as its pid is known (through the return value of
 .BR fork (2)
 in the parent process). This means that such children may run
@@ -240,13 +242,17 @@ uncontrolled for a while (especially in the case of a
 .BR vfork (2)),
 until the parent is scheduled again to complete its
 .RB ( v ) fork (2)
-call.
+call.  On Linux the child is traced from its first instruction with no delay.
 If the parent process decides to
 .BR wait (2)
 for a child that is currently
 being traced, it is suspended until an appropriate child process either
 terminates or incurs a signal that would cause it to terminate (as
 determined from the child's current signal disposition).
+.IP
+On SunOS 4.x the tracing of
+.BR vfork s
+is accomplished with some dynamic linking trickery.
 .TP
 .B \-ff
 If the
@@ -258,16 +264,8 @@ where pid is the numeric process id of each process.
 This is incompatible with -c, since no per-process counts are kept.
 .TP
 .B \-F
-Attempt to follow
-.BR vfork s.
-(On SunOS 4.x, this is accomplished with
-some dynamic linking trickery.)
-Otherwise,
-.BR vfork s
-will
-not be followed even if
-.B \-f
-has been given.
+This option is now obsolete and it has the same functionality as
+.BR -f .
 .TP
 .B \-h
 Print the help summary.
index 341ed04adeb10b9ccb58084773318ecfdfba9e51..0cbe3228c9e40745898b66754b05936e35179387 100644 (file)
--- a/strace.c
+++ b/strace.c
@@ -78,7 +78,7 @@
 #endif
 #endif
 
-int debug = 0, followfork = 0, followvfork = 0;
+int debug = 0, followfork = 0;
 int dtime = 0, cflag = 0, xflag = 0, qflag = 0;
 static int iflag = 0, interactive = 0, pflag_seen = 0, rflag = 0, tflag = 0;
 
@@ -659,12 +659,11 @@ main(int argc, char *argv[])
                case 'd':
                        debug++;
                        break;
+               case 'F':
+                       /* Obsoleted, acts as `-f'.  */
                case 'f':
                        followfork++;
                        break;
-               case 'F':
-                       followvfork++;
-                       break;
                case 'h':
                        usage(stdout, 0);
                        break;
@@ -2261,7 +2260,7 @@ trace()
                /* Look up `pid' in our table. */
                if ((tcp = pid2tcb(pid)) == NULL) {
 #ifdef LINUX
-                       if (followfork || followvfork) {
+                       if (followfork) {
                                /* This is needed to go with the CLONE_PTRACE
                                   changes in process.c/util.c: we might see
                                   the child's initial trap before we see the