1*0a6a1f1dSLionel Sambuc /* $NetBSD: ktrace.h,v 1.61 2013/12/09 17:43:58 pooka Exp $ */ 26c8f7fc3SBen Gras 36c8f7fc3SBen Gras /* 46c8f7fc3SBen Gras * Copyright (c) 1988, 1993 56c8f7fc3SBen Gras * The Regents of the University of California. All rights reserved. 66c8f7fc3SBen Gras * 76c8f7fc3SBen Gras * Redistribution and use in source and binary forms, with or without 86c8f7fc3SBen Gras * modification, are permitted provided that the following conditions 96c8f7fc3SBen Gras * are met: 106c8f7fc3SBen Gras * 1. Redistributions of source code must retain the above copyright 116c8f7fc3SBen Gras * notice, this list of conditions and the following disclaimer. 126c8f7fc3SBen Gras * 2. Redistributions in binary form must reproduce the above copyright 136c8f7fc3SBen Gras * notice, this list of conditions and the following disclaimer in the 146c8f7fc3SBen Gras * documentation and/or other materials provided with the distribution. 156c8f7fc3SBen Gras * 3. Neither the name of the University nor the names of its contributors 166c8f7fc3SBen Gras * may be used to endorse or promote products derived from this software 176c8f7fc3SBen Gras * without specific prior written permission. 186c8f7fc3SBen Gras * 196c8f7fc3SBen Gras * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 206c8f7fc3SBen Gras * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 216c8f7fc3SBen Gras * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 226c8f7fc3SBen Gras * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 236c8f7fc3SBen Gras * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 246c8f7fc3SBen Gras * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 256c8f7fc3SBen Gras * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 266c8f7fc3SBen Gras * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 276c8f7fc3SBen Gras * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 286c8f7fc3SBen Gras * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 296c8f7fc3SBen Gras * SUCH DAMAGE. 306c8f7fc3SBen Gras * 316c8f7fc3SBen Gras * @(#)ktrace.h 8.2 (Berkeley) 2/19/95 326c8f7fc3SBen Gras */ 336c8f7fc3SBen Gras 346c8f7fc3SBen Gras #ifndef _SYS_KTRACE_H_ 356c8f7fc3SBen Gras #define _SYS_KTRACE_H_ 366c8f7fc3SBen Gras 376c8f7fc3SBen Gras #include <sys/mutex.h> 38*0a6a1f1dSLionel Sambuc #include <sys/lwp.h> 396c8f7fc3SBen Gras 406c8f7fc3SBen Gras /* 416c8f7fc3SBen Gras * operations to ktrace system call (KTROP(op)) 426c8f7fc3SBen Gras */ 436c8f7fc3SBen Gras #define KTROP_SET 0 /* set trace points */ 446c8f7fc3SBen Gras #define KTROP_CLEAR 1 /* clear trace points */ 456c8f7fc3SBen Gras #define KTROP_CLEARFILE 2 /* stop all tracing to file */ 466c8f7fc3SBen Gras #define KTROP_MASK 0x3 476c8f7fc3SBen Gras #define KTROP(o) ((o)&KTROP_MASK) /* macro to extract operation */ 486c8f7fc3SBen Gras /* 496c8f7fc3SBen Gras * flags (ORed in with operation) 506c8f7fc3SBen Gras */ 516c8f7fc3SBen Gras #define KTRFLAG_DESCEND 4 /* perform op on all children too */ 526c8f7fc3SBen Gras 536c8f7fc3SBen Gras /* 546c8f7fc3SBen Gras * ktrace record header 556c8f7fc3SBen Gras */ 566c8f7fc3SBen Gras struct ktr_header { 576c8f7fc3SBen Gras int ktr_len; /* length of record minus length of old header */ 586c8f7fc3SBen Gras #if BYTE_ORDER == LITTLE_ENDIAN 596c8f7fc3SBen Gras short ktr_type; /* trace record type */ 606c8f7fc3SBen Gras short ktr_version; /* trace record version */ 616c8f7fc3SBen Gras #else 626c8f7fc3SBen Gras short ktr_version; /* trace record version */ 636c8f7fc3SBen Gras short ktr_type; /* trace record type */ 646c8f7fc3SBen Gras #endif 656c8f7fc3SBen Gras pid_t ktr_pid; /* process id */ 666c8f7fc3SBen Gras char ktr_comm[MAXCOMLEN+1]; /* command name */ 676c8f7fc3SBen Gras union { 686c8f7fc3SBen Gras struct { /* v0 */ 696c8f7fc3SBen Gras struct { 706c8f7fc3SBen Gras int32_t tv_sec; 716c8f7fc3SBen Gras long tv_usec; 726c8f7fc3SBen Gras } _tv; 736c8f7fc3SBen Gras const void *_buf; 746c8f7fc3SBen Gras } _v0; 756c8f7fc3SBen Gras struct { /* v1 */ 766c8f7fc3SBen Gras struct { 776c8f7fc3SBen Gras int32_t tv_sec; 786c8f7fc3SBen Gras long tv_nsec; 796c8f7fc3SBen Gras } _ts; 806c8f7fc3SBen Gras lwpid_t _lid; 816c8f7fc3SBen Gras } _v1; 826c8f7fc3SBen Gras struct { /* v2 */ 836c8f7fc3SBen Gras struct timespec _ts; 846c8f7fc3SBen Gras lwpid_t _lid; 856c8f7fc3SBen Gras } _v2; 866c8f7fc3SBen Gras } _v; 876c8f7fc3SBen Gras }; 886c8f7fc3SBen Gras 896c8f7fc3SBen Gras #define ktr_lid _v._v2._lid 906c8f7fc3SBen Gras #define ktr_olid _v._v1._lid 916c8f7fc3SBen Gras #define ktr_time _v._v2._ts 926c8f7fc3SBen Gras #define ktr_otv _v._v0._tv 936c8f7fc3SBen Gras #define ktr_ots _v._v1._ts 946c8f7fc3SBen Gras #define ktr_ts _v._v2._ts 956c8f7fc3SBen Gras #define ktr_unused _v._v0._buf 966c8f7fc3SBen Gras 976c8f7fc3SBen Gras #define KTR_SHIMLEN offsetof(struct ktr_header, ktr_pid) 986c8f7fc3SBen Gras 996c8f7fc3SBen Gras /* 1006c8f7fc3SBen Gras * Test for kernel trace point 1016c8f7fc3SBen Gras */ 1026c8f7fc3SBen Gras #define KTRPOINT(p, type) \ 1036c8f7fc3SBen Gras (((p)->p_traceflag & (1<<(type))) != 0) 1046c8f7fc3SBen Gras 1056c8f7fc3SBen Gras /* 1066c8f7fc3SBen Gras * ktrace record types 1076c8f7fc3SBen Gras */ 1086c8f7fc3SBen Gras 1096c8f7fc3SBen Gras /* 1106c8f7fc3SBen Gras * KTR_SYSCALL - system call record 1116c8f7fc3SBen Gras */ 1126c8f7fc3SBen Gras #define KTR_SYSCALL 1 1136c8f7fc3SBen Gras struct ktr_syscall { 1146c8f7fc3SBen Gras int ktr_code; /* syscall number */ 1156c8f7fc3SBen Gras int ktr_argsize; /* size of arguments */ 1166c8f7fc3SBen Gras /* 1176c8f7fc3SBen Gras * followed by ktr_argsize/sizeof(register_t) "register_t"s 1186c8f7fc3SBen Gras */ 1196c8f7fc3SBen Gras }; 1206c8f7fc3SBen Gras 1216c8f7fc3SBen Gras /* 1226c8f7fc3SBen Gras * KTR_SYSRET - return from system call record 1236c8f7fc3SBen Gras */ 1246c8f7fc3SBen Gras #define KTR_SYSRET 2 1256c8f7fc3SBen Gras struct ktr_sysret { 1266c8f7fc3SBen Gras short ktr_code; 1276c8f7fc3SBen Gras short ktr_eosys; /* XXX unused */ 1286c8f7fc3SBen Gras int ktr_error; 1296c8f7fc3SBen Gras register_t ktr_retval; 1306c8f7fc3SBen Gras register_t ktr_retval_1; 1316c8f7fc3SBen Gras }; 1326c8f7fc3SBen Gras 1336c8f7fc3SBen Gras /* 1346c8f7fc3SBen Gras * KTR_NAMEI - namei record 1356c8f7fc3SBen Gras */ 1366c8f7fc3SBen Gras #define KTR_NAMEI 3 1376c8f7fc3SBen Gras /* record contains pathname */ 1386c8f7fc3SBen Gras 1396c8f7fc3SBen Gras /* 1406c8f7fc3SBen Gras * KTR_GENIO - trace generic process i/o 1416c8f7fc3SBen Gras */ 1426c8f7fc3SBen Gras #define KTR_GENIO 4 1436c8f7fc3SBen Gras struct ktr_genio { 1446c8f7fc3SBen Gras int ktr_fd; 1456c8f7fc3SBen Gras enum uio_rw ktr_rw; 1466c8f7fc3SBen Gras /* 1476c8f7fc3SBen Gras * followed by data successfully read/written 1486c8f7fc3SBen Gras */ 1496c8f7fc3SBen Gras }; 1506c8f7fc3SBen Gras 1516c8f7fc3SBen Gras /* 1526c8f7fc3SBen Gras * KTR_PSIG - trace processed signal 1536c8f7fc3SBen Gras */ 1546c8f7fc3SBen Gras #define KTR_PSIG 5 1556c8f7fc3SBen Gras struct ktr_psig { 1566c8f7fc3SBen Gras int signo; 1576c8f7fc3SBen Gras sig_t action; 1586c8f7fc3SBen Gras sigset_t mask; 1596c8f7fc3SBen Gras int code; 1606c8f7fc3SBen Gras /* 1616c8f7fc3SBen Gras * followed by optional siginfo_t 1626c8f7fc3SBen Gras */ 1636c8f7fc3SBen Gras }; 1646c8f7fc3SBen Gras 1656c8f7fc3SBen Gras /* 1666c8f7fc3SBen Gras * KTR_CSW - trace context switches 1676c8f7fc3SBen Gras */ 1686c8f7fc3SBen Gras #define KTR_CSW 6 1696c8f7fc3SBen Gras struct ktr_csw { 1706c8f7fc3SBen Gras int out; /* 1 if switch out, 0 if switch in */ 1716c8f7fc3SBen Gras int user; /* 1 if usermode (ivcsw), 0 if kernel (vcsw) */ 1726c8f7fc3SBen Gras }; 1736c8f7fc3SBen Gras 1746c8f7fc3SBen Gras /* 1756c8f7fc3SBen Gras * KTR_EMUL - emulation change 1766c8f7fc3SBen Gras */ 1776c8f7fc3SBen Gras #define KTR_EMUL 7 1786c8f7fc3SBen Gras /* record contains emulation name */ 1796c8f7fc3SBen Gras 1806c8f7fc3SBen Gras /* 1816c8f7fc3SBen Gras * KTR_USER - user record 1826c8f7fc3SBen Gras */ 1836c8f7fc3SBen Gras #define KTR_USER 8 1846c8f7fc3SBen Gras #define KTR_USER_MAXIDLEN 20 1856c8f7fc3SBen Gras #define KTR_USER_MAXLEN 2048 /* maximum length of passed data */ 1866c8f7fc3SBen Gras struct ktr_user { 1876c8f7fc3SBen Gras char ktr_id[KTR_USER_MAXIDLEN]; /* string id of caller */ 1886c8f7fc3SBen Gras /* 1896c8f7fc3SBen Gras * Followed by ktr_len - sizeof(struct ktr_user) of user data. 1906c8f7fc3SBen Gras */ 1916c8f7fc3SBen Gras }; 1926c8f7fc3SBen Gras 1936c8f7fc3SBen Gras /* 1946c8f7fc3SBen Gras * KTR_EXEC_ARG, KTR_EXEC_ENV - Arguments and environment from exec 1956c8f7fc3SBen Gras */ 1966c8f7fc3SBen Gras #define KTR_EXEC_ARG 10 1976c8f7fc3SBen Gras #define KTR_EXEC_ENV 11 1986c8f7fc3SBen Gras /* record contains arg/env string */ 1996c8f7fc3SBen Gras 2006c8f7fc3SBen Gras /* 2016c8f7fc3SBen Gras * KTR_SAUPCALL - scheduler activated upcall. 2026c8f7fc3SBen Gras * 2036c8f7fc3SBen Gras * The structure is no longer used, but retained for compatibility. 2046c8f7fc3SBen Gras */ 2056c8f7fc3SBen Gras #define KTR_SAUPCALL 13 2066c8f7fc3SBen Gras struct ktr_saupcall { 2076c8f7fc3SBen Gras int ktr_type; 2086c8f7fc3SBen Gras int ktr_nevent; 2096c8f7fc3SBen Gras int ktr_nint; 2106c8f7fc3SBen Gras void *ktr_sas; 2116c8f7fc3SBen Gras void *ktr_ap; 2126c8f7fc3SBen Gras /* 2136c8f7fc3SBen Gras * followed by nevent sa_t's from sas[] 2146c8f7fc3SBen Gras */ 2156c8f7fc3SBen Gras }; 2166c8f7fc3SBen Gras 2176c8f7fc3SBen Gras /* 2186c8f7fc3SBen Gras * KTR_MIB - MIB name and data 2196c8f7fc3SBen Gras */ 2206c8f7fc3SBen Gras #define KTR_MIB 14 2216c8f7fc3SBen Gras /* Record contains MIB name */ 2226c8f7fc3SBen Gras 2236c8f7fc3SBen Gras /* 2246c8f7fc3SBen Gras * KTR_EXEC_FD - Opened file descriptor from exec 2256c8f7fc3SBen Gras */ 2266c8f7fc3SBen Gras #define KTR_EXEC_FD 15 2276c8f7fc3SBen Gras struct ktr_execfd { 2286c8f7fc3SBen Gras int ktr_fd; 2296c8f7fc3SBen Gras u_int ktr_dtype; /* one of DTYPE_* constants */ 2306c8f7fc3SBen Gras }; 2316c8f7fc3SBen Gras 2326c8f7fc3SBen Gras /* 2336c8f7fc3SBen Gras * kernel trace points (in p_traceflag) 2346c8f7fc3SBen Gras */ 2356c8f7fc3SBen Gras #define KTRFAC_MASK 0x00ffffff 2366c8f7fc3SBen Gras #define KTRFAC_SYSCALL (1<<KTR_SYSCALL) 2376c8f7fc3SBen Gras #define KTRFAC_SYSRET (1<<KTR_SYSRET) 2386c8f7fc3SBen Gras #define KTRFAC_NAMEI (1<<KTR_NAMEI) 2396c8f7fc3SBen Gras #define KTRFAC_GENIO (1<<KTR_GENIO) 2406c8f7fc3SBen Gras #define KTRFAC_PSIG (1<<KTR_PSIG) 2416c8f7fc3SBen Gras #define KTRFAC_CSW (1<<KTR_CSW) 2426c8f7fc3SBen Gras #define KTRFAC_EMUL (1<<KTR_EMUL) 2436c8f7fc3SBen Gras #define KTRFAC_USER (1<<KTR_USER) 2446c8f7fc3SBen Gras #define KTRFAC_EXEC_ARG (1<<KTR_EXEC_ARG) 2456c8f7fc3SBen Gras #define KTRFAC_EXEC_ENV (1<<KTR_EXEC_ENV) 2466c8f7fc3SBen Gras #define KTRFAC_MIB (1<<KTR_MIB) 2476c8f7fc3SBen Gras #define KTRFAC_EXEC_FD (1<<KTR_EXEC_FD) 2486c8f7fc3SBen Gras /* 2496c8f7fc3SBen Gras * trace flags (also in p_traceflags) 2506c8f7fc3SBen Gras */ 2516c8f7fc3SBen Gras #define KTRFAC_PERSISTENT 0x80000000 /* persistent trace across sugid 2526c8f7fc3SBen Gras exec (exclusive) */ 2536c8f7fc3SBen Gras #define KTRFAC_INHERIT 0x40000000 /* pass trace flags to children */ 2546c8f7fc3SBen Gras #define KTRFAC_TRC_EMUL 0x10000000 /* ktrace KTR_EMUL before next trace */ 2556c8f7fc3SBen Gras #define KTRFAC_VER_MASK 0x0f000000 /* record version mask */ 2566c8f7fc3SBen Gras #define KTRFAC_VER_SHIFT 24 /* record version shift */ 2576c8f7fc3SBen Gras 2586c8f7fc3SBen Gras #define KTRFAC_VERSION(tf) (((tf) & KTRFAC_VER_MASK) >> KTRFAC_VER_SHIFT) 2596c8f7fc3SBen Gras 2606c8f7fc3SBen Gras #define KTRFACv0 (0 << KTRFAC_VER_SHIFT) 2616c8f7fc3SBen Gras #define KTRFACv1 (1 << KTRFAC_VER_SHIFT) 2626c8f7fc3SBen Gras #define KTRFACv2 (2 << KTRFAC_VER_SHIFT) 2636c8f7fc3SBen Gras 2646c8f7fc3SBen Gras #ifndef _KERNEL 2656c8f7fc3SBen Gras 2666c8f7fc3SBen Gras #include <sys/cdefs.h> 2676c8f7fc3SBen Gras 2686c8f7fc3SBen Gras __BEGIN_DECLS 2696c8f7fc3SBen Gras int ktrace(const char *, int, int, pid_t); 2706c8f7fc3SBen Gras int fktrace(int, int, int, pid_t); 2716c8f7fc3SBen Gras int utrace(const char *, void *, size_t); 2726c8f7fc3SBen Gras __END_DECLS 2736c8f7fc3SBen Gras 2746c8f7fc3SBen Gras #else 2756c8f7fc3SBen Gras 2766c8f7fc3SBen Gras void ktrinit(void); 2776c8f7fc3SBen Gras void ktrderef(struct proc *); 2786c8f7fc3SBen Gras void ktradref(struct proc *); 2796c8f7fc3SBen Gras 2806c8f7fc3SBen Gras extern kmutex_t ktrace_lock; 2816c8f7fc3SBen Gras extern int ktrace_on; 2826c8f7fc3SBen Gras 2836c8f7fc3SBen Gras int ktruser(const char *, void *, size_t, int); 2846c8f7fc3SBen Gras bool ktr_point(int); 2856c8f7fc3SBen Gras 2866c8f7fc3SBen Gras void ktr_csw(int, int); 2876c8f7fc3SBen Gras void ktr_emul(void); 2886c8f7fc3SBen Gras void ktr_geniov(int, enum uio_rw, struct iovec *, size_t, int); 2896c8f7fc3SBen Gras void ktr_genio(int, enum uio_rw, const void *, size_t, int); 2906c8f7fc3SBen Gras void ktr_mibio(int, enum uio_rw, const void *, size_t, int); 2916c8f7fc3SBen Gras void ktr_namei(const char *, size_t); 2926c8f7fc3SBen Gras void ktr_namei2(const char *, size_t, const char *, size_t); 2936c8f7fc3SBen Gras void ktr_psig(int, sig_t, const sigset_t *, const ksiginfo_t *); 2946c8f7fc3SBen Gras void ktr_syscall(register_t, const register_t [], int); 2956c8f7fc3SBen Gras void ktr_sysret(register_t, int, register_t *); 2966c8f7fc3SBen Gras void ktr_kuser(const char *, void *, size_t); 2976c8f7fc3SBen Gras void ktr_mib(const int *a , u_int b); 2986c8f7fc3SBen Gras void ktr_execarg(const void *, size_t); 2996c8f7fc3SBen Gras void ktr_execenv(const void *, size_t); 3006c8f7fc3SBen Gras void ktr_execfd(int, u_int); 3016c8f7fc3SBen Gras 302*0a6a1f1dSLionel Sambuc int ktrace_common(lwp_t *, int, int, int, file_t **); 303*0a6a1f1dSLionel Sambuc 304*0a6a1f1dSLionel Sambuc static inline int 305*0a6a1f1dSLionel Sambuc ktrenter(lwp_t *l) 306*0a6a1f1dSLionel Sambuc { 307*0a6a1f1dSLionel Sambuc 308*0a6a1f1dSLionel Sambuc if ((l->l_pflag & LP_KTRACTIVE) != 0) 309*0a6a1f1dSLionel Sambuc return 1; 310*0a6a1f1dSLionel Sambuc l->l_pflag |= LP_KTRACTIVE; 311*0a6a1f1dSLionel Sambuc return 0; 312*0a6a1f1dSLionel Sambuc } 313*0a6a1f1dSLionel Sambuc 314*0a6a1f1dSLionel Sambuc static inline void 315*0a6a1f1dSLionel Sambuc ktrexit(lwp_t *l) 316*0a6a1f1dSLionel Sambuc { 317*0a6a1f1dSLionel Sambuc 318*0a6a1f1dSLionel Sambuc l->l_pflag &= ~LP_KTRACTIVE; 319*0a6a1f1dSLionel Sambuc } 320*0a6a1f1dSLionel Sambuc 3216c8f7fc3SBen Gras static inline bool 3226c8f7fc3SBen Gras ktrpoint(int fac) 3236c8f7fc3SBen Gras { 3246c8f7fc3SBen Gras return __predict_false(ktrace_on) && __predict_false(ktr_point(1 << fac)); 3256c8f7fc3SBen Gras } 3266c8f7fc3SBen Gras 3276c8f7fc3SBen Gras static inline void 3286c8f7fc3SBen Gras ktrcsw(int a, int b) 3296c8f7fc3SBen Gras { 3306c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 3316c8f7fc3SBen Gras ktr_csw(a, b); 3326c8f7fc3SBen Gras } 3336c8f7fc3SBen Gras 3346c8f7fc3SBen Gras static inline void 3356c8f7fc3SBen Gras ktremul(void) 3366c8f7fc3SBen Gras { 3376c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 3386c8f7fc3SBen Gras ktr_emul(); 3396c8f7fc3SBen Gras } 3406c8f7fc3SBen Gras 3416c8f7fc3SBen Gras static inline void 3426c8f7fc3SBen Gras ktrgenio(int a, enum uio_rw b, const void *c, size_t d, int e) 3436c8f7fc3SBen Gras { 3446c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 3456c8f7fc3SBen Gras ktr_genio(a, b, c, d, e); 3466c8f7fc3SBen Gras } 3476c8f7fc3SBen Gras 3486c8f7fc3SBen Gras static inline void 3496c8f7fc3SBen Gras ktrgeniov(int a, enum uio_rw b, struct iovec *c, int d, int e) 3506c8f7fc3SBen Gras { 3516c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 3526c8f7fc3SBen Gras ktr_geniov(a, b, c, d, e); 3536c8f7fc3SBen Gras } 3546c8f7fc3SBen Gras 3556c8f7fc3SBen Gras static inline void 3566c8f7fc3SBen Gras ktrmibio(int a, enum uio_rw b, const void *c, size_t d, int e) 3576c8f7fc3SBen Gras { 3586c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 3596c8f7fc3SBen Gras ktr_mibio(a, b, c, d, e); 3606c8f7fc3SBen Gras } 3616c8f7fc3SBen Gras 3626c8f7fc3SBen Gras static inline void 3636c8f7fc3SBen Gras ktrnamei(const char *a, size_t b) 3646c8f7fc3SBen Gras { 3656c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 3666c8f7fc3SBen Gras ktr_namei(a, b); 3676c8f7fc3SBen Gras } 3686c8f7fc3SBen Gras 3696c8f7fc3SBen Gras static inline void 3706c8f7fc3SBen Gras ktrnamei2(const char *a, size_t b, const char *c, size_t d) 3716c8f7fc3SBen Gras { 3726c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 3736c8f7fc3SBen Gras ktr_namei2(a, b, c, d); 3746c8f7fc3SBen Gras } 3756c8f7fc3SBen Gras 3766c8f7fc3SBen Gras static inline void 3776c8f7fc3SBen Gras ktrpsig(int a, sig_t b, const sigset_t *c, const ksiginfo_t * d) 3786c8f7fc3SBen Gras { 3796c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 3806c8f7fc3SBen Gras ktr_psig(a, b, c, d); 3816c8f7fc3SBen Gras } 3826c8f7fc3SBen Gras 3836c8f7fc3SBen Gras static inline void 3846c8f7fc3SBen Gras ktrsyscall(register_t code, const register_t args[], int narg) 3856c8f7fc3SBen Gras { 3866c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 3876c8f7fc3SBen Gras ktr_syscall(code, args, narg); 3886c8f7fc3SBen Gras } 3896c8f7fc3SBen Gras 3906c8f7fc3SBen Gras static inline void 3916c8f7fc3SBen Gras ktrsysret(register_t a, int b, register_t *c) 3926c8f7fc3SBen Gras { 3936c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 3946c8f7fc3SBen Gras ktr_sysret(a, b, c); 3956c8f7fc3SBen Gras } 3966c8f7fc3SBen Gras 3976c8f7fc3SBen Gras static inline void 3986c8f7fc3SBen Gras ktrkuser(const char *a, void *b, size_t c) 3996c8f7fc3SBen Gras { 4006c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 4016c8f7fc3SBen Gras ktr_kuser(a, b, c); 4026c8f7fc3SBen Gras } 4036c8f7fc3SBen Gras 4046c8f7fc3SBen Gras static inline void 4056c8f7fc3SBen Gras ktrmib(const int *a , u_int b) 4066c8f7fc3SBen Gras { 4076c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 4086c8f7fc3SBen Gras ktr_mib(a, b); 4096c8f7fc3SBen Gras } 4106c8f7fc3SBen Gras 4116c8f7fc3SBen Gras static inline void 4126c8f7fc3SBen Gras ktrexecarg(const void *a, size_t b) 4136c8f7fc3SBen Gras { 4146c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 4156c8f7fc3SBen Gras ktr_execarg(a, b); 4166c8f7fc3SBen Gras } 4176c8f7fc3SBen Gras 4186c8f7fc3SBen Gras static inline void 4196c8f7fc3SBen Gras ktrexecenv(const void *a, size_t b) 4206c8f7fc3SBen Gras { 4216c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 4226c8f7fc3SBen Gras ktr_execenv(a, b); 4236c8f7fc3SBen Gras } 4246c8f7fc3SBen Gras 4256c8f7fc3SBen Gras static inline void 4266c8f7fc3SBen Gras ktrexecfd(int fd, u_int dtype) 4276c8f7fc3SBen Gras { 4286c8f7fc3SBen Gras if (__predict_false(ktrace_on)) 4296c8f7fc3SBen Gras ktr_execfd(fd, dtype); 4306c8f7fc3SBen Gras } 4316c8f7fc3SBen Gras 4326c8f7fc3SBen Gras #endif /* !_KERNEL */ 4336c8f7fc3SBen Gras 4346c8f7fc3SBen Gras #endif /* _SYS_KTRACE_H_ */ 435