diff options
Diffstat (limited to 'usr.bin/truss/syscalls.c')
-rw-r--r-- | usr.bin/truss/syscalls.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/usr.bin/truss/syscalls.c b/usr.bin/truss/syscalls.c index 8056aa1..1ad7fe1 100644 --- a/usr.bin/truss/syscalls.c +++ b/usr.bin/truss/syscalls.c @@ -40,6 +40,7 @@ static const char rcsid[] = */ #include <sys/types.h> +#include <sys/time.h> #include <sys/socket.h> #include <sys/un.h> #include <netinet/in.h> @@ -358,9 +359,27 @@ print_syscall(struct trussinfo *trussinfo, const char *name, int nargs, char **s int i; int len = 0; + struct timeval timediff; + if (trussinfo->flags & FOLLOWFORKS) len += fprintf(trussinfo->outfile, "%5d: ", trussinfo->pid); + if (!strcmp(name, "execve") || !strcmp(name, "exit")) { + gettimeofday(&trussinfo->after, (struct timezone *)NULL); + } + + if (trussinfo->flags & ABSOLUTETIMESTAMPS) { + timersub(&trussinfo->after, &trussinfo->start_time, &timediff); + len += fprintf(trussinfo->outfile, "%d.%0.7d ", + timediff.tv_sec, timediff.tv_usec); + } + + if (trussinfo->flags & RELATIVETIMESTAMPS) { + timersub(&trussinfo->after, &trussinfo->before, &timediff); + len += fprintf(trussinfo->outfile, "%d.%0.7d ", + timediff.tv_sec, timediff.tv_usec); + } + len += fprintf(trussinfo->outfile, "%s(", name); for (i = 0; i < nargs; i++) { |