]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/include/lldb/Core/Log.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / include / lldb / Core / Log.h
1 //===-- Log.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 #ifndef liblldb_Log_h_
11 #define liblldb_Log_h_
12
13 // C Includes
14 #include <stdbool.h>
15 #include <stdint.h>
16 #include <signal.h>
17 #include <stdio.h>
18 #include <unistd.h>
19
20 // C++ Includes
21 // Other libraries and framework includes
22 // Project includes
23 #include "lldb/lldb-private.h"
24 #include "lldb/Core/ConstString.h"
25 #include "lldb/Core/Flags.h"
26 #include "lldb/Core/PluginInterface.h"
27
28 //----------------------------------------------------------------------
29 // Logging types
30 //----------------------------------------------------------------------
31 #define LLDB_LOG_FLAG_STDOUT    (1u << 0)
32 #define LLDB_LOG_FLAG_STDERR    (1u << 1)
33 #define LLDB_LOG_FLAG_FATAL     (1u << 2)
34 #define LLDB_LOG_FLAG_ERROR     (1u << 3)
35 #define LLDB_LOG_FLAG_WARNING   (1u << 4)
36 #define LLDB_LOG_FLAG_DEBUG     (1u << 5)
37 #define LLDB_LOG_FLAG_VERBOSE   (1u << 6)
38
39 //----------------------------------------------------------------------
40 // Logging Options
41 //----------------------------------------------------------------------
42 #define LLDB_LOG_OPTION_THREADSAFE              (1u << 0)
43 #define LLDB_LOG_OPTION_VERBOSE                 (1u << 1)
44 #define LLDB_LOG_OPTION_DEBUG                   (1u << 2)
45 #define LLDB_LOG_OPTION_PREPEND_SEQUENCE        (1u << 3)
46 #define LLDB_LOG_OPTION_PREPEND_TIMESTAMP       (1u << 4)
47 #define LLDB_LOG_OPTION_PREPEND_PROC_AND_THREAD (1u << 5)
48 #define LLDB_LOG_OPTION_PREPEND_THREAD_NAME     (1U << 6)
49 #define LLDB_LOG_OPTION_BACKTRACE               (1U << 7)
50
51 //----------------------------------------------------------------------
52 // Logging Functions
53 //----------------------------------------------------------------------
54 namespace lldb_private {
55
56 class Log
57 {
58 public:
59
60     //------------------------------------------------------------------
61     // Callback definitions for abstracted plug-in log access.
62     //------------------------------------------------------------------
63     typedef void (*DisableCallback) (const char **categories, Stream *feedback_strm);
64     typedef Log * (*EnableCallback) (lldb::StreamSP &log_stream_sp,
65                                      uint32_t log_options,
66                                      const char **categories,
67                                      Stream *feedback_strm);
68     typedef void (*ListCategoriesCallback) (Stream *strm);
69
70     struct Callbacks
71     {
72         DisableCallback disable;
73         EnableCallback enable;
74         ListCategoriesCallback list_categories;
75     };
76
77     //------------------------------------------------------------------
78     // Static accessors for logging channels
79     //------------------------------------------------------------------
80     static void
81     RegisterLogChannel (const ConstString &channel,
82                         const Log::Callbacks &log_callbacks);
83
84     static bool
85     UnregisterLogChannel (const ConstString &channel);
86
87     static bool
88     GetLogChannelCallbacks (const ConstString &channel,
89                             Log::Callbacks &log_callbacks);
90
91
92     static void
93     EnableAllLogChannels (lldb::StreamSP &log_stream_sp,
94                           uint32_t log_options,
95                           const char **categories,
96                           Stream *feedback_strm);
97
98     static void
99     DisableAllLogChannels (Stream *feedback_strm);
100
101     static void
102     ListAllLogChannels (Stream *strm);
103
104     static void
105     Initialize ();
106
107     static void
108     Terminate ();
109     
110     //------------------------------------------------------------------
111     // Auto completion
112     //------------------------------------------------------------------
113     static void
114     AutoCompleteChannelName (const char *channel_name, 
115                              StringList &matches);
116
117     //------------------------------------------------------------------
118     // Member functions
119     //------------------------------------------------------------------
120     Log ();
121
122     Log (const lldb::StreamSP &stream_sp);
123
124     ~Log ();
125
126     void
127     PutCString (const char *cstr);
128
129     void
130     Printf (const char *format, ...)  __attribute__ ((format (printf, 2, 3)));
131
132     void
133     VAPrintf (const char *format, va_list args);
134
135     void
136     PrintfWithFlags( uint32_t flags, const char *format, ...)  __attribute__ ((format (printf, 3, 4)));
137
138     void
139     LogIf (uint32_t mask, const char *fmt, ...)  __attribute__ ((format (printf, 3, 4)));
140
141     void
142     Debug (const char *fmt, ...)  __attribute__ ((format (printf, 2, 3)));
143
144     void
145     DebugVerbose (const char *fmt, ...)  __attribute__ ((format (printf, 2, 3)));
146
147     void
148     Error (const char *fmt, ...)  __attribute__ ((format (printf, 2, 3)));
149
150     void
151     FatalError (int err, const char *fmt, ...)  __attribute__ ((format (printf, 3, 4)));
152
153     void
154     Verbose (const char *fmt, ...)  __attribute__ ((format (printf, 2, 3)));
155
156     void
157     Warning (const char *fmt, ...)  __attribute__ ((format (printf, 2, 3)));
158
159     void
160     WarningVerbose (const char *fmt, ...)  __attribute__ ((format (printf, 2, 3)));
161
162     Flags &
163     GetOptions();
164
165     const Flags &
166     GetOptions() const;
167
168     Flags &
169     GetMask();
170
171     const Flags &
172     GetMask() const;
173
174     bool
175     GetVerbose() const;
176
177     bool
178     GetDebug() const;
179
180     void
181     SetStream (const lldb::StreamSP &stream_sp)
182     {
183         m_stream_sp = stream_sp;
184     }
185
186 protected:
187     //------------------------------------------------------------------
188     // Member variables
189     //------------------------------------------------------------------
190     lldb::StreamSP m_stream_sp;
191     Flags m_options;
192     Flags m_mask_bits;
193
194     void
195     PrintfWithFlagsVarArg (uint32_t flags, const char *format, va_list args);
196
197 private:
198     DISALLOW_COPY_AND_ASSIGN (Log);
199 };
200
201
202 class LogChannel : public PluginInterface
203 {
204 public:
205     LogChannel ();
206
207     virtual
208     ~LogChannel ();
209
210     static lldb::LogChannelSP
211     FindPlugin (const char *plugin_name);
212
213     // categories is a an array of chars that ends with a NULL element.
214     virtual void
215     Disable (const char **categories, Stream *feedback_strm) = 0;
216
217     virtual bool
218     Enable (lldb::StreamSP &log_stream_sp,
219             uint32_t log_options,
220             Stream *feedback_strm,      // Feedback stream for argument errors etc
221             const char **categories) = 0;// The categories to enable within this logging stream, if empty, enable default set
222
223     virtual void
224     ListCategories (Stream *strm) = 0;
225
226 protected:
227     std::unique_ptr<Log> m_log_ap;
228
229 private:
230     DISALLOW_COPY_AND_ASSIGN (LogChannel);
231 };
232
233
234 } // namespace lldb_private
235
236 #endif  // liblldb_Log_H_