1/* 2 * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28/* 29 * @OSF_COPYRIGHT@ 30 */ 31/* 32 * Mach Operating System 33 * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University 34 * All Rights Reserved. 35 * 36 * Permission to use, copy, modify and distribute this software and its 37 * documentation is hereby granted, provided that both the copyright 38 * notice and this permission notice appear in all copies of the 39 * software, derivative works or modified versions, and any portions 40 * thereof, and that both notices appear in supporting documentation. 41 * 42 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 43 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 44 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 45 * 46 * Carnegie Mellon requests users of this software to return to 47 * 48 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 49 * School of Computer Science 50 * Carnegie Mellon University 51 * Pittsburgh PA 15213-3890 52 * 53 * any improvements or extensions that they make and grant Carnegie Mellon 54 * the rights to redistribute these changes. 55 */ 56/* 57 */ 58/* 59 * Include file for xpr circular buffer silent tracing. 60 * 61 */ 62/* 63 * If the kernel flag XPRDEBUG is set, the XPR macro is enabled. The 64 * macro should be invoked something like the following: 65 * XPR(XPR_SYSCALLS, "syscall: %d, 0x%x\n", syscallno, arg1, 0,0,0); 66 * which will expand into the following code: 67 * if (xprflags & XPR_SYSCALLS) 68 * xpr("syscall: %d, 0x%x\n", syscallno, arg1, 0,0,0); 69 * Xpr will log the pointer to the printf string and up to 5 arguements, 70 * along with a timestamp and cpuinfo (for multi-processor systems), into 71 * a circular buffer. The actual printf processing is delayed until after 72 * the buffer has been collected. It is assumed that the text/data segments 73 * of the kernel can easily be reconstructed in a post-processor which 74 * performs the printf processing. 75 * 76 * If the XPRDEBUG compilation switch is not set, the XPR macro expands 77 * to nothing. 78 */ 79 80#ifndef _KERN_XPR_H_ 81#define _KERN_XPR_H_ 82 83#ifdef MACH_KERNEL 84#include <xpr_debug.h> 85#else /* MACH_KERNEL */ 86#include <sys/features.h> 87#endif /* MACH_KERNEL */ 88 89#include <machine/xpr.h> 90 91#if XPR_DEBUG 92 93#define XPR(flags, msg, arg1, arg2, arg3, arg4, arg5) \ 94MACRO_BEGIN \ 95 if (xprflags & (flags)) { \ 96 xpr((msg), (long)(arg1), (long)(arg2), \ 97 (long)(arg3), (long)(arg4), (long)(arg5)); \ 98 } \ 99MACRO_END 100 101extern int xprflags; 102 103/* 104 * flags for message types. 105 */ 106#define XPR_TRAPS (1 << 1) 107#define XPR_SCHED (1 << 2) 108#define XPR_LOCK (1 << 3) 109#define XPR_SLOCK (1 << 4) 110#define XPR_PMAP (1 << 6) 111#define XPR_VM_MAP (1 << 7) 112#define XPR_VM_OBJECT (1 << 8) 113#define XPR_VM_OBJECT_CACHE (1 << 9) 114#define XPR_VM_PAGE (1 << 10) 115#define XPR_VM_PAGEOUT (1 << 11) 116#define XPR_MEMORY_OBJECT (1 << 12) 117#define XPR_VM_FAULT (1 << 13) 118#define XPR_VM_OBJECT_REP (1 << 14) 119#define XPR_DEFAULT_PAGER (1 << 15) 120#define XPR_INODE_PAGER (1 << 16) 121#define XPR_INODE_PAGER_DATA (1 << 17) 122#define XPR_XMM (1 << 18) 123 124#else /* XPR_DEBUG */ 125#define XPR(flags, msg, arg1, arg2, arg3, arg4, arg5) 126#endif /* XPR_DEBUG */ 127 128struct xprbuf { 129 const char *msg; 130 long arg1,arg2,arg3,arg4,arg5; 131 int timestamp; 132 int cpuinfo; 133}; 134 135/* Bootstrap XPR facility */ 136extern void xprbootstrap(void); 137 138/* Enable XPR facility */ 139extern void xprinit(void); 140 141/* Log an XPR message */ 142extern void xpr( 143 const char *msg, 144 long arg1, 145 long arg2, 146 long arg3, 147 long arg4, 148 long arg5); 149 150#endif /* _KERN_XPR_H_ */ 151