xref: /llvm-project/lldb/tools/debugserver/source/DNBLog.h (revision b9c1b51e45b845debb76d8658edabca70ca56079)
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