freebsd-dev/usr.bin/truss
John Baldwin 2b75c8ad3d Several changes to truss.
- Refactor the interface between the ABI-independent code and the
  ABI-specific backends.  The backends now provide smaller hooks to
  fetch system call arguments and return values.  The rest of the
  system call entry and exit handling that was previously duplicated
  among all the backends has been moved to one place.
- Merge the loop when waiting for an event with the loop for handling stops.
  This also means not emulating a procfs-like interface on top of ptrace().
  Instead, use a single event loop that fetches process events via waitid().
  Among other things this allows us to report the full 32-bit exit value.
- Use PT_FOLLOW_FORK to follow new child processes instead of forking a new
  truss process for each new child.  This allows one truss process to monitor
  a tree of processes and truss -c should now display one total for the
  entire tree instead of separate summaries per process.
- Use the recently added fields to ptrace_lwpinfo to determine the current
  system call number and argument count.  The latter is especially useful
  and fixes a regression since the conversion from procfs.  truss now
  generally prints the correct number of arguments for most system calls
  rather than printing extra arguments for any call not listed in the
  table in syscalls.c.
- Actually check the new ABI when processes call exec.  The comments claimed
  that this happened but it was not being done (perhaps this was another
  regression in the conversion to ptrace()).  If the new ABI after exec
  is not supported, truss detaches from the process.  If truss does not
  support the ABI for a newly executed process the process is killed
  before it returns from exec.
- Along with the refactor, teach the various ABI-specific backends to
  fetch both return values, not just the first.  Use this to properly
  report the full 64-bit return value from lseek().  In addition, the
  handler for "pipe" now pulls the pair of descriptors out of the
  return values (which is the true kernel system call interface) but
  displays them as an argument (which matches the interface exported by
  libc).
- Each ABI handler adds entries to a linker set rather than requiring
  a statically defined table of handlers in main.c.
- The arm and mips system call fetching code was changed to follow the
  same pattern as amd64 (and the in-kernel handler) of fetching register
  arguments first and then reading any remaining arguments from the
  stack.  This should fix indirect system call arguments on at least
  arm.
- The mipsn32 and n64 ABIs will now look for arguments in A4 through A7.
- Use register %ebp for the 6th system call argument for Linux/i386 ABIs
  to match the in-kernel argument fetch code.
- For powerpc binaries on a powerpc64 system, fetch the extra arguments
  on the stack as 32-bit values that are then copied into the 64-bit
  argument array instead of reading the 32-bit values directly into the
  64-bit array.

Reviewed by:	kib (earlier version)
Tested on:	amd64 (FreeBSD/amd64 & i386), i386, arm (earlier version)
Tested on:	powerpc64 (FreeBSD/powerpc64 & powerpc)
MFC after:	1 month
Differential Revision:	https://reviews.freebsd.org/D3575
2015-09-30 19:13:32 +00:00
..
amd64-fbsd32.c Several changes to truss. 2015-09-30 19:13:32 +00:00
amd64-fbsd.c Several changes to truss. 2015-09-30 19:13:32 +00:00
amd64-linux32.c Several changes to truss. 2015-09-30 19:13:32 +00:00
amd64linux32.conf
arm-fbsd.c Several changes to truss. 2015-09-30 19:13:32 +00:00
extern.h Several changes to truss. 2015-09-30 19:13:32 +00:00
fbsd32.conf
i386-fbsd.c Several changes to truss. 2015-09-30 19:13:32 +00:00
i386-linux.c Several changes to truss. 2015-09-30 19:13:32 +00:00
i386.conf
i386linux.conf
main.c Several changes to truss. 2015-09-30 19:13:32 +00:00
Makefile Use INCLUDEDIR rather than hard coded /usr/include 2015-06-11 14:25:53 +00:00
Makefile.depend.amd64 new depends 2015-06-16 23:37:19 +00:00
mips-fbsd.c Several changes to truss. 2015-09-30 19:13:32 +00:00
powerpc64-fbsd.c Several changes to truss. 2015-09-30 19:13:32 +00:00
powerpc-fbsd.c Several changes to truss. 2015-09-30 19:13:32 +00:00
setup.c Several changes to truss. 2015-09-30 19:13:32 +00:00
sparc64-fbsd.c Several changes to truss. 2015-09-30 19:13:32 +00:00
syscall.h Several changes to truss. 2015-09-30 19:13:32 +00:00
syscalls.c Several changes to truss. 2015-09-30 19:13:32 +00:00
truss.1
truss.h Several changes to truss. 2015-09-30 19:13:32 +00:00