History log of /freebsd-10.0-release/usr.bin/truss/syscalls.c
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
# 259065 07-Dec-2013 gjb

- Copy stable/10 (r259064) to releng/10.0 as part of the
10.0-RELEASE cycle.
- Update __FreeBSD_version [1]
- Set branch name to -RC1

[1] 10.0-CURRENT __FreeBSD_version value ended at '55', so
start releng/10.0 at '100' so the branch is started with
a value ending in zero.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation

# 256281 10-Oct-2013 gjb

Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation


# 255708 19-Sep-2013 jhb

Extend the support for exempting processes from being killed when swap is
exhausted.
- Add a new protect(1) command that can be used to set or revoke protection
from arbitrary processes. Similar to ktrace it can apply a change to all
existing descendants of a process as well as future descendants.
- Add a new procctl(2) system call that provides a generic interface for
control operations on processes (as opposed to the debugger-specific
operations provided by ptrace(2)). procctl(2) uses a combination of
idtype_t and an id to identify the set of processes on which to operate
similar to wait6().
- Add a PROC_SPROTECT control operation to manage the protection status
of a set of processes. MADV_PROTECT still works for backwards
compatability.
- Add a p_flag2 to struct proc (and a corresponding ki_flag2 to kinfo_proc)
the first bit of which is used to track if P_PROTECT should be inherited
by new child processes.

Reviewed by: kib, jilles (earlier version)
Approved by: re (delphij)
MFC after: 1 month


# 255493 12-Sep-2013 jhb

- Decode the idtype argument passed to wait6() in kdump and truss.
- Don't treat an options argument of 0 to wait4() as an error in
kdump.
- Decode the wait options passed to wait4() and wait6() in truss
and decode the returned rusage and exit status.

Approved by: re (kib)
MFC after: 1 week


# 255426 09-Sep-2013 jhb

Add a mmap flag (MAP_32BIT) on 64-bit platforms to request that a mapping use
an address in the first 2GB of the process's address space. This flag should
have the same semantics as the same flag on Linux.

To facilitate this, add a new parameter to vm_map_find() that specifies an
optional maximum virtual address. While here, fix several callers of
vm_map_find() to use a VMFS_* constant for the findspace argument instead of
TRUE and FALSE.

Reviewed by: alc
Approved by: re (kib)


# 254538 19-Aug-2013 jhb

Remove incorrect 'const' qualifier from pointers to dynamic string
buffers I added in the previous commit.

Pointy hat to: jhb
MFC after: 1 month


# 254430 16-Aug-2013 jhb

Add new mmap(2) flags to permit applications to request specific virtual
address alignment of mappings.
- MAP_ALIGNED(n) requests a mapping aligned on a boundary of (1 << n).
Requests for n >= number of bits in a pointer or less than the size of
a page fail with EINVAL. This matches the API provided by NetBSD.
- MAP_ALIGNED_SUPER is a special case of MAP_ALIGNED. It can be used
to optimize the chances of using large pages. By default it will align
the mapping on a large page boundary (the system is free to choose any
large page size to align to that seems best for the mapping request).
However, if the object being mapped is already using large pages, then
it will align the virtual mapping to match the existing large pages in
the object instead.
- Internally, VMFS_ALIGNED_SPACE is now renamed to VMFS_SUPER_SPACE, and
VMFS_ALIGNED_SPACE(n) is repurposed for specifying a specific alignment.
MAP_ALIGNED(n) maps to using VMFS_ALIGNED_SPACE(n), while
MAP_ALIGNED_SUPER maps to VMFS_SUPER_SPACE.
- mmap() of a device object now uses VMFS_OPTIMAL_SPACE rather than
explicitly using VMFS_SUPER_SPACE. All device objects are forced to
use a specific color on creation, so VMFS_OPTIMAL_SPACE is effectively
equivalent.

Reviewed by: alc
MFC after: 1 month


# 253850 01-Aug-2013 markj

Properly print arguments to vfork(2) and rfork(2).

PR: 180976
Submitted by: Yuri <yuri@tsoft.com> (original patch)
MFC after: 1 week


# 252414 30-Jun-2013 mjg

truss: recognize O_DIRECTORY, O_EXEC, O_TTY_INIT and O_CLOEXEC

MFC after: 3 days


# 247338 26-Feb-2013 delphij

Revert r247300 for now. I'll post a new changeset for review.


# 247300 26-Feb-2013 delphij

Expose timespec and timeval macros when __BSD_VISIBLE is defined. This
allows userland application to use the following macros:

timespecclear, timespecisset, timespeccmp, timespecadd,
timespecsub;

timevalclear, timevalisset, timevalcmp.

MFC after: 1 month


# 240562 16-Sep-2012 zont

- Make truss thread-aware.

Approved by: kib (mentor)
MFC after: 2 weeks


# 240005 02-Sep-2012 zont

- Style(9) cleanup.

Approved by: kib (mentor)


# 239501 21-Aug-2012 zont

- Use pid_t type instead of just int.

Approved by: kib (mentor)


# 228396 10-Dec-2011 ed

Add more static keywords to truss(1) source code.

There are some tables in the source code that are only used by the
individual source files themselves. Therefore there is no need to export
them.


# 216224 06-Dec-2010 jh

Don't write the terminating NUL past end of buffer.

PR: bin/152345
Submitted by: Mateusz Guzik


# 204977 10-Mar-2010 imp

Fix copyright spelling.

PR: 139825
Submitted by: Ruslan Mahmatkhanov


# 201350 31-Dec-2009 brooks

The devices that supported EVFILT_NETDEV kqueue filters were removed in
r195175. Remove all definitions, documentation, and usage.

fifo_misc.c:
Remove all kqueue tests as fifo_io.c performs all those that
would have remained.

Reviewed by: rwatson
MFC after: 3 weeks
X-MFC note: don't change vlan_link_state() function signature


# 200902 23-Dec-2009 ed

Allow proper tracing of posix_openpt(2).


# 200781 21-Dec-2009 jh

Cast time_t values to intmax_t and use %jd with printf.

OK'ed by: delphij
Approved by: trasz (mentor)


# 200780 21-Dec-2009 jh

Remove non-working special case for pipe(2) from amd64-fbsd32.c and
i386-fbsd.c. Add pipe(2) to syscall table to decode it's pointer
argument properly and re-add special handling for pipe(2) return value
to print_syscall_ret().

PR: bin/120870
Approved by: trasz (mentor)


# 200751 20-Dec-2009 jh

Add fork(2), getegid(2), geteuid(2), getgid(2), getpid(2), getpgid(2),
getpgrp(2), getppid(2), getsid(2) and getuid(2) to syscall table to
decode their arguments correctly.

OK'ed by: delphij
Approved by: trasz (mentor)


# 192025 12-May-2009 dds

Add -c option to summarize number of calls, errors, and system time.

Reviewed by: alfred


# 181061 31-Jul-2008 des

Try to make this code slightly less painful to read.


# 175062 02-Jan-2008 jasone

The break() system call takes a pointer argument, not an integer. This
change fixes output for break() on LP64 systems.


# 171647 28-Jul-2007 marcel

Print integer-typed arguments as integers. This makes sure that
on 64-bit platforms the result is more reliable. For example,
-1 was previously printed as 0xffffffff.

Approved by: re (kensmith)


# 171646 28-Jul-2007 marcel

Fix handling of Quad-type arguments. Previously, syscalls
containing 64-bit arguments would have explicit padding.
On 64-bit platforms there was no padding, so the dummy
argument was not covering anything. On 32-bit platforms
with weak alignment (i.e. i386) the 64-bit argument did
not need to be aligned, so there too an aditional argument
was introduced. On 32-bit platforms with strong alignment
(i.e. PowerPC) the dummy argument in fact cover the padding.
By elimininating the dummy argument, 64-bit platforms now
have 1 argument less. This also applies to 32-bit platforms
with weak alignment. On PowerPC this doesn't matter, because
the padding is still there. We just don't "name" it.
Deal with those 3 cases.

Approved by: re (kensmith)


# 168569 10-Apr-2007 delphij

Make use of ptrace(2) instead of procfs in truss(1), eliminating
yet another need of an available /proc/ mount.

Tested with: make universe
Submitted by: howardsu
Reviewed by: alfred


# 158630 15-May-2006 pav

- Add decoding of kse_release, kevent, sigprocmask, unmount, socket, getrusage,
rename, __getcwd, shutdown, getrlimit, setrlimit, _umtx_lock, _umtx_unlock,
pathconf, truncate, ftruncate, kill

- Decode more arguments of open, mprot, *stat, and fcntl.

- Convert all constant-macro and bitfield decoding to lookup tables; much
cleaner than previous code.

- Print the timestamp of process exit and signal reception when -d or -D are in
use

- Try six times with 1/2 second delay to debug the child

PR: bin/52190 (updated)
Submitted by: Dan Nelson <dnelson@allantgroup.com>
Approved by: alfred


# 153963 02-Jan-2006 brian

Add a -s flag for the same functionality as strace. Introduce a Name
type which is a String type that has no -s limitations applied to it.
Change most Strings in the code to Names and add a few extra syscalls,
namely munmap, read, rename and symlink. This was enough to facilitate
following file descriptor allocations in the code more easily and
getting a hint at what's being read/written from/to files. More
syscalls should really be added.

While here, fix an off-by-one bug in the buffer truncation code and
add a fflush so that truss's output reflects the syscall that the
program is stuck in.

Sponsored by: Sophos/Activestate
MFC after: 2 weeks


# 151361 15-Oct-2005 alfred

The kernel accepts sockaddrs with len set to zero for sockaddr_in
types, so refactor the code here to grab them when length is zero.


# 147389 14-Jun-2005 alfred

Decode chroot(2) args.

Approved by: re


# 146658 26-May-2005 alfred

decode utimes, lutimes, futimes, chflags, lchflags.


# 146652 26-May-2005 alfred

decode mkdir args.


# 143109 03-Mar-2005 alfred

Change fix a bug where the length of data written by snprintf was
being mishandled by using accumulation (into an uninitialized
variable) instead of direct assignment.

Reviewed by: scottl


# 134799 05-Sep-2004 marcel

Fix Quad handling on 64-bit architectures. On 64-bit machines, a Quad
also occupies a single slot. There's no need for any special handling
of Quads. While here, remove the silly make_quad() function. We have
the 2 longs on 32-bit machines already lined up in the argument array,
so we can fetch the Quad with a simple cast.

Before:
lseek(1,0x123456789,0xd0d0d0d0d0d0d0d0) = 4886718345 (0x123456789)
After:
lseek(1,0x123456789,SEEK_SET) = 4886718345 (0x123456789)


# 133349 08-Aug-2004 alfred

don't seg if the syscall is invalid for i386fbsd.


# 132799 28-Jul-2004 stefanf

Use the length modifier 'll' instead of 'q' to print long longs.


# 132308 17-Jul-2004 alfred

Support readlink(2) better. Readlink does not nul terminate the
result buffer, so we need to format it ourselves. The problem is
that the length is stored as the return value from readlink, so we
need to pass the return value from our syscall into print_arg.

Motivated by: truss garbage on my screen from reading /etc/malloc.conf.


# 132306 17-Jul-2004 alfred

When reporting reciept of a signal, print the signal's name.


# 131893 10-Jul-2004 alfred

Decode the "wence" arg to lseek and linux_lseek.


# 130347 11-Jun-2004 phk

COMPAT_SUNOS is gone.


# 127332 23-Mar-2004 dwmalone

Add support for decoding Timespec, Timeval, Itimerval, Pollfd,
Fd_set and Sigaction structures. Use these for printing the arguments
to sigaction(), nanosleep(), select(), poll(), gettimeofday(),
clock_gettime(), recvfrom(), getitimer() and setitimer().

This is based on Dan's patch from the PR but I've hacked it for
style and some other issues. While Dan has checked this patch, any
goofs are probably my fault.

(The PR also contains support for the dual return values of pipe().
These will follow once I've ported that support to platforms other
than i386.)

PR: 52190
Submitted by: Dan Nelson <dnelson@allantgroup.com>


# 127331 23-Mar-2004 dwmalone

Use pread to implement pread, rather than taking a detour throug stdio.

PR: 52190
Submitted by: Dan Nelson <dnelson@allantgroup.com>


# 127329 23-Mar-2004 alfred

decode mprotect args while i'm here.


# 127328 23-Mar-2004 alfred

decode fcntl and mmap arguments.


# 124216 07-Jan-2004 dwmalone

Fix a printf format warning.


# 122606 13-Nov-2003 marcel

Do not ignore any possible errors that fseeko() may have. The fact
is that fseeko() fails in very predictable and frequent ways on ia64.
This is because the offset is actually an address in the process'
address space, which on ia64 can be larger than long (for lseek) or
off_t (for fseeko). The crux is the signedness. The register stack
and memory stack are in region 4 on ia64. This means that the sign bit
is 1. The large positive virtual address is wrongly interpreted as
a negative file offset.

There's no quick fix. Even if you get around the API by using a
SEEK_SET up to LONG_MAX and follow it up with a SEEK_CUR for the
remainder, the kernel simply cannot deal with it. and the second
seek will just fail.

Therefore, this change does not actually fix the root cause. It just
makes sure we're not spitting out all kinds of garbage or that the
get_struct() function in particular does not cause truss(1) to exit.
This, I might add, invariably happened way too soon for truss(1) to
be of any use on ia64...


# 122348 09-Nov-2003 marcel

Port truss(1) to 64-bit architectures:
o Syscall return values do not fit in int on 64-bit architectures.
Change the type of retval in <arch>_syscall_exit() to long and
change the prototype of said function to return a long as well.
o Change the prototype of print_syscall_ret() to take a long for
the return address and change the format string accordingly.
o Replace the code sequence
tmp = malloc(X);
sprintf(tmp, format, ...);
with X by definition too small on 64-bit platforms by
asprintf(&tmp, format, ...);

With these changes the output makes sense again, although it does
mess up the tabulation on ia64. Go widescreen...

Not tested on: alpha, sparc64.


# 121606 27-Oct-2003 marcel

Fix truss so that it doesn't abort/exit when a syscall has been given
a NULL-pointer for a sockaddr argument.


# 118505 05-Aug-2003 des

send() and recv() are just wrappers, not actual syscalls.


# 118483 05-Aug-2003 des

Add recv(2), recvfrom(2), send(2) and sendfrom(2).


# 113501 15-Apr-2003 mdodd

Decode a few more syscalls.


# 106712 09-Nov-2002 dwmalone

Check if name is NULL before we strcmp the syscall name. This was
sometimes triggered if you began trussing a process while it was
in a syscall, as the name is filled in when the syscall is made.


# 104581 06-Oct-2002 mike

Don't depend on <signal.h> to include <sys/time.h>, instead include
<sys/time.h> directly. This is mostly bogus since CLOCK_REALTIME
should be defined in <time.h>, which these files already include.


# 101458 07-Aug-2002 mdodd

Remove an unnecessary cast.


# 101423 06-Aug-2002 mdodd

- Use time.h not sys/time.h.
- Fix printf format errors.

Submitted by: bde


# 101381 05-Aug-2002 mdodd

Remove extra space in output.


# 101373 05-Aug-2002 mdodd

Use timespec not timeval.


# 101289 04-Aug-2002 mdodd

Add options to print the argument and environment string parameters to
execve().

This could be done in a more general manner but it still wouldn't
be very pretty.

MFC after: 3 weeks


# 101285 03-Aug-2002 mdodd

Add options to print absolute and relative timestamps.

PR: bin/25587 (in part)
MFC after: 3 weeks


# 101283 03-Aug-2002 mdodd

Allow tracking fork()ed children.

PR: bin/25587 (in part)
MFC after: 3 weeks


# 101282 03-Aug-2002 mdodd

Parameterize globals.

PR: bin/25587 (in part)
MFC after: 3 weeks


# 95225 21-Apr-2002 dwmalone

Use fseeko and uintptr_t to make sure that we get a sensible offset
when trying to read from the stack.

PR: 37104
Submitted by: Thomas Quinot <thomas@cuivre.fr.eu.org>
MFC after: 3 weeks


# 88726 30-Dec-2001 alfred

Print open(2) flags in hex instread of decimal for clarity.


# 87703 11-Dec-2001 markm

Partial WARNS=1 fizes with NO_WERROR set to prevent world breakage.
Use __FBSDID().


# 86138 06-Nov-2001 green

Add missing include for <ctype.h>

Make sockaddr printing code unbad.

Always copy in sizeof(sockaddr_un) bytes for an AF_UNIX sockaddr,
despite what the length may be.


# 85292 21-Oct-2001 des

Teach truss(1) to display sockaddrs. It currently knows about AF_INET,
AF_INET6 and AF_UNIX sockaddrs, and will recognize accept(), bind(),
connect(), getpeername() and getsockname() as syscalls taking sockaddr
arguments. Some enterprising soul might want to add (and test) support
for the send() / recv() family of syscalls as well.

MFC after: 1 week


# 82471 28-Aug-2001 joerg

In get_string(), 0-terminate the contents of buf ``just in case'';
otherwise, if the very first fgetc() already yielded EOF, the returned
string won't get terminated at all.

MFC after: 1 day


# 58224 18-Mar-2000 sef

Change the output of truss to more closely resemble SysV's. (Yes, it
really is much nicer looking.)

Submitted by: "Matthew N. Dodd" <winter@jurai.net>


# 57245 15-Feb-2000 sef

Fix a leak. (Thanks Bruce, this was a bonehead mistake on my part :).)

Submitted by: Bruce Evans


# 50477 27-Aug-1999 peter

$Id$ -> $FreeBSD$


# 49609 10-Aug-1999 des

Teach truss to print symbolic signal names (e.g. SIGHUP instead of 0x01).


# 49436 05-Aug-1999 des

Add access(2) to the list of recognized syscalls.


# 40370 15-Oct-1998 sef

Add lstat() as a known system call.


# 37453 06-Jul-1998 bde

Fixed printf format errors.


# 32275 05-Jan-1998 charnier

Sort Xrefs. Use err(3). Remove uneeded #include.
Correct usage: one of {-p pid, command} is required.
Open output file when command line is fully analyzed: incorrect `truss -o f'
command does not create an empty file anymore.


# 31899 20-Dec-1997 sef

Add some copyright and license terms, at Jordan's request. Note that
syscall.h just refers to another file for the copyright notice.


# 31571 06-Dec-1997 sef

First cut at printing out ioctl names intelligently. Note that this doesn't
handle linux ioctls (yet?). This uses the mkioctl script from kdump,
bless its little heart.

Reviewed by: Mike Smith


# 31567 06-Dec-1997 sef

Truss program. Requires procfs.