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 * 3. All advertising materials mentioning features or use of this software 149b50d902SRodney W. Grimes * must display the following acknowledgement: 159b50d902SRodney W. Grimes * This product includes software developed by the University of 169b50d902SRodney W. Grimes * California, Berkeley and its contributors. 179b50d902SRodney W. Grimes * 4. Neither the name of the University nor the names of its contributors 189b50d902SRodney W. Grimes * may be used to endorse or promote products derived from this software 199b50d902SRodney W. Grimes * without specific prior written permission. 209b50d902SRodney W. Grimes * 219b50d902SRodney W. Grimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 229b50d902SRodney W. Grimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 239b50d902SRodney W. Grimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 249b50d902SRodney W. Grimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 259b50d902SRodney W. Grimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 269b50d902SRodney W. Grimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 279b50d902SRodney W. Grimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 289b50d902SRodney W. Grimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 299b50d902SRodney W. Grimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 309b50d902SRodney W. Grimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 319b50d902SRodney W. Grimes * SUCH DAMAGE. 329b50d902SRodney W. Grimes */ 339b50d902SRodney W. Grimes 349b50d902SRodney W. Grimes #ifndef lint 3515fc002bSPhilippe Charnier static const char copyright[] = 369b50d902SRodney W. Grimes "@(#) Copyright (c) 1988, 1993\n\ 379b50d902SRodney W. Grimes The Regents of the University of California. All rights reserved.\n"; 389b50d902SRodney W. Grimes #endif /* not lint */ 399b50d902SRodney W. Grimes 409b50d902SRodney W. Grimes #ifndef lint 4115fc002bSPhilippe Charnier #if 0 429b50d902SRodney W. Grimes static char sccsid[] = "@(#)kdump.c 8.1 (Berkeley) 6/6/93"; 4315fc002bSPhilippe Charnier #endif 449b50d902SRodney W. Grimes #endif /* not lint */ 45e026a48cSDavid E. O'Brien #include <sys/cdefs.h> 46e026a48cSDavid E. O'Brien __FBSDID("$FreeBSD$"); 479b50d902SRodney W. Grimes 48c4473420SPeter Wemm #define _KERNEL 49c1b99fe6SGeoff Rehmet extern int errno; 50c1b99fe6SGeoff Rehmet #include <sys/errno.h> 51c4473420SPeter Wemm #undef _KERNEL 529b50d902SRodney W. Grimes #include <sys/param.h> 539b50d902SRodney W. Grimes #include <sys/errno.h> 5491fbb9c1SDavid Malone #define _KERNEL 559b50d902SRodney W. Grimes #include <sys/time.h> 5691fbb9c1SDavid Malone #undef _KERNEL 579b50d902SRodney W. Grimes #include <sys/uio.h> 589b50d902SRodney W. Grimes #include <sys/ktrace.h> 599b50d902SRodney W. Grimes #include <sys/ioctl.h> 608bc31d83SCraig Rodrigues #include <sys/socket.h> 611f4b63f8SJohn Baldwin #include <dlfcn.h> 6215fc002bSPhilippe Charnier #include <err.h> 6315fc002bSPhilippe Charnier #include <locale.h> 649b50d902SRodney W. Grimes #include <stdio.h> 659b50d902SRodney W. Grimes #include <stdlib.h> 669b50d902SRodney W. Grimes #include <string.h> 6715fc002bSPhilippe Charnier #include <unistd.h> 6815fc002bSPhilippe Charnier #include <vis.h> 699b50d902SRodney W. Grimes #include "ktrace.h" 7098a68a58SAlexander Leidinger #include "kdump_subr.h" 719b50d902SRodney W. Grimes 7291fbb9c1SDavid Malone int fread_tail(void *, int, int); 7391fbb9c1SDavid Malone void dumpheader(struct ktr_header *); 7491fbb9c1SDavid Malone void ktrsyscall(struct ktr_syscall *); 7591fbb9c1SDavid Malone void ktrsysret(struct ktr_sysret *); 7691fbb9c1SDavid Malone void ktrnamei(char *, int); 77ec4beb5dSPeter Wemm void hexdump(char *, int, int); 78ec4beb5dSPeter Wemm void visdump(char *, int, int); 7991fbb9c1SDavid Malone void ktrgenio(struct ktr_genio *, int); 8091fbb9c1SDavid Malone void ktrpsig(struct ktr_psig *); 8191fbb9c1SDavid Malone void ktrcsw(struct ktr_csw *); 8291fbb9c1SDavid Malone void ktruser(int, unsigned char *); 8391fbb9c1SDavid Malone void usage(void); 847143dfdcSRuslan Ermilov const char *ioctlname(u_long); 8591fbb9c1SDavid Malone 86df0c8868SRobert Watson int timestamp, decimal, fancy = 1, suppressdata, tail, threads, maxdata; 8791fbb9c1SDavid Malone const char *tracefile = DEF_TRACEFILE; 889b50d902SRodney W. Grimes struct ktr_header ktr_header; 899b50d902SRodney W. Grimes 909b50d902SRodney W. Grimes #define eqs(s1, s2) (strcmp((s1), (s2)) == 0) 919b50d902SRodney W. Grimes 9291fbb9c1SDavid Malone int 9391fbb9c1SDavid Malone main(int argc, char *argv[]) 949b50d902SRodney W. Grimes { 959b50d902SRodney W. Grimes int ch, ktrlen, size; 9691fbb9c1SDavid Malone void *m; 979b50d902SRodney W. Grimes int trpoints = ALL_POINTS; 98db53f66bSJohn Baldwin int drop_logged; 99ec4beb5dSPeter Wemm pid_t pid = 0; 1009b50d902SRodney W. Grimes 1015ccbfb26SAndrey A. Chernov (void) setlocale(LC_CTYPE, ""); 1025ccbfb26SAndrey A. Chernov 103df0c8868SRobert Watson while ((ch = getopt(argc,argv,"f:dElm:np:HRsTt:")) != -1) 1049b50d902SRodney W. Grimes switch((char)ch) { 1059b50d902SRodney W. Grimes case 'f': 1069b50d902SRodney W. Grimes tracefile = optarg; 1079b50d902SRodney W. Grimes break; 1089b50d902SRodney W. Grimes case 'd': 1099b50d902SRodney W. Grimes decimal = 1; 1109b50d902SRodney W. Grimes break; 1119b50d902SRodney W. Grimes case 'l': 1129b50d902SRodney W. Grimes tail = 1; 1139b50d902SRodney W. Grimes break; 1149b50d902SRodney W. Grimes case 'm': 1159b50d902SRodney W. Grimes maxdata = atoi(optarg); 1169b50d902SRodney W. Grimes break; 1179b50d902SRodney W. Grimes case 'n': 1189b50d902SRodney W. Grimes fancy = 0; 1199b50d902SRodney W. Grimes break; 120ec4beb5dSPeter Wemm case 'p': 121ec4beb5dSPeter Wemm pid = atoi(optarg); 122ec4beb5dSPeter Wemm break; 123df0c8868SRobert Watson case 's': 124df0c8868SRobert Watson suppressdata = 1; 125df0c8868SRobert Watson break; 126ec131914SPeter Wemm case 'E': 127ec131914SPeter Wemm timestamp = 3; /* elapsed timestamp */ 128ec131914SPeter Wemm break; 129a9ac598bSRobert Watson case 'H': 130a9ac598bSRobert Watson threads = 1; 131a9ac598bSRobert Watson break; 1329b50d902SRodney W. Grimes case 'R': 1339b50d902SRodney W. Grimes timestamp = 2; /* relative timestamp */ 1349b50d902SRodney W. Grimes break; 1359b50d902SRodney W. Grimes case 'T': 1369b50d902SRodney W. Grimes timestamp = 1; 1379b50d902SRodney W. Grimes break; 1389b50d902SRodney W. Grimes case 't': 1399b50d902SRodney W. Grimes trpoints = getpoints(optarg); 14015fc002bSPhilippe Charnier if (trpoints < 0) 14115fc002bSPhilippe Charnier errx(1, "unknown trace point in %s", optarg); 1429b50d902SRodney W. Grimes break; 1439b50d902SRodney W. Grimes default: 1449b50d902SRodney W. Grimes usage(); 1459b50d902SRodney W. Grimes } 1469b50d902SRodney W. Grimes 14780844fd1SBill Fenner if (argc > optind) 1489b50d902SRodney W. Grimes usage(); 1499b50d902SRodney W. Grimes 1509b50d902SRodney W. Grimes m = (void *)malloc(size = 1025); 15115fc002bSPhilippe Charnier if (m == NULL) 15215fc002bSPhilippe Charnier errx(1, "%s", strerror(ENOMEM)); 15315fc002bSPhilippe Charnier if (!freopen(tracefile, "r", stdin)) 15415fc002bSPhilippe Charnier err(1, "%s", tracefile); 155db53f66bSJohn Baldwin drop_logged = 0; 1569b50d902SRodney W. Grimes while (fread_tail(&ktr_header, sizeof(struct ktr_header), 1)) { 157db53f66bSJohn Baldwin if (ktr_header.ktr_type & KTR_DROP) { 158db53f66bSJohn Baldwin ktr_header.ktr_type &= ~KTR_DROP; 159a9ac598bSRobert Watson if (!drop_logged && threads) { 160a9ac598bSRobert Watson (void)printf("%6d %6d %-8.*s Events dropped.\n", 161a9ac598bSRobert Watson ktr_header.ktr_pid, ktr_header.ktr_tid > 162a9ac598bSRobert Watson 0 ? ktr_header.ktr_tid : 0, MAXCOMLEN, 163a9ac598bSRobert Watson ktr_header.ktr_comm); 164a9ac598bSRobert Watson drop_logged = 1; 165a9ac598bSRobert Watson } else if (!drop_logged) { 166db53f66bSJohn Baldwin (void)printf("%6d %-8.*s Events dropped.\n", 167db53f66bSJohn Baldwin ktr_header.ktr_pid, MAXCOMLEN, 168db53f66bSJohn Baldwin ktr_header.ktr_comm); 169db53f66bSJohn Baldwin drop_logged = 1; 170db53f66bSJohn Baldwin } 171db53f66bSJohn Baldwin } 1729b50d902SRodney W. Grimes if (trpoints & (1<<ktr_header.ktr_type)) 173ec4beb5dSPeter Wemm if (pid == 0 || ktr_header.ktr_pid == pid) 1749b50d902SRodney W. Grimes dumpheader(&ktr_header); 17515fc002bSPhilippe Charnier if ((ktrlen = ktr_header.ktr_len) < 0) 17615fc002bSPhilippe Charnier errx(1, "bogus length 0x%x", ktrlen); 1779b50d902SRodney W. Grimes if (ktrlen > size) { 1789b50d902SRodney W. Grimes m = (void *)realloc(m, ktrlen+1); 17915fc002bSPhilippe Charnier if (m == NULL) 18015fc002bSPhilippe Charnier errx(1, "%s", strerror(ENOMEM)); 1819b50d902SRodney W. Grimes size = ktrlen; 1829b50d902SRodney W. Grimes } 18315fc002bSPhilippe Charnier if (ktrlen && fread_tail(m, ktrlen, 1) == 0) 18415fc002bSPhilippe Charnier errx(1, "data too short"); 185ec4beb5dSPeter Wemm if (pid && ktr_header.ktr_pid != pid) 186ec4beb5dSPeter Wemm continue; 1879b50d902SRodney W. Grimes if ((trpoints & (1<<ktr_header.ktr_type)) == 0) 1889b50d902SRodney W. Grimes continue; 189db53f66bSJohn Baldwin drop_logged = 0; 1909b50d902SRodney W. Grimes switch (ktr_header.ktr_type) { 1919b50d902SRodney W. Grimes case KTR_SYSCALL: 1929b50d902SRodney W. Grimes ktrsyscall((struct ktr_syscall *)m); 1939b50d902SRodney W. Grimes break; 1949b50d902SRodney W. Grimes case KTR_SYSRET: 1959b50d902SRodney W. Grimes ktrsysret((struct ktr_sysret *)m); 1969b50d902SRodney W. Grimes break; 1979b50d902SRodney W. Grimes case KTR_NAMEI: 1989b50d902SRodney W. Grimes ktrnamei(m, ktrlen); 1999b50d902SRodney W. Grimes break; 2009b50d902SRodney W. Grimes case KTR_GENIO: 2019b50d902SRodney W. Grimes ktrgenio((struct ktr_genio *)m, ktrlen); 2029b50d902SRodney W. Grimes break; 2039b50d902SRodney W. Grimes case KTR_PSIG: 2049b50d902SRodney W. Grimes ktrpsig((struct ktr_psig *)m); 2059b50d902SRodney W. Grimes break; 2069b50d902SRodney W. Grimes case KTR_CSW: 2079b50d902SRodney W. Grimes ktrcsw((struct ktr_csw *)m); 2089b50d902SRodney W. Grimes break; 20982e2dd32SPoul-Henning Kamp case KTR_USER: 2103f8ba9aeSPoul-Henning Kamp ktruser(ktrlen, m); 21182e2dd32SPoul-Henning Kamp break; 212b9609ab1SJohn Baldwin default: 213b9609ab1SJohn Baldwin printf("\n"); 214b9609ab1SJohn Baldwin break; 2159b50d902SRodney W. Grimes } 2169b50d902SRodney W. Grimes if (tail) 2179b50d902SRodney W. Grimes (void)fflush(stdout); 2189b50d902SRodney W. Grimes } 21991fbb9c1SDavid Malone return 0; 2209b50d902SRodney W. Grimes } 2219b50d902SRodney W. Grimes 22291fbb9c1SDavid Malone int 22391fbb9c1SDavid Malone fread_tail(void *buf, int size, int num) 2249b50d902SRodney W. Grimes { 2259b50d902SRodney W. Grimes int i; 2269b50d902SRodney W. Grimes 2279b50d902SRodney W. Grimes while ((i = fread(buf, size, num, stdin)) == 0 && tail) { 2289b50d902SRodney W. Grimes (void)sleep(1); 2299b50d902SRodney W. Grimes clearerr(stdin); 2309b50d902SRodney W. Grimes } 2319b50d902SRodney W. Grimes return (i); 2329b50d902SRodney W. Grimes } 2339b50d902SRodney W. Grimes 23491fbb9c1SDavid Malone void 23591fbb9c1SDavid Malone dumpheader(struct ktr_header *kth) 2369b50d902SRodney W. Grimes { 2379b50d902SRodney W. Grimes static char unknown[64]; 2389b50d902SRodney W. Grimes static struct timeval prevtime, temp; 23991fbb9c1SDavid Malone const char *type; 2409b50d902SRodney W. Grimes 2419b50d902SRodney W. Grimes switch (kth->ktr_type) { 2429b50d902SRodney W. Grimes case KTR_SYSCALL: 2439b50d902SRodney W. Grimes type = "CALL"; 2449b50d902SRodney W. Grimes break; 2459b50d902SRodney W. Grimes case KTR_SYSRET: 2469b50d902SRodney W. Grimes type = "RET "; 2479b50d902SRodney W. Grimes break; 2489b50d902SRodney W. Grimes case KTR_NAMEI: 2499b50d902SRodney W. Grimes type = "NAMI"; 2509b50d902SRodney W. Grimes break; 2519b50d902SRodney W. Grimes case KTR_GENIO: 2529b50d902SRodney W. Grimes type = "GIO "; 2539b50d902SRodney W. Grimes break; 2549b50d902SRodney W. Grimes case KTR_PSIG: 2559b50d902SRodney W. Grimes type = "PSIG"; 2569b50d902SRodney W. Grimes break; 2579b50d902SRodney W. Grimes case KTR_CSW: 2589b50d902SRodney W. Grimes type = "CSW "; 2599b50d902SRodney W. Grimes break; 26082e2dd32SPoul-Henning Kamp case KTR_USER: 26182e2dd32SPoul-Henning Kamp type = "USER"; 26282e2dd32SPoul-Henning Kamp break; 2639b50d902SRodney W. Grimes default: 2649b50d902SRodney W. Grimes (void)sprintf(unknown, "UNKNOWN(%d)", kth->ktr_type); 2659b50d902SRodney W. Grimes type = unknown; 2669b50d902SRodney W. Grimes } 2679b50d902SRodney W. Grimes 268a9ac598bSRobert Watson /* 269a9ac598bSRobert Watson * The ktr_tid field was previously the ktr_buffer field, which held 270a9ac598bSRobert Watson * the kernel pointer value for the buffer associated with data 271a9ac598bSRobert Watson * following the record header. It now holds a threadid, but only 272a9ac598bSRobert Watson * for trace files after the change. Older trace files still contain 273a9ac598bSRobert Watson * kernel pointers. Detect this and suppress the results by printing 274a9ac598bSRobert Watson * negative tid's as 0. 275a9ac598bSRobert Watson */ 276a9ac598bSRobert Watson if (threads) 277a9ac598bSRobert Watson (void)printf("%6d %6d %-8.*s ", kth->ktr_pid, kth->ktr_tid > 278a9ac598bSRobert Watson 0 ? kth->ktr_tid : 0, MAXCOMLEN, kth->ktr_comm); 279a9ac598bSRobert Watson else 280a9ac598bSRobert Watson (void)printf("%6d %-8.*s ", kth->ktr_pid, MAXCOMLEN, 281a9ac598bSRobert Watson kth->ktr_comm); 2829b50d902SRodney W. Grimes if (timestamp) { 283ec131914SPeter Wemm if (timestamp == 3) { 284ec131914SPeter Wemm if (prevtime.tv_sec == 0) 285ec131914SPeter Wemm prevtime = kth->ktr_time; 286ec131914SPeter Wemm timevalsub(&kth->ktr_time, &prevtime); 287ec131914SPeter Wemm } 2889b50d902SRodney W. Grimes if (timestamp == 2) { 2899b50d902SRodney W. Grimes temp = kth->ktr_time; 2909b50d902SRodney W. Grimes timevalsub(&kth->ktr_time, &prevtime); 2919b50d902SRodney W. Grimes prevtime = temp; 2929b50d902SRodney W. Grimes } 2939b50d902SRodney W. Grimes (void)printf("%ld.%06ld ", 2949b50d902SRodney W. Grimes kth->ktr_time.tv_sec, kth->ktr_time.tv_usec); 2959b50d902SRodney W. Grimes } 2969b50d902SRodney W. Grimes (void)printf("%s ", type); 2979b50d902SRodney W. Grimes } 2989b50d902SRodney W. Grimes 2999b50d902SRodney W. Grimes #include <sys/syscall.h> 3009b50d902SRodney W. Grimes #define KTRACE 30155229b56SPoul-Henning Kamp #include <sys/kern/syscalls.c> 3029b50d902SRodney W. Grimes #undef KTRACE 3039b50d902SRodney W. Grimes int nsyscalls = sizeof (syscallnames) / sizeof (syscallnames[0]); 3049b50d902SRodney W. Grimes 30591fbb9c1SDavid Malone void 30691fbb9c1SDavid Malone ktrsyscall(struct ktr_syscall *ktr) 3079b50d902SRodney W. Grimes { 30891fbb9c1SDavid Malone int narg = ktr->ktr_narg; 30991fbb9c1SDavid Malone register_t *ip; 3109b50d902SRodney W. Grimes 3119b50d902SRodney W. Grimes if (ktr->ktr_code >= nsyscalls || ktr->ktr_code < 0) 3129b50d902SRodney W. Grimes (void)printf("[%d]", ktr->ktr_code); 3139b50d902SRodney W. Grimes else 3149b50d902SRodney W. Grimes (void)printf("%s", syscallnames[ktr->ktr_code]); 3157a6ec4cfSDmitrij Tejblum ip = &ktr->ktr_args[0]; 3169b50d902SRodney W. Grimes if (narg) { 3179b50d902SRodney W. Grimes char c = '('; 3189b50d902SRodney W. Grimes if (fancy) { 31998a68a58SAlexander Leidinger 32098a68a58SAlexander Leidinger #define print_number(i,n,c) do { \ 32198a68a58SAlexander Leidinger if (decimal) \ 32298a68a58SAlexander Leidinger (void)printf("%c%ld", c, (long)*i); \ 32398a68a58SAlexander Leidinger else \ 32498a68a58SAlexander Leidinger (void)printf("%c%#lx", c, (long)*i); \ 32598a68a58SAlexander Leidinger i++; \ 32698a68a58SAlexander Leidinger n--; \ 32798a68a58SAlexander Leidinger c = ','; \ 32898a68a58SAlexander Leidinger } while (0); 32998a68a58SAlexander Leidinger 3309b50d902SRodney W. Grimes if (ktr->ktr_code == SYS_ioctl) { 33191fbb9c1SDavid Malone const char *cp; 33298a68a58SAlexander Leidinger print_number(ip,narg,c); 3339b50d902SRodney W. Grimes if ((cp = ioctlname(*ip)) != NULL) 3349b50d902SRodney W. Grimes (void)printf(",%s", cp); 3359b50d902SRodney W. Grimes else { 3369b50d902SRodney W. Grimes if (decimal) 3377a6ec4cfSDmitrij Tejblum (void)printf(",%ld", (long)*ip); 3389b50d902SRodney W. Grimes else 3397a6ec4cfSDmitrij Tejblum (void)printf(",%#lx ", (long)*ip); 3409b50d902SRodney W. Grimes } 3419b50d902SRodney W. Grimes c = ','; 3429b50d902SRodney W. Grimes ip++; 3439b50d902SRodney W. Grimes narg--; 3449b50d902SRodney W. Grimes } else if (ktr->ktr_code == SYS_ptrace) { 34524be4e62SEd Maste (void)putchar('('); 34624be4e62SEd Maste ptraceopname ((int)*ip); 3479b50d902SRodney W. Grimes c = ','; 3489b50d902SRodney W. Grimes ip++; 3499b50d902SRodney W. Grimes narg--; 35098a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_access || 35198a68a58SAlexander Leidinger ktr->ktr_code == SYS_eaccess) { 35298a68a58SAlexander Leidinger print_number(ip,narg,c); 35398a68a58SAlexander Leidinger (void)putchar(','); 35498a68a58SAlexander Leidinger accessmodename ((int)*ip); 35598a68a58SAlexander Leidinger ip++; 35698a68a58SAlexander Leidinger narg--; 35798a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_open) { 35898a68a58SAlexander Leidinger int flags; 35998a68a58SAlexander Leidinger int mode; 36098a68a58SAlexander Leidinger print_number(ip,narg,c); 36198a68a58SAlexander Leidinger flags = *ip; 36298a68a58SAlexander Leidinger mode = *++ip; 36398a68a58SAlexander Leidinger (void)putchar(','); 36498a68a58SAlexander Leidinger flagsandmodename (flags, mode, decimal); 36598a68a58SAlexander Leidinger ip++; 36698a68a58SAlexander Leidinger narg-=2; 36798a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_wait4) { 36898a68a58SAlexander Leidinger print_number(ip,narg,c); 36998a68a58SAlexander Leidinger print_number(ip,narg,c); 37098a68a58SAlexander Leidinger (void)putchar(','); 37198a68a58SAlexander Leidinger wait4optname ((int)*ip); 37298a68a58SAlexander Leidinger ip++; 37398a68a58SAlexander Leidinger narg--; 37498a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_chmod || 37598a68a58SAlexander Leidinger ktr->ktr_code == SYS_fchmod || 37698a68a58SAlexander Leidinger ktr->ktr_code == SYS_lchmod) { 37798a68a58SAlexander Leidinger print_number(ip,narg,c); 37898a68a58SAlexander Leidinger (void)putchar(','); 37998a68a58SAlexander Leidinger modename ((int)*ip); 38098a68a58SAlexander Leidinger ip++; 38198a68a58SAlexander Leidinger narg--; 38298a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_mknod) { 38398a68a58SAlexander Leidinger print_number(ip,narg,c); 38498a68a58SAlexander Leidinger (void)putchar(','); 38598a68a58SAlexander Leidinger modename ((int)*ip); 38698a68a58SAlexander Leidinger ip++; 38798a68a58SAlexander Leidinger narg--; 38898a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_getfsstat) { 38998a68a58SAlexander Leidinger print_number(ip,narg,c); 39098a68a58SAlexander Leidinger print_number(ip,narg,c); 39198a68a58SAlexander Leidinger (void)putchar(','); 39298a68a58SAlexander Leidinger getfsstatflagsname ((int)*ip); 39398a68a58SAlexander Leidinger ip++; 39498a68a58SAlexander Leidinger narg--; 39598a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_mount) { 39698a68a58SAlexander Leidinger print_number(ip,narg,c); 39798a68a58SAlexander Leidinger print_number(ip,narg,c); 39898a68a58SAlexander Leidinger (void)putchar(','); 39998a68a58SAlexander Leidinger mountflagsname ((int)*ip); 40098a68a58SAlexander Leidinger ip++; 40198a68a58SAlexander Leidinger narg--; 40298a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_unmount) { 40398a68a58SAlexander Leidinger print_number(ip,narg,c); 40498a68a58SAlexander Leidinger (void)putchar(','); 40598a68a58SAlexander Leidinger mountflagsname ((int)*ip); 40698a68a58SAlexander Leidinger ip++; 40798a68a58SAlexander Leidinger narg--; 40898a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_recvmsg || 40998a68a58SAlexander Leidinger ktr->ktr_code == SYS_sendmsg) { 41098a68a58SAlexander Leidinger print_number(ip,narg,c); 41198a68a58SAlexander Leidinger print_number(ip,narg,c); 41298a68a58SAlexander Leidinger (void)putchar(','); 41398a68a58SAlexander Leidinger sendrecvflagsname ((int)*ip); 41498a68a58SAlexander Leidinger ip++; 41598a68a58SAlexander Leidinger narg--; 41698a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_recvfrom || 41798a68a58SAlexander Leidinger ktr->ktr_code == SYS_sendto) { 41898a68a58SAlexander Leidinger print_number(ip,narg,c); 41998a68a58SAlexander Leidinger print_number(ip,narg,c); 42098a68a58SAlexander Leidinger print_number(ip,narg,c); 42198a68a58SAlexander Leidinger (void)putchar(','); 42298a68a58SAlexander Leidinger sendrecvflagsname ((int)*ip); 42398a68a58SAlexander Leidinger ip++; 42498a68a58SAlexander Leidinger narg--; 42598a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_chflags || 42698a68a58SAlexander Leidinger ktr->ktr_code == SYS_fchflags || 42798a68a58SAlexander Leidinger ktr->ktr_code == SYS_lchflags) { 42898a68a58SAlexander Leidinger print_number(ip,narg,c); 42998a68a58SAlexander Leidinger (void)putchar(','); 43098a68a58SAlexander Leidinger modename((int)*ip); 43198a68a58SAlexander Leidinger ip++; 43298a68a58SAlexander Leidinger narg--; 43398a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_kill) { 43498a68a58SAlexander Leidinger print_number(ip,narg,c); 43598a68a58SAlexander Leidinger (void)putchar(','); 43698a68a58SAlexander Leidinger signame((int)*ip); 43798a68a58SAlexander Leidinger ip++; 43898a68a58SAlexander Leidinger narg--; 43998a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_reboot) { 44098a68a58SAlexander Leidinger (void)putchar('('); 44198a68a58SAlexander Leidinger rebootoptname((int)*ip); 44298a68a58SAlexander Leidinger ip++; 44398a68a58SAlexander Leidinger narg--; 44498a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_umask) { 44598a68a58SAlexander Leidinger (void)putchar('('); 44698a68a58SAlexander Leidinger modename((int)*ip); 44798a68a58SAlexander Leidinger ip++; 44898a68a58SAlexander Leidinger narg--; 44998a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_msync) { 45098a68a58SAlexander Leidinger print_number(ip,narg,c); 45198a68a58SAlexander Leidinger print_number(ip,narg,c); 45298a68a58SAlexander Leidinger (void)putchar(','); 45398a68a58SAlexander Leidinger msyncflagsname((int)*ip); 45498a68a58SAlexander Leidinger ip++; 45598a68a58SAlexander Leidinger narg--; 456cae1120aSPeter Wemm #ifdef SYS_freebsd6_mmap 457cae1120aSPeter Wemm } else if (ktr->ktr_code == SYS_freebsd6_mmap) { 458cae1120aSPeter Wemm print_number(ip,narg,c); 459cae1120aSPeter Wemm print_number(ip,narg,c); 460cae1120aSPeter Wemm (void)putchar(','); 461cae1120aSPeter Wemm mmapprotname ((int)*ip); 462cae1120aSPeter Wemm (void)putchar(','); 463cae1120aSPeter Wemm ip++; 464cae1120aSPeter Wemm narg--; 465cae1120aSPeter Wemm mmapflagsname ((int)*ip); 466cae1120aSPeter Wemm ip++; 467cae1120aSPeter Wemm narg--; 468cae1120aSPeter Wemm #endif 46998a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_mmap) { 47098a68a58SAlexander Leidinger print_number(ip,narg,c); 47198a68a58SAlexander Leidinger print_number(ip,narg,c); 47298a68a58SAlexander Leidinger (void)putchar(','); 47398a68a58SAlexander Leidinger mmapprotname ((int)*ip); 47498a68a58SAlexander Leidinger (void)putchar(','); 47598a68a58SAlexander Leidinger ip++; 47698a68a58SAlexander Leidinger narg--; 47798a68a58SAlexander Leidinger mmapflagsname ((int)*ip); 47898a68a58SAlexander Leidinger ip++; 47998a68a58SAlexander Leidinger narg--; 48098a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_mprotect) { 48198a68a58SAlexander Leidinger print_number(ip,narg,c); 48298a68a58SAlexander Leidinger print_number(ip,narg,c); 48398a68a58SAlexander Leidinger (void)putchar(','); 48498a68a58SAlexander Leidinger mmapprotname ((int)*ip); 48598a68a58SAlexander Leidinger ip++; 48698a68a58SAlexander Leidinger narg--; 48798a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_madvise) { 48898a68a58SAlexander Leidinger print_number(ip,narg,c); 48998a68a58SAlexander Leidinger print_number(ip,narg,c); 49098a68a58SAlexander Leidinger (void)putchar(','); 49198a68a58SAlexander Leidinger madvisebehavname((int)*ip); 49298a68a58SAlexander Leidinger ip++; 49398a68a58SAlexander Leidinger narg--; 49498a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_setpriority) { 49598a68a58SAlexander Leidinger print_number(ip,narg,c); 49698a68a58SAlexander Leidinger print_number(ip,narg,c); 49798a68a58SAlexander Leidinger (void)putchar(','); 49898a68a58SAlexander Leidinger prioname((int)*ip); 49998a68a58SAlexander Leidinger ip++; 50098a68a58SAlexander Leidinger narg--; 50198a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_fcntl) { 50298a68a58SAlexander Leidinger int cmd; 50398a68a58SAlexander Leidinger int arg; 50498a68a58SAlexander Leidinger print_number(ip,narg,c); 50598a68a58SAlexander Leidinger cmd = *ip; 50698a68a58SAlexander Leidinger arg = *++ip; 50798a68a58SAlexander Leidinger (void)putchar(','); 50898a68a58SAlexander Leidinger fcntlcmdname(cmd, arg, decimal); 50998a68a58SAlexander Leidinger ip++; 51098a68a58SAlexander Leidinger narg-=2; 51198a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_socket) { 5128bc31d83SCraig Rodrigues int sockdomain; 51398a68a58SAlexander Leidinger (void)putchar('('); 5148bc31d83SCraig Rodrigues sockdomain=(int)*ip; 5158bc31d83SCraig Rodrigues sockdomainname(sockdomain); 51698a68a58SAlexander Leidinger ip++; 51798a68a58SAlexander Leidinger narg--; 51898a68a58SAlexander Leidinger (void)putchar(','); 51998a68a58SAlexander Leidinger socktypename((int)*ip); 52098a68a58SAlexander Leidinger ip++; 52198a68a58SAlexander Leidinger narg--; 5228bc31d83SCraig Rodrigues if (sockdomain == PF_INET || 5238bc31d83SCraig Rodrigues sockdomain == PF_INET6) { 5248bc31d83SCraig Rodrigues (void)putchar(','); 5258bc31d83SCraig Rodrigues sockipprotoname((int)*ip); 5268bc31d83SCraig Rodrigues ip++; 5278bc31d83SCraig Rodrigues narg--; 5288bc31d83SCraig Rodrigues } 52998a68a58SAlexander Leidinger c = ','; 53098a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_setsockopt || 53198a68a58SAlexander Leidinger ktr->ktr_code == SYS_getsockopt) { 53298a68a58SAlexander Leidinger print_number(ip,narg,c); 53398a68a58SAlexander Leidinger (void)putchar(','); 53498a68a58SAlexander Leidinger sockoptlevelname((int)*ip, decimal); 5350460d351SJohn Baldwin if ((int)*ip == SOL_SOCKET) { 53698a68a58SAlexander Leidinger ip++; 53798a68a58SAlexander Leidinger narg--; 53898a68a58SAlexander Leidinger (void)putchar(','); 53998a68a58SAlexander Leidinger sockoptname((int)*ip); 5400460d351SJohn Baldwin } 54198a68a58SAlexander Leidinger ip++; 54298a68a58SAlexander Leidinger narg--; 543cae1120aSPeter Wemm #ifdef SYS_freebsd6_lseek 544cae1120aSPeter Wemm } else if (ktr->ktr_code == SYS_freebsd6_lseek) { 54598a68a58SAlexander Leidinger print_number(ip,narg,c); 54698a68a58SAlexander Leidinger /* Hidden 'pad' argument, not in lseek(2) */ 54798a68a58SAlexander Leidinger print_number(ip,narg,c); 54898a68a58SAlexander Leidinger print_number(ip,narg,c); 54998a68a58SAlexander Leidinger (void)putchar(','); 55098a68a58SAlexander Leidinger whencename ((int)*ip); 55198a68a58SAlexander Leidinger ip++; 55298a68a58SAlexander Leidinger narg--; 553cae1120aSPeter Wemm #endif 554cae1120aSPeter Wemm } else if (ktr->ktr_code == SYS_lseek) { 555cae1120aSPeter Wemm print_number(ip,narg,c); 556cae1120aSPeter Wemm /* Hidden 'pad' argument, not in lseek(2) */ 557cae1120aSPeter Wemm print_number(ip,narg,c); 558cae1120aSPeter Wemm (void)putchar(','); 559cae1120aSPeter Wemm whencename ((int)*ip); 560cae1120aSPeter Wemm ip++; 561cae1120aSPeter Wemm narg--; 562cae1120aSPeter Wemm 56398a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_flock) { 56498a68a58SAlexander Leidinger print_number(ip,narg,c); 56598a68a58SAlexander Leidinger (void)putchar(','); 56698a68a58SAlexander Leidinger flockname((int)*ip); 56798a68a58SAlexander Leidinger ip++; 56898a68a58SAlexander Leidinger narg--; 56998a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_mkfifo || 57098a68a58SAlexander Leidinger ktr->ktr_code == SYS_mkdir) { 57198a68a58SAlexander Leidinger print_number(ip,narg,c); 57298a68a58SAlexander Leidinger (void)putchar(','); 57398a68a58SAlexander Leidinger modename((int)*ip); 57498a68a58SAlexander Leidinger ip++; 57598a68a58SAlexander Leidinger narg--; 57698a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_shutdown) { 57798a68a58SAlexander Leidinger print_number(ip,narg,c); 57898a68a58SAlexander Leidinger (void)putchar(','); 57998a68a58SAlexander Leidinger shutdownhowname((int)*ip); 58098a68a58SAlexander Leidinger ip++; 58198a68a58SAlexander Leidinger narg--; 58298a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_socketpair) { 58398a68a58SAlexander Leidinger (void)putchar('('); 58498a68a58SAlexander Leidinger sockdomainname((int)*ip); 58598a68a58SAlexander Leidinger ip++; 58698a68a58SAlexander Leidinger narg--; 58798a68a58SAlexander Leidinger (void)putchar(','); 58898a68a58SAlexander Leidinger socktypename((int)*ip); 58998a68a58SAlexander Leidinger ip++; 59098a68a58SAlexander Leidinger narg--; 59198a68a58SAlexander Leidinger c = ','; 59298a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_getrlimit || 59398a68a58SAlexander Leidinger ktr->ktr_code == SYS_setrlimit) { 59498a68a58SAlexander Leidinger (void)putchar('('); 59598a68a58SAlexander Leidinger rlimitname((int)*ip); 59698a68a58SAlexander Leidinger ip++; 59798a68a58SAlexander Leidinger narg--; 59898a68a58SAlexander Leidinger c = ','; 59998a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_quotactl) { 60098a68a58SAlexander Leidinger print_number(ip,narg,c); 601b850a685SJohn Baldwin (void)putchar(','); 60298a68a58SAlexander Leidinger quotactlname((int)*ip); 60398a68a58SAlexander Leidinger ip++; 60498a68a58SAlexander Leidinger narg--; 60598a68a58SAlexander Leidinger c = ','; 60698a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_nfssvc) { 60798a68a58SAlexander Leidinger (void)putchar('('); 60898a68a58SAlexander Leidinger nfssvcname((int)*ip); 60998a68a58SAlexander Leidinger ip++; 61098a68a58SAlexander Leidinger narg--; 61198a68a58SAlexander Leidinger c = ','; 61298a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_rtprio) { 61398a68a58SAlexander Leidinger (void)putchar('('); 61498a68a58SAlexander Leidinger rtprioname((int)*ip); 61598a68a58SAlexander Leidinger ip++; 61698a68a58SAlexander Leidinger narg--; 61798a68a58SAlexander Leidinger c = ','; 61898a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS___semctl) { 61998a68a58SAlexander Leidinger print_number(ip,narg,c); 62098a68a58SAlexander Leidinger print_number(ip,narg,c); 621b850a685SJohn Baldwin (void)putchar(','); 62298a68a58SAlexander Leidinger semctlname((int)*ip); 62398a68a58SAlexander Leidinger ip++; 62498a68a58SAlexander Leidinger narg--; 62598a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_semget) { 62698a68a58SAlexander Leidinger print_number(ip,narg,c); 62798a68a58SAlexander Leidinger print_number(ip,narg,c); 628b850a685SJohn Baldwin (void)putchar(','); 62998a68a58SAlexander Leidinger semgetname((int)*ip); 63098a68a58SAlexander Leidinger ip++; 63198a68a58SAlexander Leidinger narg--; 63298a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_msgctl) { 63398a68a58SAlexander Leidinger print_number(ip,narg,c); 634b850a685SJohn Baldwin (void)putchar(','); 63598a68a58SAlexander Leidinger shmctlname((int)*ip); 63698a68a58SAlexander Leidinger ip++; 63798a68a58SAlexander Leidinger narg--; 63898a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_shmat) { 63998a68a58SAlexander Leidinger print_number(ip,narg,c); 64098a68a58SAlexander Leidinger print_number(ip,narg,c); 641b850a685SJohn Baldwin (void)putchar(','); 64298a68a58SAlexander Leidinger shmatname((int)*ip); 64398a68a58SAlexander Leidinger ip++; 64498a68a58SAlexander Leidinger narg--; 64598a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_shmctl) { 64698a68a58SAlexander Leidinger print_number(ip,narg,c); 647b850a685SJohn Baldwin (void)putchar(','); 64898a68a58SAlexander Leidinger shmctlname((int)*ip); 64998a68a58SAlexander Leidinger ip++; 65098a68a58SAlexander Leidinger narg--; 65198a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_minherit) { 65298a68a58SAlexander Leidinger print_number(ip,narg,c); 65398a68a58SAlexander Leidinger print_number(ip,narg,c); 654b850a685SJohn Baldwin (void)putchar(','); 65598a68a58SAlexander Leidinger minheritname((int)*ip); 65698a68a58SAlexander Leidinger ip++; 65798a68a58SAlexander Leidinger narg--; 65898a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_rfork) { 65998a68a58SAlexander Leidinger (void)putchar('('); 66098a68a58SAlexander Leidinger rforkname((int)*ip); 66198a68a58SAlexander Leidinger ip++; 66298a68a58SAlexander Leidinger narg--; 66398a68a58SAlexander Leidinger c = ','; 66498a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_lio_listio) { 66598a68a58SAlexander Leidinger (void)putchar('('); 66698a68a58SAlexander Leidinger lio_listioname((int)*ip); 66798a68a58SAlexander Leidinger ip++; 66898a68a58SAlexander Leidinger narg--; 66998a68a58SAlexander Leidinger c = ','; 67098a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_mlockall) { 67198a68a58SAlexander Leidinger (void)putchar('('); 67298a68a58SAlexander Leidinger mlockallname((int)*ip); 67398a68a58SAlexander Leidinger ip++; 67498a68a58SAlexander Leidinger narg--; 67598a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_sched_setscheduler) { 67698a68a58SAlexander Leidinger print_number(ip,narg,c); 677b850a685SJohn Baldwin (void)putchar(','); 67898a68a58SAlexander Leidinger schedpolicyname((int)*ip); 67998a68a58SAlexander Leidinger ip++; 68098a68a58SAlexander Leidinger narg--; 68198a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_sched_get_priority_max || 68298a68a58SAlexander Leidinger ktr->ktr_code == SYS_sched_get_priority_min) { 68398a68a58SAlexander Leidinger (void)putchar('('); 68498a68a58SAlexander Leidinger schedpolicyname((int)*ip); 68598a68a58SAlexander Leidinger ip++; 68698a68a58SAlexander Leidinger narg--; 68798a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_sendfile) { 68898a68a58SAlexander Leidinger print_number(ip,narg,c); 68998a68a58SAlexander Leidinger print_number(ip,narg,c); 69098a68a58SAlexander Leidinger print_number(ip,narg,c); 69198a68a58SAlexander Leidinger print_number(ip,narg,c); 69298a68a58SAlexander Leidinger print_number(ip,narg,c); 69398a68a58SAlexander Leidinger print_number(ip,narg,c); 694b850a685SJohn Baldwin (void)putchar(','); 69598a68a58SAlexander Leidinger sendfileflagsname((int)*ip); 69698a68a58SAlexander Leidinger ip++; 69798a68a58SAlexander Leidinger narg--; 69898a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_kldsym) { 69998a68a58SAlexander Leidinger print_number(ip,narg,c); 700b850a685SJohn Baldwin (void)putchar(','); 70198a68a58SAlexander Leidinger kldsymcmdname((int)*ip); 70298a68a58SAlexander Leidinger ip++; 70398a68a58SAlexander Leidinger narg--; 70498a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_sigprocmask) { 70598a68a58SAlexander Leidinger (void)putchar('('); 70698a68a58SAlexander Leidinger sigprocmaskhowname((int)*ip); 70798a68a58SAlexander Leidinger ip++; 70898a68a58SAlexander Leidinger narg--; 70998a68a58SAlexander Leidinger c = ','; 71098a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS___acl_get_file || 71198a68a58SAlexander Leidinger ktr->ktr_code == SYS___acl_set_file || 71298a68a58SAlexander Leidinger ktr->ktr_code == SYS___acl_get_fd || 71398a68a58SAlexander Leidinger ktr->ktr_code == SYS___acl_set_fd || 71498a68a58SAlexander Leidinger ktr->ktr_code == SYS___acl_delete_file || 71598a68a58SAlexander Leidinger ktr->ktr_code == SYS___acl_delete_fd || 71698a68a58SAlexander Leidinger ktr->ktr_code == SYS___acl_aclcheck_file || 71798a68a58SAlexander Leidinger ktr->ktr_code == SYS___acl_aclcheck_fd || 71898a68a58SAlexander Leidinger ktr->ktr_code == SYS___acl_get_link || 71998a68a58SAlexander Leidinger ktr->ktr_code == SYS___acl_set_link || 72098a68a58SAlexander Leidinger ktr->ktr_code == SYS___acl_delete_link || 72198a68a58SAlexander Leidinger ktr->ktr_code == SYS___acl_aclcheck_link) { 72298a68a58SAlexander Leidinger print_number(ip,narg,c); 723b850a685SJohn Baldwin (void)putchar(','); 72498a68a58SAlexander Leidinger acltypename((int)*ip); 72598a68a58SAlexander Leidinger ip++; 72698a68a58SAlexander Leidinger narg--; 72798a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_sigaction) { 72898a68a58SAlexander Leidinger (void)putchar('('); 72998a68a58SAlexander Leidinger signame((int)*ip); 73098a68a58SAlexander Leidinger ip++; 73198a68a58SAlexander Leidinger narg--; 73298a68a58SAlexander Leidinger c = ','; 73398a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_extattrctl) { 73498a68a58SAlexander Leidinger print_number(ip,narg,c); 735b850a685SJohn Baldwin (void)putchar(','); 73698a68a58SAlexander Leidinger extattrctlname((int)*ip); 73798a68a58SAlexander Leidinger ip++; 73898a68a58SAlexander Leidinger narg--; 73998a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_nmount) { 74098a68a58SAlexander Leidinger print_number(ip,narg,c); 74198a68a58SAlexander Leidinger print_number(ip,narg,c); 74298a68a58SAlexander Leidinger (void)putchar(','); 74398a68a58SAlexander Leidinger mountflagsname ((int)*ip); 74498a68a58SAlexander Leidinger ip++; 74598a68a58SAlexander Leidinger narg--; 74698a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_kse_thr_interrupt) { 74798a68a58SAlexander Leidinger print_number(ip,narg,c); 74898a68a58SAlexander Leidinger (void)putchar(','); 74998a68a58SAlexander Leidinger ksethrcmdname ((int)*ip); 75098a68a58SAlexander Leidinger ip++; 75198a68a58SAlexander Leidinger narg--; 75298a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_thr_create) { 75398a68a58SAlexander Leidinger print_number(ip,narg,c); 75498a68a58SAlexander Leidinger print_number(ip,narg,c); 75598a68a58SAlexander Leidinger (void)putchar(','); 75698a68a58SAlexander Leidinger thrcreateflagsname ((int)*ip); 75798a68a58SAlexander Leidinger ip++; 75898a68a58SAlexander Leidinger narg--; 75998a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_thr_kill) { 76098a68a58SAlexander Leidinger print_number(ip,narg,c); 76198a68a58SAlexander Leidinger (void)putchar(','); 76298a68a58SAlexander Leidinger signame ((int)*ip); 76398a68a58SAlexander Leidinger ip++; 76498a68a58SAlexander Leidinger narg--; 76598a68a58SAlexander Leidinger } else if (ktr->ktr_code == SYS_kldunloadf) { 76698a68a58SAlexander Leidinger print_number(ip,narg,c); 76798a68a58SAlexander Leidinger (void)putchar(','); 76898a68a58SAlexander Leidinger kldunloadfflagsname ((int)*ip); 76998a68a58SAlexander Leidinger ip++; 77098a68a58SAlexander Leidinger narg--; 7719b50d902SRodney W. Grimes } 7729b50d902SRodney W. Grimes } 7739b50d902SRodney W. Grimes while (narg) { 77498a68a58SAlexander Leidinger print_number(ip,narg,c); 7759b50d902SRodney W. Grimes } 7769b50d902SRodney W. Grimes (void)putchar(')'); 7779b50d902SRodney W. Grimes } 7789b50d902SRodney W. Grimes (void)putchar('\n'); 7799b50d902SRodney W. Grimes } 7809b50d902SRodney W. Grimes 78191fbb9c1SDavid Malone void 78291fbb9c1SDavid Malone ktrsysret(struct ktr_sysret *ktr) 7839b50d902SRodney W. Grimes { 78491fbb9c1SDavid Malone register_t ret = ktr->ktr_retval; 78591fbb9c1SDavid Malone int error = ktr->ktr_error; 78691fbb9c1SDavid Malone int code = ktr->ktr_code; 7879b50d902SRodney W. Grimes 7889b50d902SRodney W. Grimes if (code >= nsyscalls || code < 0) 7899b50d902SRodney W. Grimes (void)printf("[%d] ", code); 7909b50d902SRodney W. Grimes else 7919b50d902SRodney W. Grimes (void)printf("%s ", syscallnames[code]); 7929b50d902SRodney W. Grimes 7939b50d902SRodney W. Grimes if (error == 0) { 7949b50d902SRodney W. Grimes if (fancy) { 7959b50d902SRodney W. Grimes (void)printf("%d", ret); 7969b50d902SRodney W. Grimes if (ret < 0 || ret > 9) 7977a6ec4cfSDmitrij Tejblum (void)printf("/%#lx", (long)ret); 7989b50d902SRodney W. Grimes } else { 7999b50d902SRodney W. Grimes if (decimal) 8007a6ec4cfSDmitrij Tejblum (void)printf("%ld", (long)ret); 8019b50d902SRodney W. Grimes else 8027a6ec4cfSDmitrij Tejblum (void)printf("%#lx", (long)ret); 8039b50d902SRodney W. Grimes } 8049b50d902SRodney W. Grimes } else if (error == ERESTART) 8059b50d902SRodney W. Grimes (void)printf("RESTART"); 8069b50d902SRodney W. Grimes else if (error == EJUSTRETURN) 8079b50d902SRodney W. Grimes (void)printf("JUSTRETURN"); 8089b50d902SRodney W. Grimes else { 8099b50d902SRodney W. Grimes (void)printf("-1 errno %d", ktr->ktr_error); 8109b50d902SRodney W. Grimes if (fancy) 8119b50d902SRodney W. Grimes (void)printf(" %s", strerror(ktr->ktr_error)); 8129b50d902SRodney W. Grimes } 8139b50d902SRodney W. Grimes (void)putchar('\n'); 8149b50d902SRodney W. Grimes } 8159b50d902SRodney W. Grimes 81691fbb9c1SDavid Malone void 81791fbb9c1SDavid Malone ktrnamei(char *cp, int len) 8189b50d902SRodney W. Grimes { 8199b50d902SRodney W. Grimes (void)printf("\"%.*s\"\n", len, cp); 8209b50d902SRodney W. Grimes } 8219b50d902SRodney W. Grimes 82291fbb9c1SDavid Malone void 823ec4beb5dSPeter Wemm hexdump(char *p, int len, int screenwidth) 8249b50d902SRodney W. Grimes { 825ec4beb5dSPeter Wemm int n, i; 826ec4beb5dSPeter Wemm int width; 827ec4beb5dSPeter Wemm 828ec4beb5dSPeter Wemm width = 0; 829ec4beb5dSPeter Wemm do { 830ec4beb5dSPeter Wemm width += 2; 831ec4beb5dSPeter Wemm i = 13; /* base offset */ 832ec4beb5dSPeter Wemm i += (width / 2) + 1; /* spaces every second byte */ 833ec4beb5dSPeter Wemm i += (width * 2); /* width of bytes */ 834ec4beb5dSPeter Wemm i += 3; /* " |" */ 835ec4beb5dSPeter Wemm i += width; /* each byte */ 836ec4beb5dSPeter Wemm i += 1; /* "|" */ 837ec4beb5dSPeter Wemm } while (i < screenwidth); 838ec4beb5dSPeter Wemm width -= 2; 839ec4beb5dSPeter Wemm 840ec4beb5dSPeter Wemm for (n = 0; n < len; n += width) { 841ec4beb5dSPeter Wemm for (i = n; i < n + width; i++) { 842ec4beb5dSPeter Wemm if ((i % width) == 0) { /* beginning of line */ 843ec4beb5dSPeter Wemm printf(" 0x%04x", i); 844ec4beb5dSPeter Wemm } 845ec4beb5dSPeter Wemm if ((i % 2) == 0) { 846ec4beb5dSPeter Wemm printf(" "); 847ec4beb5dSPeter Wemm } 848ec4beb5dSPeter Wemm if (i < len) 849ec4beb5dSPeter Wemm printf("%02x", p[i] & 0xff); 850ec4beb5dSPeter Wemm else 851ec4beb5dSPeter Wemm printf(" "); 852ec4beb5dSPeter Wemm } 853ec4beb5dSPeter Wemm printf(" |"); 854ec4beb5dSPeter Wemm for (i = n; i < n + width; i++) { 855ec4beb5dSPeter Wemm if (i >= len) 856ec4beb5dSPeter Wemm break; 857ec4beb5dSPeter Wemm if (p[i] >= ' ' && p[i] <= '~') 858ec4beb5dSPeter Wemm printf("%c", p[i]); 859ec4beb5dSPeter Wemm else 860ec4beb5dSPeter Wemm printf("."); 861ec4beb5dSPeter Wemm } 862ec4beb5dSPeter Wemm printf("|\n"); 863ec4beb5dSPeter Wemm } 864ec4beb5dSPeter Wemm if ((i % width) != 0) 865ec4beb5dSPeter Wemm printf("\n"); 866ec4beb5dSPeter Wemm } 867ec4beb5dSPeter Wemm 868ec4beb5dSPeter Wemm void 869ec4beb5dSPeter Wemm visdump(char *dp, int datalen, int screenwidth) 870ec4beb5dSPeter Wemm { 87191fbb9c1SDavid Malone int col = 0; 872ec4beb5dSPeter Wemm char *cp; 87391fbb9c1SDavid Malone int width; 8749b50d902SRodney W. Grimes char visbuf[5]; 8759b50d902SRodney W. Grimes 8769b50d902SRodney W. Grimes (void)printf(" \""); 8779b50d902SRodney W. Grimes col = 8; 8789b50d902SRodney W. Grimes for (;datalen > 0; datalen--, dp++) { 8799b50d902SRodney W. Grimes (void) vis(visbuf, *dp, VIS_CSTYLE, *(dp+1)); 8809b50d902SRodney W. Grimes cp = visbuf; 8819b50d902SRodney W. Grimes /* 8829b50d902SRodney W. Grimes * Keep track of printables and 8839b50d902SRodney W. Grimes * space chars (like fold(1)). 8849b50d902SRodney W. Grimes */ 8859b50d902SRodney W. Grimes if (col == 0) { 8869b50d902SRodney W. Grimes (void)putchar('\t'); 8879b50d902SRodney W. Grimes col = 8; 8889b50d902SRodney W. Grimes } 8899b50d902SRodney W. Grimes switch(*cp) { 8909b50d902SRodney W. Grimes case '\n': 8919b50d902SRodney W. Grimes col = 0; 8929b50d902SRodney W. Grimes (void)putchar('\n'); 8939b50d902SRodney W. Grimes continue; 8949b50d902SRodney W. Grimes case '\t': 8959b50d902SRodney W. Grimes width = 8 - (col&07); 8969b50d902SRodney W. Grimes break; 8979b50d902SRodney W. Grimes default: 8989b50d902SRodney W. Grimes width = strlen(cp); 8999b50d902SRodney W. Grimes } 9009b50d902SRodney W. Grimes if (col + width > (screenwidth-2)) { 9019b50d902SRodney W. Grimes (void)printf("\\\n\t"); 9029b50d902SRodney W. Grimes col = 8; 9039b50d902SRodney W. Grimes } 9049b50d902SRodney W. Grimes col += width; 9059b50d902SRodney W. Grimes do { 9069b50d902SRodney W. Grimes (void)putchar(*cp++); 9079b50d902SRodney W. Grimes } while (*cp); 9089b50d902SRodney W. Grimes } 9099b50d902SRodney W. Grimes if (col == 0) 9109b50d902SRodney W. Grimes (void)printf(" "); 9119b50d902SRodney W. Grimes (void)printf("\"\n"); 9129b50d902SRodney W. Grimes } 9139b50d902SRodney W. Grimes 914ec4beb5dSPeter Wemm void 915ec4beb5dSPeter Wemm ktrgenio(struct ktr_genio *ktr, int len) 916ec4beb5dSPeter Wemm { 917ec4beb5dSPeter Wemm int datalen = len - sizeof (struct ktr_genio); 918ec4beb5dSPeter Wemm char *dp = (char *)ktr + sizeof (struct ktr_genio); 919ec4beb5dSPeter Wemm static int screenwidth = 0; 920ec4beb5dSPeter Wemm int i, binary; 921ec4beb5dSPeter Wemm 922ec4beb5dSPeter Wemm if (screenwidth == 0) { 923ec4beb5dSPeter Wemm struct winsize ws; 924ec4beb5dSPeter Wemm 925ec4beb5dSPeter Wemm if (fancy && ioctl(fileno(stderr), TIOCGWINSZ, &ws) != -1 && 926ec4beb5dSPeter Wemm ws.ws_col > 8) 927ec4beb5dSPeter Wemm screenwidth = ws.ws_col; 928ec4beb5dSPeter Wemm else 929ec4beb5dSPeter Wemm screenwidth = 80; 930ec4beb5dSPeter Wemm } 931ec4beb5dSPeter Wemm printf("fd %d %s %d byte%s\n", ktr->ktr_fd, 932ec4beb5dSPeter Wemm ktr->ktr_rw == UIO_READ ? "read" : "wrote", datalen, 933ec4beb5dSPeter Wemm datalen == 1 ? "" : "s"); 934df0c8868SRobert Watson if (suppressdata) 935df0c8868SRobert Watson return; 936ec4beb5dSPeter Wemm if (maxdata && datalen > maxdata) 937ec4beb5dSPeter Wemm datalen = maxdata; 938ec4beb5dSPeter Wemm 939ec4beb5dSPeter Wemm for (i = 0, binary = 0; i < datalen && binary == 0; i++) { 940ec4beb5dSPeter Wemm if (dp[i] >= 32 && dp[i] < 127) 941ec4beb5dSPeter Wemm continue; 942ec4beb5dSPeter Wemm if (dp[i] == 10 || dp[i] == 13 || dp[i] == 0 || dp[i] == 9) 943ec4beb5dSPeter Wemm continue; 944ec4beb5dSPeter Wemm binary = 1; 945ec4beb5dSPeter Wemm } 946ec4beb5dSPeter Wemm if (binary) 947ec4beb5dSPeter Wemm hexdump(dp, datalen, screenwidth); 948ec4beb5dSPeter Wemm else 949ec4beb5dSPeter Wemm visdump(dp, datalen, screenwidth); 950ec4beb5dSPeter Wemm } 951ec4beb5dSPeter Wemm 95291fbb9c1SDavid Malone const char *signames[] = { 9539b50d902SRodney W. Grimes "NULL", "HUP", "INT", "QUIT", "ILL", "TRAP", "IOT", /* 1 - 6 */ 9549b50d902SRodney W. Grimes "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", /* 7 - 12 */ 9559b50d902SRodney W. Grimes "PIPE", "ALRM", "TERM", "URG", "STOP", "TSTP", /* 13 - 18 */ 9569b50d902SRodney W. Grimes "CONT", "CHLD", "TTIN", "TTOU", "IO", "XCPU", /* 19 - 24 */ 9579b50d902SRodney W. Grimes "XFSZ", "VTALRM", "PROF", "WINCH", "29", "USR1", /* 25 - 30 */ 9589b50d902SRodney W. Grimes "USR2", NULL, /* 31 - 32 */ 9599b50d902SRodney W. Grimes }; 9609b50d902SRodney W. Grimes 96191fbb9c1SDavid Malone void 96291fbb9c1SDavid Malone ktrpsig(struct ktr_psig *psig) 9639b50d902SRodney W. Grimes { 964fd6afe79SKonstantin Belousov if (psig->signo > 0 && psig->signo < NSIG) 9659b50d902SRodney W. Grimes (void)printf("SIG%s ", signames[psig->signo]); 966fd6afe79SKonstantin Belousov else 9675a3e0a1bSMaxim Konovalov (void)printf("SIG %d ", psig->signo); 9689b50d902SRodney W. Grimes if (psig->action == SIG_DFL) 9699b50d902SRodney W. Grimes (void)printf("SIG_DFL\n"); 97091fbb9c1SDavid Malone else { 9717a6ec4cfSDmitrij Tejblum (void)printf("caught handler=0x%lx mask=0x%x code=0x%x\n", 97291fbb9c1SDavid Malone (u_long)psig->action, psig->mask.__bits[0], psig->code); 97391fbb9c1SDavid Malone } 9749b50d902SRodney W. Grimes } 9759b50d902SRodney W. Grimes 97691fbb9c1SDavid Malone void 97791fbb9c1SDavid Malone ktrcsw(struct ktr_csw *cs) 9789b50d902SRodney W. Grimes { 9799b50d902SRodney W. Grimes (void)printf("%s %s\n", cs->out ? "stop" : "resume", 9809b50d902SRodney W. Grimes cs->user ? "user" : "kernel"); 9819b50d902SRodney W. Grimes } 9829b50d902SRodney W. Grimes 9831f4b63f8SJohn Baldwin #define UTRACE_DLOPEN_START 1 9841f4b63f8SJohn Baldwin #define UTRACE_DLOPEN_STOP 2 9851f4b63f8SJohn Baldwin #define UTRACE_DLCLOSE_START 3 9861f4b63f8SJohn Baldwin #define UTRACE_DLCLOSE_STOP 4 9871f4b63f8SJohn Baldwin #define UTRACE_LOAD_OBJECT 5 9881f4b63f8SJohn Baldwin #define UTRACE_UNLOAD_OBJECT 6 9891f4b63f8SJohn Baldwin #define UTRACE_ADD_RUNDEP 7 9901f4b63f8SJohn Baldwin #define UTRACE_PRELOAD_FINISHED 8 9911f4b63f8SJohn Baldwin #define UTRACE_INIT_CALL 9 9921f4b63f8SJohn Baldwin #define UTRACE_FINI_CALL 10 9931f4b63f8SJohn Baldwin 9941f4b63f8SJohn Baldwin struct utrace_rtld { 9951f4b63f8SJohn Baldwin char sig[4]; /* 'RTLD' */ 9961f4b63f8SJohn Baldwin int event; 9971f4b63f8SJohn Baldwin void *handle; 9981f4b63f8SJohn Baldwin void *mapbase; 9991f4b63f8SJohn Baldwin size_t mapsize; 10001f4b63f8SJohn Baldwin int refcnt; 10011f4b63f8SJohn Baldwin char name[MAXPATHLEN]; 10021f4b63f8SJohn Baldwin }; 10031f4b63f8SJohn Baldwin 10041f4b63f8SJohn Baldwin void 10051f4b63f8SJohn Baldwin ktruser_rtld(int len, unsigned char *p) 10061f4b63f8SJohn Baldwin { 10071f4b63f8SJohn Baldwin struct utrace_rtld *ut = (struct utrace_rtld *)p; 10081f4b63f8SJohn Baldwin void *parent; 10091f4b63f8SJohn Baldwin int mode; 10101f4b63f8SJohn Baldwin 10111f4b63f8SJohn Baldwin switch (ut->event) { 10121f4b63f8SJohn Baldwin case UTRACE_DLOPEN_START: 10131f4b63f8SJohn Baldwin mode = ut->refcnt; 10141f4b63f8SJohn Baldwin printf("dlopen(%s, ", ut->name); 10151f4b63f8SJohn Baldwin switch (mode & RTLD_MODEMASK) { 10161f4b63f8SJohn Baldwin case RTLD_NOW: 10171f4b63f8SJohn Baldwin printf("RTLD_NOW"); 10181f4b63f8SJohn Baldwin break; 10191f4b63f8SJohn Baldwin case RTLD_LAZY: 10201f4b63f8SJohn Baldwin printf("RTLD_LAZY"); 10211f4b63f8SJohn Baldwin break; 10221f4b63f8SJohn Baldwin default: 10231f4b63f8SJohn Baldwin printf("%#x", mode & RTLD_MODEMASK); 10241f4b63f8SJohn Baldwin } 10251f4b63f8SJohn Baldwin if (mode & RTLD_GLOBAL) 10261f4b63f8SJohn Baldwin printf(" | RTLD_GLOBAL"); 10271f4b63f8SJohn Baldwin if (mode & RTLD_TRACE) 10281f4b63f8SJohn Baldwin printf(" | RTLD_TRACE"); 10291f4b63f8SJohn Baldwin if (mode & ~(RTLD_MODEMASK | RTLD_GLOBAL | RTLD_TRACE)) 10301f4b63f8SJohn Baldwin printf(" | %#x", mode & 10311f4b63f8SJohn Baldwin ~(RTLD_MODEMASK | RTLD_GLOBAL | RTLD_TRACE)); 10321f4b63f8SJohn Baldwin printf(")\n"); 10331f4b63f8SJohn Baldwin break; 10341f4b63f8SJohn Baldwin case UTRACE_DLOPEN_STOP: 10351f4b63f8SJohn Baldwin printf("%p = dlopen(%s) ref %d\n", ut->handle, ut->name, 10361f4b63f8SJohn Baldwin ut->refcnt); 10371f4b63f8SJohn Baldwin break; 10381f4b63f8SJohn Baldwin case UTRACE_DLCLOSE_START: 10391f4b63f8SJohn Baldwin printf("dlclose(%p) (%s, %d)\n", ut->handle, ut->name, 10401f4b63f8SJohn Baldwin ut->refcnt); 10411f4b63f8SJohn Baldwin break; 10421f4b63f8SJohn Baldwin case UTRACE_DLCLOSE_STOP: 10431f4b63f8SJohn Baldwin printf("dlclose(%p) finished\n", ut->handle); 10441f4b63f8SJohn Baldwin break; 10451f4b63f8SJohn Baldwin case UTRACE_LOAD_OBJECT: 10461f4b63f8SJohn Baldwin printf("RTLD: loaded %p @ %p - %p (%s)\n", ut->handle, 10471f4b63f8SJohn Baldwin ut->mapbase, (char *)ut->mapbase + ut->mapsize - 1, 10481f4b63f8SJohn Baldwin ut->name); 10491f4b63f8SJohn Baldwin break; 10501f4b63f8SJohn Baldwin case UTRACE_UNLOAD_OBJECT: 10511f4b63f8SJohn Baldwin printf("RTLD: unloaded %p @ %p - %p (%s)\n", ut->handle, 10521f4b63f8SJohn Baldwin ut->mapbase, (char *)ut->mapbase + ut->mapsize - 1, 10531f4b63f8SJohn Baldwin ut->name); 10541f4b63f8SJohn Baldwin break; 10551f4b63f8SJohn Baldwin case UTRACE_ADD_RUNDEP: 10561f4b63f8SJohn Baldwin parent = ut->mapbase; 10571f4b63f8SJohn Baldwin printf("RTLD: %p now depends on %p (%s, %d)\n", parent, 10581f4b63f8SJohn Baldwin ut->handle, ut->name, ut->refcnt); 10591f4b63f8SJohn Baldwin break; 10601f4b63f8SJohn Baldwin case UTRACE_PRELOAD_FINISHED: 10611f4b63f8SJohn Baldwin printf("RTLD: LD_PRELOAD finished\n"); 10621f4b63f8SJohn Baldwin break; 10631f4b63f8SJohn Baldwin case UTRACE_INIT_CALL: 10641f4b63f8SJohn Baldwin printf("RTLD: init %p for %p (%s)\n", ut->mapbase, ut->handle, 10651f4b63f8SJohn Baldwin ut->name); 10661f4b63f8SJohn Baldwin break; 10671f4b63f8SJohn Baldwin case UTRACE_FINI_CALL: 10681f4b63f8SJohn Baldwin printf("RTLD: fini %p for %p (%s)\n", ut->mapbase, ut->handle, 10691f4b63f8SJohn Baldwin ut->name); 10701f4b63f8SJohn Baldwin break; 10711f4b63f8SJohn Baldwin default: 10721f4b63f8SJohn Baldwin p += 4; 10731f4b63f8SJohn Baldwin len -= 4; 10741f4b63f8SJohn Baldwin printf("RTLD: %d ", len); 10751f4b63f8SJohn Baldwin while (len--) 10761f4b63f8SJohn Baldwin if (decimal) 10771f4b63f8SJohn Baldwin printf(" %d", *p++); 10781f4b63f8SJohn Baldwin else 10791f4b63f8SJohn Baldwin printf(" %02x", *p++); 10801f4b63f8SJohn Baldwin printf("\n"); 10811f4b63f8SJohn Baldwin } 10821f4b63f8SJohn Baldwin } 10831f4b63f8SJohn Baldwin 1084670b9e9fSJohn Baldwin struct utrace_malloc { 1085670b9e9fSJohn Baldwin void *p; 1086670b9e9fSJohn Baldwin size_t s; 1087670b9e9fSJohn Baldwin void *r; 1088670b9e9fSJohn Baldwin }; 1089670b9e9fSJohn Baldwin 1090670b9e9fSJohn Baldwin void 1091670b9e9fSJohn Baldwin ktruser_malloc(int len, unsigned char *p) 1092670b9e9fSJohn Baldwin { 1093670b9e9fSJohn Baldwin struct utrace_malloc *ut = (struct utrace_malloc *)p; 1094670b9e9fSJohn Baldwin 1095670b9e9fSJohn Baldwin if (ut->p == NULL) { 1096670b9e9fSJohn Baldwin if (ut->s == 0 && ut->r == NULL) 1097670b9e9fSJohn Baldwin printf("malloc_init()\n"); 1098670b9e9fSJohn Baldwin else 1099670b9e9fSJohn Baldwin printf("%p = malloc(%zu)\n", ut->r, ut->s); 1100670b9e9fSJohn Baldwin } else { 1101670b9e9fSJohn Baldwin if (ut->s == 0) 1102670b9e9fSJohn Baldwin printf("free(%p)\n", ut->p); 1103670b9e9fSJohn Baldwin else 1104670b9e9fSJohn Baldwin printf("%p = realloc(%p, %zu)\n", ut->r, ut->p, ut->s); 1105670b9e9fSJohn Baldwin } 1106670b9e9fSJohn Baldwin } 1107670b9e9fSJohn Baldwin 110891fbb9c1SDavid Malone void 110991fbb9c1SDavid Malone ktruser(int len, unsigned char *p) 111082e2dd32SPoul-Henning Kamp { 1111670b9e9fSJohn Baldwin 11121f4b63f8SJohn Baldwin if (len >= 8 && bcmp(p, "RTLD", 4) == 0) { 11131f4b63f8SJohn Baldwin ktruser_rtld(len, p); 11141f4b63f8SJohn Baldwin return; 11151f4b63f8SJohn Baldwin } 11161f4b63f8SJohn Baldwin 1117670b9e9fSJohn Baldwin if (len == sizeof(struct utrace_malloc)) { 1118670b9e9fSJohn Baldwin ktruser_malloc(len, p); 1119670b9e9fSJohn Baldwin return; 1120670b9e9fSJohn Baldwin } 1121670b9e9fSJohn Baldwin 11223f8ba9aeSPoul-Henning Kamp (void)printf("%d ", len); 11233f8ba9aeSPoul-Henning Kamp while (len--) 1124743f9174SPoul-Henning Kamp if (decimal) 1125743f9174SPoul-Henning Kamp (void)printf(" %d", *p++); 1126743f9174SPoul-Henning Kamp else 112782e2dd32SPoul-Henning Kamp (void)printf(" %02x", *p++); 112882e2dd32SPoul-Henning Kamp (void)printf("\n"); 112982e2dd32SPoul-Henning Kamp } 113082e2dd32SPoul-Henning Kamp 113191fbb9c1SDavid Malone void 113291fbb9c1SDavid Malone usage(void) 11339b50d902SRodney W. Grimes { 11349b50d902SRodney W. Grimes (void)fprintf(stderr, 1135df0c8868SRobert Watson "usage: kdump [-dEnlHRsT] [-f trfile] [-m maxdata] [-p pid] [-t [cnisuw]]\n"); 11369b50d902SRodney W. Grimes exit(1); 11379b50d902SRodney W. Grimes } 1138