truss.h revision 239501
1/*
2 * Copyright 2001 Jamey Wood
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 * SUCH DAMAGE.
24 *
25 * $FreeBSD: head/usr.bin/truss/truss.h 239501 2012-08-21 14:58:51Z zont $
26 */
27
28#include <sys/queue.h>
29
30#define FOLLOWFORKS        0x00000001
31#define RELATIVETIMESTAMPS 0x00000002
32#define ABSOLUTETIMESTAMPS 0x00000004
33#define NOSIGS             0x00000008
34#define EXECVEARGS         0x00000010
35#define EXECVEENVS         0x00000020
36#define COUNTONLY          0x00000040
37
38struct threadinfo
39{
40	SLIST_ENTRY(threadinfo) entries;
41	lwpid_t tid;
42	int in_syscall;
43	int in_fork;
44};
45
46struct trussinfo
47{
48	pid_t pid;
49	int flags;
50	int pr_why;
51	int pr_data;
52	int strsize;
53	FILE *outfile;
54
55	struct timespec start_time;
56	struct timespec before;
57	struct timespec after;
58
59	struct threadinfo *curthread;
60
61	SLIST_HEAD(, threadinfo) threadlist;
62};
63
64#define timespecsubt(tvp, uvp, vvp)					\
65	do {								\
66		(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;		\
67		(vvp)->tv_nsec = (tvp)->tv_nsec - (uvp)->tv_nsec;	\
68		if ((vvp)->tv_nsec < 0) {				\
69			(vvp)->tv_sec--;				\
70			(vvp)->tv_nsec += 1000000000;			\
71		}							\
72	} while (0)
73
74#define timespecadd(tvp, uvp, vvp)					\
75	do {								\
76		(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec;		\
77		(vvp)->tv_nsec = (tvp)->tv_nsec + (uvp)->tv_nsec;	\
78		if ((vvp)->tv_nsec > 1000000000) {				\
79			(vvp)->tv_sec++;				\
80			(vvp)->tv_nsec -= 1000000000;			\
81		}							\
82	} while (0)
83
84#define S_NONE  0
85#define S_SCE   1
86#define S_SCX   2
87#define S_EXIT  3
88#define S_SIG   4
89#define S_EXEC  5
90