]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - source/Plugins/Process/Windows/Common/ProcessWindowsLog.h
Vendor import of lldb trunk r256945:
[FreeBSD/FreeBSD.git] / source / Plugins / Process / Windows / Common / ProcessWindowsLog.h
1 //===-- ProcessWindowsLog.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_ProcessWindowsLog_h_
11 #define liblldb_ProcessWindowsLog_h_
12
13 #include "lldb/Core/Log.h"
14
15 #define WINDOWS_LOG_VERBOSE     (1u << 0)
16 #define WINDOWS_LOG_PROCESS     (1u << 1)    // Log process operations
17 #define WINDOWS_LOG_EXCEPTION   (1u << 1)    // Log exceptions
18 #define WINDOWS_LOG_THREAD      (1u << 2)    // Log thread operations
19 #define WINDOWS_LOG_MEMORY      (1u << 3)    // Log memory reads/writes calls
20 #define WINDOWS_LOG_BREAKPOINTS (1u << 4)    // Log breakpoint operations
21 #define WINDOWS_LOG_STEP        (1u << 5)    // Log step operations
22 #define WINDOWS_LOG_REGISTERS   (1u << 6)    // Log register operations
23 #define WINDOWS_LOG_EVENT       (1u << 7)    // Low level debug events
24 #define WINDOWS_LOG_ALL         (UINT32_MAX)
25
26 enum class LogMaskReq
27 {
28     All,
29     Any
30 };
31
32 class ProcessWindowsLog
33 {
34     static const char *m_pluginname;
35
36 public:
37     // ---------------------------------------------------------------------
38     // Public Static Methods
39     // ---------------------------------------------------------------------
40     static void
41     Initialize();
42
43     static void
44     Terminate();
45
46     static void
47     RegisterPluginName(const char *pluginName)
48     {
49         m_pluginname = pluginName;
50     }
51
52     static void
53     RegisterPluginName(lldb_private::ConstString pluginName)
54     {
55         m_pluginname = pluginName.GetCString();
56     }
57
58     static bool
59     TestLogFlags(uint32_t mask, LogMaskReq req);
60
61     static lldb_private::Log *
62     GetLog();
63
64     static void
65     DisableLog(const char **args, lldb_private::Stream *feedback_strm);
66
67     static lldb_private::Log *
68     EnableLog(lldb::StreamSP &log_stream_sp, uint32_t log_options,
69                const char **args, lldb_private::Stream *feedback_strm);
70
71     static void
72     ListLogCategories(lldb_private::Stream *strm);
73 };
74
75 #define WINLOGF_IF(Flags, Req, Method, ...)              \
76     {                                                    \
77         if (ProcessWindowsLog::TestLogFlags(Flags, Req)) \
78         {                                                \
79             Log *log = ProcessWindowsLog::GetLog();      \
80             if (log)                                     \
81                 log->Method(__VA_ARGS__);                \
82         }                                                \
83     }
84
85 #define WINLOG_IFANY(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::Any, Printf, __VA_ARGS__)
86 #define WINLOG_IFALL(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::All, Printf, __VA_ARGS__)
87 #define WINLOGV_IFANY(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::Any, Verbose, __VA_ARGS__)
88 #define WINLOGV_IFALL(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::All, Verbose, __VA_ARGS__)
89 #define WINLOGD_IFANY(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::Any, Debug, __VA_ARGS__)
90 #define WINLOGD_IFALL(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::All, Debug, __VA_ARGS__)
91 #define WINERR_IFANY(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::Any, Error, __VA_ARGS__)
92 #define WINERR_IFALL(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::All, Error, __VA_ARGS__)
93 #define WINWARN_IFANY(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::Any, Warning, __VA_ARGS__)
94 #define WINWARN_IFALL(Flags, ...) WINLOGF_IF(Flags, LogMaskReq::All, Warning, __VA_ARGS__)
95
96 #endif  // liblldb_ProcessWindowsLog_h_