1356290Sjkim/* 2290207Sjkim * Copyright 2001 Jamey Wood 3290207Sjkim * 4290207Sjkim * Redistribution and use in source and binary forms, with or without 5290207Sjkim * modification, are permitted provided that the following conditions 6290207Sjkim * are met: 7290207Sjkim * 1. Redistributions of source code must retain the above copyright 8290207Sjkim * notice, this list of conditions and the following disclaimer. 9290207Sjkim * 2. Redistributions in binary form must reproduce the above copyright 10290207Sjkim * notice, this list of conditions and the following disclaimer in the 11290207Sjkim * documentation and/or other materials provided with the distribution. 12290207Sjkim * 13290207Sjkim * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14290207Sjkim * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15290207Sjkim * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16290207Sjkim * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17290207Sjkim * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18290207Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19290207Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20290207Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21290207Sjkim * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22290207Sjkim * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23290207Sjkim * SUCH DAMAGE. 24290207Sjkim * 25290207Sjkim * $FreeBSD$ 26290207Sjkim */ 27290207Sjkim 28290207Sjkim#include <sys/queue.h> 29290207Sjkim 30290207Sjkim#define FOLLOWFORKS 0x00000001 31290207Sjkim#define RELATIVETIMESTAMPS 0x00000002 32290207Sjkim#define ABSOLUTETIMESTAMPS 0x00000004 33290207Sjkim#define NOSIGS 0x00000008 34290207Sjkim#define EXECVEARGS 0x00000010 35290207Sjkim#define EXECVEENVS 0x00000020 36290207Sjkim#define COUNTONLY 0x00000040 37290207Sjkim 38290207Sjkimstruct threadinfo 39290207Sjkim{ 40290207Sjkim SLIST_ENTRY(threadinfo) entries; 41290207Sjkim lwpid_t tid; 42290207Sjkim int in_syscall; 43290207Sjkim int in_fork; 44290207Sjkim void *fsc; 45290207Sjkim struct timespec before; 46290207Sjkim struct timespec after; 47290207Sjkim}; 48290207Sjkim 49312826Sjkimstruct trussinfo 50290207Sjkim{ 51290207Sjkim pid_t pid; 52290207Sjkim int flags; 53290207Sjkim int pr_why; 54290207Sjkim int pr_data; 55290207Sjkim int strsize; 56290207Sjkim FILE *outfile; 57344604Sjkim 58344604Sjkim struct timespec start_time; 59344604Sjkim 60344604Sjkim struct threadinfo *curthread; 61344604Sjkim 62344604Sjkim SLIST_HEAD(, threadinfo) threadlist; 63290207Sjkim}; 64344604Sjkim 65344604Sjkim#define timespecsubt(tvp, uvp, vvp) \ 66344604Sjkim do { \ 67344604Sjkim (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \ 68290207Sjkim (vvp)->tv_nsec = (tvp)->tv_nsec - (uvp)->tv_nsec; \ 69290207Sjkim if ((vvp)->tv_nsec < 0) { \ 70344604Sjkim (vvp)->tv_sec--; \ 71290207Sjkim (vvp)->tv_nsec += 1000000000; \ 72290207Sjkim } \ 73290207Sjkim } while (0) 74290207Sjkim 75290207Sjkim#define timespecadd(tvp, uvp, vvp) \ 76290207Sjkim do { \ 77290207Sjkim (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \ 78290207Sjkim (vvp)->tv_nsec = (tvp)->tv_nsec + (uvp)->tv_nsec; \ 79290207Sjkim if ((vvp)->tv_nsec > 1000000000) { \ 80290207Sjkim (vvp)->tv_sec++; \ 81290207Sjkim (vvp)->tv_nsec -= 1000000000; \ 82290207Sjkim } \ 83290207Sjkim } while (0) 84290207Sjkim 85290207Sjkim#define S_NONE 0 86290207Sjkim#define S_SCE 1 87290207Sjkim#define S_SCX 2 88290207Sjkim#define S_EXIT 3 89290207Sjkim#define S_SIG 4 90290207Sjkim#define S_EXEC 5 91290207Sjkim#define S_DETACHED 6 92290207Sjkim