========================================================================
This is the unmodified README from Paul Kranenburg's release of strace
for SunOS 4.1.x.  Some of the notes and instructions are no longer valid
however the file has been retained for its historical value. -- jrs
========================================================================

/*
 * @(#)README	2.4 92/01/21
 *
 * Copyright (C) 1991 Paul Kranenburg.
 *
 * Please send comments, enhancements or any other useful ideas to
 * the address at the end of this file.
 *
 */

strace(1) is a system call tracer for Sun(tm) systems much like the
Sun supplied program trace(1). strace(1) is a useful utility to sort
of debug programs for which no source is available which unfortunately
includes almost all of the Sun supplied system software.

Like trace(1), strace displays each system call and its arguments as it
is invoked by the traced process, but tries to do a better job of
decoding the arguments, displaying them in symbolic format whenever
possible. Passed structures/character arrays are read from the process'
address space and displayed in an appropriate format.

It is also possible to instruct strace to trace child processes as
they are created by the fork(2) system call. However, this is slightly
involved for two reasons: 1) the trace flag is cleared in the child
process by the fork system call, so we must make a special effort to
gain control of the child (see NOTES below), 2) our tracing manipulations
of the child may interfere with a possible wait(2) system call executed
by the (also traced) parent process. In this case we don't allow the parent
to continue until one of its children enters a state that may cause the
parent's wait(2) call to return.


NOTES.

o	Not all system calls have been implemented yet as described
	above (see dummy.h for a list), these calls only have their args
	displayed as hex numbers.

o	The program draws heavily on Sun's extensions to the ptrace(2)
	system call.

o	This release is based upon SunOS 4.1.1. The syscall list (syscall.h)
	and ioctl's (ioctlent.m4) are probably most critically dependant
	on the OS version (see also /sys/os/init_sysent.c).
	You may have to edit `ioctlsort.c' and/or `ioctlent.m4' to get
	`ioctlsort.c' to compile with your suite of system header files.

o	The way in which child processes are caught and attached to after
	the fork() call is Sparc-specific (in fact it has the looks of a
	terrible hack). Also, this trick won't work with vfork(2).
	Enhancements are sollicited for.

o	Dynamically linked executables can be convinced to use the fork(2)
	system call in stead of vfork(2) by modifying their (internal)
	symbol table immediately after such a program is exec'ed. Be
	warned that programs which depend on vfork's peculiar semantics
	may not run as expected. Enable by the `-F' switch.


INSTALLATION.

	Edit the paths in the Makefile to suit your local system.
	Enter the usual make commands (`make debug' to enable the
	compiler `-g' flag).

	Not all sites have a complete set of include files, depending
	on the selected software categories at OS install time. The
	makefile tries to detect the presence of the Sunview category,
	if other files are missing you may have to edit `ioctlent.h'.


COMMENTS TO:

	P. Kranenburg
	Department of Computer Science
	Erasmus University Rotterdam
	P.O. Box 1738
	NL-3000 DR Rotterdam
	e-mail: pk@cs.few.eur.nl
