2008-07-03 Jan Kratochvil <jan.kratochvil@redhat.com>

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.
This commit is contained in:
Roland McGrath 2008-07-18 00:25:10 +00:00
parent 8149e30526
commit 41c48227a8
4 changed files with 16 additions and 20 deletions

2
defs.h
View File

@ -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;

View File

@ -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

View File

@ -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.

View File

@ -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