Go to file
Denys Vlasenko 833fb13cef Remove TCB_SUSPENDED constant and related code.
Since we no longer suspend waitpid'ing tracees, we have only one case when
we suspend tracee: when we pick up a new tracee created by clone/fork/vfork.

Background: on some other OSes, attach to child is done this way:
get fork's result (pid), loop ptrace(PTRACE_ATTACH) until you hook up
new process/thread. This is ugly and not safe, but what matters for us
is that it doesn't require suspending. Suspending is required
on Linux only, because on Linux attach to child is done differently.

On Linux, we use two methods of catching new tracee:
adding CLONE_THREAD bit to syscall (if needed, we change
[v]fork into clone before that), or using ptrace options.
In both cases, it may be so that new tracee appears before one which
created it returns from syscall. In this case, current code
suspends new tracee until its creator returns. Only then
strace can determine who is its parent (it needs child's pid for this,
which is visible in parent's [v]fork/clone result).
This is inherently racy. For example, what if SIGKILL kills
creator after it succeeded creating child, but before it returns?
Looks like we will have child suspended forever.

But after previous commit, we DO NOT NEED parent<->child link for anything.
Therefore we do not need suspending too. Bingo!

This patch removes suspending code. Now new tracees will be continued
right away. Next patch will remove tcp->parent member.

* defs.h: Remove TCB_SUSPENDED constant
* process.c (handle_new_child): Delete this function.
  (internal_fork): Do not call handle_new_child on syscall exit.
* strace.c (handle_ptrace_event): Delete this function.
  (trace): Do not suspend new child; remove all handling
  of now impossible TCB_SUSPENDED condition.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
2011-08-17 11:30:56 +02:00
debian Prepare for 4.6 release 2011-03-14 15:39:36 +00:00
freebsd Remove obsolete .cvsignore files 2011-02-25 16:53:50 +00:00
linux Fix MIPS syscall entries 2011-06-09 15:16:01 +00:00
m4 Fix off_t/rlim_t size checks when cross-compiling 2010-09-15 15:36:00 +00:00
sunos4 Whitespace cleanups. no code changes. 2011-06-07 12:13:24 +02:00
svr4 Whitespace cleanups. no code changes. 2011-06-07 12:13:24 +02:00
test Add fflush after printf in test/sigkill_rain.c 2011-06-08 16:07:03 +02:00
tests tests: finish ptrace_setoptions_* merge 2011-06-21 15:03:17 +00:00
.gitignore linux/ioctlent: unify them all 2011-03-14 15:32:38 +00:00
.mailmap Generate much of the CREDITS file from git log 2011-02-24 01:51:15 +00:00
AUTHORS 2002-12-22 Roland McGrath <roland@redhat.com> 2002-12-30 00:51:30 +00:00
bjm.c Whitespace cleanups. no code changes. 2011-06-07 12:13:24 +02:00
block.c Fix compilation on 2.4.20 kernel based system 2011-08-15 11:36:09 +02:00
ChangeLog-CVS Generate ChangeLog from git log 2009-07-08 21:01:21 +00:00
configure.ac Check for additional PTRACE_* constants 2011-07-19 22:13:11 +00:00
COPYRIGHT update copyright 2002-03-31 18:43:00 +00:00
count.c Whitespace cleanups. No code changes. 2011-06-22 14:32:43 +02:00
CREDITS.in * CREDITS.in: Fix typo. 2011-03-15 15:46:52 +00:00
defs.h Remove TCB_SUSPENDED constant and related code. 2011-08-17 11:30:56 +02:00
desc.c Whitespace cleanups. No code changes. 2011-06-22 14:32:43 +02:00
errnoent.sh Mark shell scripts as executable 2009-09-18 12:07:03 +00:00
file.c Whitespace cleanups. No code changes. 2011-06-22 14:32:43 +02:00
git-set-file-times * git-set-file-times: Import from rsync. 2009-10-09 23:07:28 +00:00
gitlog-to-changelog Generate ChangeLog from git log 2009-07-08 21:01:21 +00:00
HACKING-scripts HACKING-scripts: new doc file by Mike Frysinger 2009-02-23 07:56:01 +00:00
INSTALL Cleanup trailing whitespaces and indentation that uses spaces before tabs 2009-07-08 14:57:27 +00:00
io.c Add argument to tprint_iov() specifying whether to decode each iovec 2011-06-13 22:58:44 +00:00
ioctl.c Introduce ARRAY_SIZE() macro 2011-06-13 21:58:43 +00:00
ioctlsort.c Fix const-correctness issues uncovered by gcc -Wwrite-strings 2010-09-07 00:59:18 +00:00
ipc.c Whitespace cleanups. no code changes. 2011-06-07 12:13:24 +02:00
make-dist Generate an xz tar archive of the distribution 2011-02-27 14:05:58 +00:00
Makefile.am Add ability to print file descriptor paths and filter by those paths 2011-04-08 20:47:56 +00:00
mem.c Whitespace cleanups. no code changes. 2011-06-07 12:13:24 +02:00
net.c Whitespace cleanups. No code changes. 2011-06-22 14:32:43 +02:00
NEWS Prepare for 4.6 release 2011-03-14 15:39:36 +00:00
pathtrace.c Whitespace cleanups. No code changes. 2011-06-22 14:32:43 +02:00
PORTING Initial revision 1999-02-19 00:21:36 +00:00
proc.c "Modernize" all old-style function parameter declarations 2011-05-30 14:00:14 +02:00
process.c Remove TCB_SUSPENDED constant and related code. 2011-08-17 11:30:56 +02:00
quota.c Whitespace cleanups. No code changes. 2011-06-22 14:32:43 +02:00
README More cleanups from Mike Frysingler: 2009-02-23 08:07:45 +00:00
README-freebsd trailing whitespace removal, no code changes 2009-01-02 13:03:44 +00:00
README-hacking Generate ChangeLog from git log 2009-07-08 21:01:21 +00:00
README-linux Cleanup trailing whitespaces and indentation that uses spaces before tabs 2009-07-08 14:57:27 +00:00
README-sunos4 Initial revision 1999-02-19 00:21:36 +00:00
README-svr4 Cleanup trailing whitespaces and indentation that uses spaces before tabs 2009-07-08 14:57:27 +00:00
resource.c Handle biarch get/setrlimit 2010-07-17 17:46:28 +02:00
scsi.c 2007-03-29 Vladimir Nadvornik <nadvornik@suse.cz> 2007-06-30 11:37:09 +00:00
signal.c Do not detach when we think tracee is going to die. 2011-08-17 10:45:32 +02:00
signalent.sh Mark shell scripts as executable 2009-09-18 12:07:03 +00:00
sock.c Whitespace cleanups. no code changes. 2011-06-07 12:13:24 +02:00
strace-graph Cleanup trailing whitespaces and indentation that uses spaces before tabs 2009-07-08 14:57:27 +00:00
strace.1 Add ability to print file descriptor paths and filter by those paths 2011-04-08 20:47:56 +00:00
strace.c Remove TCB_SUSPENDED constant and related code. 2011-08-17 11:30:56 +02:00
strace.spec Prepare for 4.6 release 2011-03-14 15:39:36 +00:00
stream.c Whitespace cleanups. no code changes. 2011-06-07 12:13:24 +02:00
syscall.c Do not detach when we think tracee is going to die. 2011-08-17 10:45:32 +02:00
syscallent.sh Mark shell scripts as executable 2009-09-18 12:07:03 +00:00
system.c * system.c (sys_capget, sys_capset): Fix pointer arithmetics 2011-06-23 13:25:09 +00:00
term.c Remove dead code 2010-02-04 22:40:57 +00:00
time.c Whitespace cleanups. No code changes. 2011-06-22 14:32:43 +02:00
TODO Merge iov fixes from Richard Kettlewell 2001-07-10 13:48:44 +00:00
util.c Untangle a particularly badly obfuscated bit of code. No logic changes. 2011-06-23 21:57:54 +02:00
xlate.el Initial revision 1999-02-19 00:21:36 +00:00

This is strace 4.0, a system call tracer for SunOS 4.x, Linux, System
V release 4, Solaris 2.x and Irix 5.x.  strace is released under a
Berkeley-style license at the request of Paul Kranenburg; see the file
COPYRIGHT for details.

Read the INSTALL file for generic instructions on how to install
strace.  If configure cannot guess your system configuration, you can
specify it on the command line after the other options like this:

	./configure --prefix=/usr i486-linux

A single sunos4.1 binary should work on all the sun4, sun4c and sun4m
kernel architectures.  Let me know if sun4d doesn't work.  Other
i486-*-sysv4 systems may work with little or no tweaking.

See the file NEWS for information on what has changed in recent
versions.

See the file PORTING if you like strace but it doesn't work on an
operating system you use frequently.

See the file CREDITS to see who has contributed to strace.

See the file TODO if you feel like helping out.

You can get the latest version of strace from its homepage at
http://sourceforge.net/projects/strace/ .

Please send bug reports and enhancements to the strace
mailinglist at strace-devel@lists.sourceforge.net, or directly to
Wichert Akkerman <wakkerma@debian.org>