J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame^] | 1 | /* |
| 2 | * Copyright 1999-2002 Sun Microsystems, Inc. All Rights Reserved. |
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| 4 | * |
| 5 | * This code is free software; you can redistribute it and/or modify it |
| 6 | * under the terms of the GNU General Public License version 2 only, as |
| 7 | * published by the Free Software Foundation. Sun designates this |
| 8 | * particular file as subject to the "Classpath" exception as provided |
| 9 | * by Sun in the LICENSE file that accompanied this code. |
| 10 | * |
| 11 | * This code is distributed in the hope that it will be useful, but WITHOUT |
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| 14 | * version 2 for more details (a copy is included in the LICENSE file that |
| 15 | * accompanied this code). |
| 16 | * |
| 17 | * You should have received a copy of the GNU General Public License version |
| 18 | * 2 along with this work; if not, write to the Free Software Foundation, |
| 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| 20 | * |
| 21 | * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
| 22 | * CA 95054 USA or visit www.sun.com if you need additional information or |
| 23 | * have any questions. |
| 24 | */ |
| 25 | |
| 26 | #if !defined(_DEBUG_TRACE_H) |
| 27 | #define _DEBUG_TRACE_H |
| 28 | |
| 29 | #if defined(__cplusplus) |
| 30 | extern "C" { |
| 31 | #endif |
| 32 | |
| 33 | #if defined(DEBUG) |
| 34 | |
| 35 | #include "debug_util.h" |
| 36 | |
| 37 | typedef int dtrace_id; |
| 38 | enum { |
| 39 | UNDEFINED_TRACE_ID = -1 /* indicates trace point has not been registered yet */ |
| 40 | }; |
| 41 | |
| 42 | /* prototype for client provided output callback function */ |
| 43 | typedef void (*DTRACE_OUTPUT_CALLBACK)(const char * msg); |
| 44 | |
| 45 | /* prototype for client provided print callback function */ |
| 46 | typedef void (*DTRACE_PRINT_CALLBACK)(const char * file, int line, int argc, const char * fmt, va_list arglist); |
| 47 | |
| 48 | extern void DTrace_EnableAll(dbool_t enabled); |
| 49 | extern void DTrace_EnableFile(const char * file, dbool_t enabled); |
| 50 | extern void DTrace_EnableLine(const char * file, int linenum, dbool_t enabled); |
| 51 | extern void DTrace_SetOutputCallback(DTRACE_OUTPUT_CALLBACK pfn); |
| 52 | extern void DTrace_Initialize(); |
| 53 | extern void DTrace_Shutdown(); |
| 54 | void DTrace_DisableMutex(); |
| 55 | extern void DTrace_VPrintImpl(const char * fmt, va_list arglist); |
| 56 | extern void DTrace_PrintImpl(const char * fmt, ...); |
| 57 | extern void DTrace_PrintFunction(DTRACE_PRINT_CALLBACK pfn, dtrace_id * pFileTraceId, dtrace_id * pTraceId, const char * file, int line, int argc, const char * fmt, ...); |
| 58 | |
| 59 | /* these functions are exported only for use in macros-- do not call them directly!!! */ |
| 60 | extern void DTrace_VPrint(const char * file, int line, int argc, const char * fmt, va_list arglist); |
| 61 | extern void DTrace_VPrintln(const char * file, int line, int argc, const char * fmt, va_list arglist); |
| 62 | |
| 63 | /* each file includes this flag indicating module trace status */ |
| 64 | static dtrace_id _Dt_FileTraceId = UNDEFINED_TRACE_ID; |
| 65 | |
| 66 | /* not meant to be called from client code-- |
| 67 | * it's just a template for the other macros |
| 68 | */ |
| 69 | #define _DTrace_Template(_func, _ac, _f, _a1, _a2, _a3, _a4, _a5, _a6, _a7, _a8) \ |
| 70 | { \ |
| 71 | static dtrace_id _dt_lineid_ = UNDEFINED_TRACE_ID; \ |
| 72 | DTrace_PrintFunction((_func), &_Dt_FileTraceId, &_dt_lineid_, __FILE__, __LINE__, (_ac), (_f), (_a1), (_a2), (_a3), (_a4), (_a5), (_a6), (_a7), (_a8) ); \ |
| 73 | } |
| 74 | |
| 75 | /* printf style trace macros */ |
| 76 | #define DTRACE_PRINT(_fmt) \ |
| 77 | _DTrace_Template(DTrace_VPrint, 0, (_fmt), 0, 0, 0, 0, 0, 0, 0, 0) |
| 78 | #define DTRACE_PRINT1(_fmt, _arg1) \ |
| 79 | _DTrace_Template(DTrace_VPrint, 1, (_fmt), (_arg1), 0, 0, 0, 0, 0, 0, 0) |
| 80 | #define DTRACE_PRINT2(_fmt, _arg1, _arg2) \ |
| 81 | _DTrace_Template(DTrace_VPrint, 2, (_fmt), (_arg1), (_arg2), 0, 0, 0, 0, 0, 0) |
| 82 | #define DTRACE_PRINT3(_fmt, _arg1, _arg2, _arg3) \ |
| 83 | _DTrace_Template(DTrace_VPrint, 3, (_fmt), (_arg1), (_arg2), (_arg3), 0, 0, 0, 0, 0) |
| 84 | #define DTRACE_PRINT4(_fmt, _arg1, _arg2, _arg3, _arg4) \ |
| 85 | _DTrace_Template(DTrace_VPrint, 4, (_fmt), (_arg1), (_arg2), (_arg3), (_arg4), 0, 0, 0, 0) |
| 86 | #define DTRACE_PRINT5(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5) \ |
| 87 | _DTrace_Template(DTrace_VPrint, 5, (_fmt), (_arg1), (_arg2), (_arg3), (_arg4), (_arg5), 0, 0, 0) |
| 88 | #define DTRACE_PRINT6(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6) \ |
| 89 | _DTrace_Template(DTrace_VPrint, 6, (_fmt), (_arg1), (_arg2), (_arg3), (_arg4), (_arg5), (_arg6), 0, 0) |
| 90 | #define DTRACE_PRINT7(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7) \ |
| 91 | _DTrace_Template(DTrace_VPrint, 7, (_fmt), (_arg1), (_arg2), (_arg3), (_arg4), (_arg5), (_arg6), (_arg7), 0) |
| 92 | #define DTRACE_PRINT8(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8) \ |
| 93 | _DTrace_Template(DTrace_VPrint, 8, (_fmt), (_arg1), (_arg2), (_arg3), (_arg4), (_arg5), (_arg6), (_arg7), (_arg8)) |
| 94 | |
| 95 | /* printf style trace macros that automatically output a newline */ |
| 96 | #define DTRACE_PRINTLN(_fmt) \ |
| 97 | _DTrace_Template(DTrace_VPrintln, 0, (_fmt), 0, 0, 0, 0, 0, 0, 0, 0) |
| 98 | #define DTRACE_PRINTLN1(_fmt, _arg1) \ |
| 99 | _DTrace_Template(DTrace_VPrintln, 1, (_fmt), (_arg1), 0, 0, 0, 0, 0, 0, 0) |
| 100 | #define DTRACE_PRINTLN2(_fmt, _arg1, _arg2) \ |
| 101 | _DTrace_Template(DTrace_VPrintln, 2, (_fmt), (_arg1), (_arg2), 0, 0, 0, 0, 0, 0) |
| 102 | #define DTRACE_PRINTLN3(_fmt, _arg1, _arg2, _arg3) \ |
| 103 | _DTrace_Template(DTrace_VPrintln, 3, (_fmt), (_arg1), (_arg2), (_arg3), 0, 0, 0, 0, 0) |
| 104 | #define DTRACE_PRINTLN4(_fmt, _arg1, _arg2, _arg3, _arg4) \ |
| 105 | _DTrace_Template(DTrace_VPrintln, 4, (_fmt), (_arg1), (_arg2), (_arg3), (_arg4), 0, 0, 0, 0) |
| 106 | #define DTRACE_PRINTLN5(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5) \ |
| 107 | _DTrace_Template(DTrace_VPrintln, 5, (_fmt), (_arg1), (_arg2), (_arg3), (_arg4), (_arg5), 0, 0, 0) |
| 108 | #define DTRACE_PRINTLN6(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6) \ |
| 109 | _DTrace_Template(DTrace_VPrintln, 6, (_fmt), (_arg1), (_arg2), (_arg3), (_arg4), (_arg5), (_arg6), 0, 0) |
| 110 | #define DTRACE_PRINTLN7(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7) \ |
| 111 | _DTrace_Template(DTrace_VPrintln, 7, (_fmt), (_arg1), (_arg2), (_arg3), (_arg4), (_arg5), (_arg6), (_arg7), 0) |
| 112 | #define DTRACE_PRINTLN8(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8) \ |
| 113 | _DTrace_Template(DTrace_VPrintln, 8, (_fmt), (_arg1), (_arg2), (_arg3), (_arg4), (_arg5), (_arg6), (_arg7), (_arg8)) |
| 114 | |
| 115 | #else /* else DEBUG not defined */ |
| 116 | |
| 117 | /* printf style trace macros */ |
| 118 | #define DTRACE_PRINT(_fmt) |
| 119 | #define DTRACE_PRINT1(_fmt, _arg1) |
| 120 | #define DTRACE_PRINT2(_fmt, _arg1, _arg2) |
| 121 | #define DTRACE_PRINT3(_fmt, _arg1, _arg2, _arg3) |
| 122 | #define DTRACE_PRINT4(_fmt, _arg1, _arg2, _arg3, _arg4) |
| 123 | #define DTRACE_PRINT5(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5) |
| 124 | #define DTRACE_PRINT6(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6) |
| 125 | #define DTRACE_PRINT7(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7) |
| 126 | #define DTRACE_PRINT8(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8) |
| 127 | |
| 128 | /* printf style trace macros that automatically output a newline */ |
| 129 | #define DTRACE_PRINTLN(_fmt) |
| 130 | #define DTRACE_PRINTLN1(_fmt, _arg1) |
| 131 | #define DTRACE_PRINTLN2(_fmt, _arg1, _arg2) |
| 132 | #define DTRACE_PRINTLN3(_fmt, _arg1, _arg2, _arg3) |
| 133 | #define DTRACE_PRINTLN4(_fmt, _arg1, _arg2, _arg3, _arg4) |
| 134 | #define DTRACE_PRINTLN5(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5) |
| 135 | #define DTRACE_PRINTLN6(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6) |
| 136 | #define DTRACE_PRINTLN7(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7) |
| 137 | #define DTRACE_PRINTLN8(_fmt, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8) |
| 138 | |
| 139 | #endif /* endif DEBUG defined */ |
| 140 | |
| 141 | #if defined(__cplusplus) |
| 142 | } /* extern "C" */ |
| 143 | #endif |
| 144 | |
| 145 | #endif /* _DEBUG_TRACE_H */ |