1 //===-- DNBLog.h ------------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // Created by Greg Clayton on 6/18/07. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef __DNBLog_h__ 15 #define __DNBLog_h__ 16 17 #include "DNBDefs.h" 18 #include <stdint.h> 19 #include <stdio.h> 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 // Flags that get filled in automatically before calling the log callback 26 // function 27 #define DNBLOG_FLAG_FATAL (1u << 0) 28 #define DNBLOG_FLAG_ERROR (1u << 1) 29 #define DNBLOG_FLAG_WARNING (1u << 2) 30 #define DNBLOG_FLAG_DEBUG (1u << 3) 31 #define DNBLOG_FLAG_VERBOSE (1u << 4) 32 #define DNBLOG_FLAG_THREADED (1u << 5) 33 34 #define DNBLOG_ENABLED 35 36 #if defined(DNBLOG_ENABLED) 37 38 void _DNBLog(uint32_t flags, const char *format, ...) 39 __attribute__((format(printf, 2, 3))); 40 void _DNBLogDebug(const char *fmt, ...) __attribute__((format(printf, 1, 2))); 41 void _DNBLogDebugVerbose(const char *fmt, ...) 42 __attribute__((format(printf, 1, 2))); 43 void _DNBLogThreaded(const char *fmt, ...) 44 __attribute__((format(printf, 1, 2))); 45 void _DNBLogThreadedIf(uint32_t mask, const char *fmt, ...) 46 __attribute__((format(printf, 2, 3))); 47 void _DNBLogError(const char *fmt, ...) __attribute__((format(printf, 1, 2))); 48 void _DNBLogFatalError(int err, const char *fmt, ...) 49 __attribute__((format(printf, 2, 3))); 50 void _DNBLogVerbose(const char *fmt, ...) __attribute__((format(printf, 1, 2))); 51 void _DNBLogWarning(const char *fmt, ...) __attribute__((format(printf, 1, 2))); 52 void _DNBLogWarningVerbose(const char *fmt, ...) 53 __attribute__((format(printf, 1, 2))); 54 bool DNBLogCheckLogBit(uint32_t bit); 55 uint32_t DNBLogSetLogMask(uint32_t mask); 56 uint32_t DNBLogGetLogMask(); 57 void DNBLogSetLogCallback(DNBCallbackLog callback, void *baton); 58 DNBCallbackLog DNBLogGetLogCallback(); 59 bool DNBLogEnabled(); 60 bool DNBLogEnabledForAny(uint32_t mask); 61 int DNBLogGetDebug(); 62 void DNBLogSetDebug(int g); 63 int DNBLogGetVerbose(); 64 void DNBLogSetVerbose(int g); 65 66 #define DNBLog(fmt, ...) \ 67 do { \ 68 if (DNBLogEnabled()) { \ 69 _DNBLog(0, fmt, ##__VA_ARGS__); \ 70 } \ 71 } while (0) 72 #define DNBLogDebug(fmt, ...) \ 73 do { \ 74 if (DNBLogEnabled()) { \ 75 _DNBLogDebug(fmt, ##__VA_ARGS__); \ 76 } \ 77 } while (0) 78 #define DNBLogDebugVerbose(fmt, ...) \ 79 do { \ 80 if (DNBLogEnabled()) { \ 81 _DNBLogDebugVerbose(fmt, ##__VA_ARGS__); \ 82 } \ 83 } while (0) 84 #define DNBLogThreaded(fmt, ...) \ 85 do { \ 86 if (DNBLogEnabled()) { \ 87 _DNBLogThreaded(fmt, ##__VA_ARGS__); \ 88 } \ 89 } while (0) 90 #define DNBLogThreadedIf(mask, fmt, ...) \ 91 do { \ 92 if (DNBLogEnabledForAny(mask)) { \ 93 _DNBLogThreaded(fmt, ##__VA_ARGS__); \ 94 } \ 95 } while (0) 96 #define DNBLogError(fmt, ...) \ 97 do { \ 98 if (DNBLogEnabled()) { \ 99 _DNBLogError(fmt, ##__VA_ARGS__); \ 100 } \ 101 } while (0) 102 #define DNBLogFatalError(err, fmt, ...) \ 103 do { \ 104 if (DNBLogEnabled()) { \ 105 _DNBLogFatalError(err, fmt, ##__VA_ARGS__); \ 106 } \ 107 } while (0) 108 #define DNBLogVerbose(fmt, ...) \ 109 do { \ 110 if (DNBLogEnabled()) { \ 111 _DNBLogVerbose(fmt, ##__VA_ARGS__); \ 112 } \ 113 } while (0) 114 #define DNBLogWarning(fmt, ...) \ 115 do { \ 116 if (DNBLogEnabled()) { \ 117 _DNBLogWarning(fmt, ##__VA_ARGS__); \ 118 } \ 119 } while (0) 120 #define DNBLogWarningVerbose(fmt, ...) \ 121 do { \ 122 if (DNBLogEnabled()) { \ 123 _DNBLogWarningVerbose(fmt, ##__VA_ARGS__); \ 124 } \ 125 } while (0) 126 127 #else // #if defined(DNBLOG_ENABLED) 128 129 #define DNBLogDebug(...) ((void)0) 130 #define DNBLogDebugVerbose(...) ((void)0) 131 #define DNBLogThreaded(...) ((void)0) 132 #define DNBLogThreadedIf(...) ((void)0) 133 #define DNBLogError(...) ((void)0) 134 #define DNBLogFatalError(...) ((void)0) 135 #define DNBLogVerbose(...) ((void)0) 136 #define DNBLogWarning(...) ((void)0) 137 #define DNBLogWarningVerbose(...) ((void)0) 138 #define DNBLogGetLogFile() ((FILE *)NULL) 139 #define DNBLogSetLogFile(f) ((void)0) 140 #define DNBLogCheckLogBit(bit) ((bool)false) 141 #define DNBLogSetLogMask(mask) ((uint32_t)0u) 142 #define DNBLogGetLogMask() ((uint32_t)0u) 143 #define DNBLogToASL() ((void)0) 144 #define DNBLogToFile() ((void)0) 145 #define DNBLogCloseLogFile() ((void)0) 146 147 #endif // #else defined(DNBLOG_ENABLED) 148 149 #ifdef __cplusplus 150 } 151 #endif 152 153 #endif // #ifndef __DNBLog_h__ 154