19b50d902SRodney W. Grimes /*- 29b50d902SRodney W. Grimes * Copyright (c) 1988, 1993 39b50d902SRodney W. Grimes * The Regents of the University of California. All rights reserved. 49b50d902SRodney W. Grimes * 59b50d902SRodney W. Grimes * Redistribution and use in source and binary forms, with or without 69b50d902SRodney W. Grimes * modification, are permitted provided that the following conditions 79b50d902SRodney W. Grimes * are met: 89b50d902SRodney W. Grimes * 1. Redistributions of source code must retain the above copyright 99b50d902SRodney W. Grimes * notice, this list of conditions and the following disclaimer. 109b50d902SRodney W. Grimes * 2. Redistributions in binary form must reproduce the above copyright 119b50d902SRodney W. Grimes * notice, this list of conditions and the following disclaimer in the 129b50d902SRodney W. Grimes * documentation and/or other materials provided with the distribution. 139b50d902SRodney W. Grimes * 4. Neither the name of the University nor the names of its contributors 149b50d902SRodney W. Grimes * may be used to endorse or promote products derived from this software 159b50d902SRodney W. Grimes * without specific prior written permission. 169b50d902SRodney W. Grimes * 179b50d902SRodney W. Grimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 189b50d902SRodney W. Grimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 199b50d902SRodney W. Grimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 209b50d902SRodney W. Grimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 219b50d902SRodney W. Grimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 229b50d902SRodney W. Grimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 239b50d902SRodney W. Grimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 249b50d902SRodney W. Grimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 259b50d902SRodney W. Grimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 269b50d902SRodney W. Grimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 279b50d902SRodney W. Grimes * SUCH DAMAGE. 289b50d902SRodney W. Grimes */ 299b50d902SRodney W. Grimes 300bff6132SJames Raynard #if 0 3165b386f1SPhilippe Charnier #ifndef lint 329b50d902SRodney W. Grimes static char sccsid[] = "@(#)subr.c 8.1 (Berkeley) 6/6/93"; 339b50d902SRodney W. Grimes #endif /* not lint */ 3465b386f1SPhilippe Charnier #endif 359b50d902SRodney W. Grimes 36ebdb213bSDavid Malone #include <sys/cdefs.h> 37ebdb213bSDavid Malone __FBSDID("$FreeBSD$"); 38ebdb213bSDavid Malone 399b50d902SRodney W. Grimes #include <sys/param.h> 409b50d902SRodney W. Grimes #include <sys/file.h> 419b50d902SRodney W. Grimes #include <sys/proc.h> 429b50d902SRodney W. Grimes #include <sys/time.h> 436004362eSDavid Schultz #include <sys/uio.h> 449b50d902SRodney W. Grimes #include <sys/ktrace.h> 450bff6132SJames Raynard 46821df508SXin LI #include <stdio.h> 47821df508SXin LI 489b50d902SRodney W. Grimes #include "ktrace.h" 499b50d902SRodney W. Grimes 50ebdb213bSDavid Malone void timevaladd(struct timeval *, struct timeval *); 51ebdb213bSDavid Malone void timevalsub(struct timeval *, struct timeval *); 52ebdb213bSDavid Malone void timevalfix(struct timeval *); 53ebdb213bSDavid Malone 54ebdb213bSDavid Malone int 5501588bbdSMark Murray getpoints(char *s) 569b50d902SRodney W. Grimes { 579b50d902SRodney W. Grimes int facs = 0; 589b50d902SRodney W. Grimes 599b50d902SRodney W. Grimes while (*s) { 609b50d902SRodney W. Grimes switch(*s) { 619b50d902SRodney W. Grimes case 'c': 629b50d902SRodney W. Grimes facs |= KTRFAC_SYSCALL | KTRFAC_SYSRET; 639b50d902SRodney W. Grimes break; 64*c601ad8eSDag-Erling Smørgrav case 'i': 65*c601ad8eSDag-Erling Smørgrav facs |= KTRFAC_GENIO; 66*c601ad8eSDag-Erling Smørgrav break; 679b50d902SRodney W. Grimes case 'n': 689b50d902SRodney W. Grimes facs |= KTRFAC_NAMEI; 699b50d902SRodney W. Grimes break; 70*c601ad8eSDag-Erling Smørgrav case 'p': 71*c601ad8eSDag-Erling Smørgrav facs |= KTRFAC_CAPFAIL; 729b50d902SRodney W. Grimes break; 739b50d902SRodney W. Grimes case 's': 749b50d902SRodney W. Grimes facs |= KTRFAC_PSIG; 759b50d902SRodney W. Grimes break; 7660e15db9SDag-Erling Smørgrav case 't': 7760e15db9SDag-Erling Smørgrav facs |= KTRFAC_STRUCT; 7860e15db9SDag-Erling Smørgrav break; 7909ac2438SPoul-Henning Kamp case 'u': 8009ac2438SPoul-Henning Kamp facs |= KTRFAC_USER; 8109ac2438SPoul-Henning Kamp break; 829b50d902SRodney W. Grimes case 'w': 839b50d902SRodney W. Grimes facs |= KTRFAC_CSW; 849b50d902SRodney W. Grimes break; 85a56be37eSJohn Baldwin case 'y': 86a56be37eSJohn Baldwin facs |= KTRFAC_SYSCTL; 87a56be37eSJohn Baldwin break; 889b50d902SRodney W. Grimes case '+': 899b50d902SRodney W. Grimes facs |= DEF_POINTS; 909b50d902SRodney W. Grimes break; 919b50d902SRodney W. Grimes default: 929b50d902SRodney W. Grimes return (-1); 939b50d902SRodney W. Grimes } 949b50d902SRodney W. Grimes s++; 959b50d902SRodney W. Grimes } 969b50d902SRodney W. Grimes return (facs); 979b50d902SRodney W. Grimes } 989b50d902SRodney W. Grimes 99ebdb213bSDavid Malone void 10001588bbdSMark Murray timevaladd(struct timeval *t1, struct timeval *t2) 1019b50d902SRodney W. Grimes { 1029b50d902SRodney W. Grimes t1->tv_sec += t2->tv_sec; 1039b50d902SRodney W. Grimes t1->tv_usec += t2->tv_usec; 1049b50d902SRodney W. Grimes timevalfix(t1); 1059b50d902SRodney W. Grimes } 1069b50d902SRodney W. Grimes 107ebdb213bSDavid Malone void 10801588bbdSMark Murray timevalsub(struct timeval *t1, struct timeval *t2) 1099b50d902SRodney W. Grimes { 1109b50d902SRodney W. Grimes t1->tv_sec -= t2->tv_sec; 1119b50d902SRodney W. Grimes t1->tv_usec -= t2->tv_usec; 1129b50d902SRodney W. Grimes timevalfix(t1); 1139b50d902SRodney W. Grimes } 1149b50d902SRodney W. Grimes 115ebdb213bSDavid Malone void 11601588bbdSMark Murray timevalfix(struct timeval *t1) 1179b50d902SRodney W. Grimes { 1189b50d902SRodney W. Grimes if (t1->tv_usec < 0) { 1199b50d902SRodney W. Grimes t1->tv_sec--; 1209b50d902SRodney W. Grimes t1->tv_usec += 1000000; 1219b50d902SRodney W. Grimes } 1229b50d902SRodney W. Grimes if (t1->tv_usec >= 1000000) { 1239b50d902SRodney W. Grimes t1->tv_sec++; 1249b50d902SRodney W. Grimes t1->tv_usec -= 1000000; 1259b50d902SRodney W. Grimes } 1269b50d902SRodney W. Grimes } 127