1254721Semaste//===-- ProcessPOSIXLog.h -----------------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#ifndef liblldb_ProcessPOSIXLog_h_ 11254721Semaste#define liblldb_ProcessPOSIXLog_h_ 12254721Semaste 13254721Semaste// C Includes 14254721Semaste// C++ Includes 15254721Semaste// Other libraries and framework includes 16254721Semaste 17254721Semaste// Project includes 18254721Semaste#include "lldb/Core/Log.h" 19254721Semaste 20254721Semaste#define POSIX_LOG_VERBOSE (1u << 0) 21254721Semaste#define POSIX_LOG_PROCESS (1u << 1) 22254721Semaste#define POSIX_LOG_THREAD (1u << 2) 23254721Semaste#define POSIX_LOG_PACKETS (1u << 3) 24254721Semaste#define POSIX_LOG_MEMORY (1u << 4) // Log memory reads/writes calls 25254721Semaste#define POSIX_LOG_MEMORY_DATA_SHORT (1u << 5) // Log short memory reads/writes bytes 26254721Semaste#define POSIX_LOG_MEMORY_DATA_LONG (1u << 6) // Log all memory reads/writes bytes 27254721Semaste#define POSIX_LOG_BREAKPOINTS (1u << 7) 28254721Semaste#define POSIX_LOG_WATCHPOINTS (1u << 8) 29254721Semaste#define POSIX_LOG_STEP (1u << 9) 30254721Semaste#define POSIX_LOG_COMM (1u << 10) 31254721Semaste#define POSIX_LOG_ASYNC (1u << 11) 32254721Semaste#define POSIX_LOG_PTRACE (1u << 12) 33254721Semaste#define POSIX_LOG_REGISTERS (1u << 13) 34254721Semaste#define POSIX_LOG_ALL (UINT32_MAX) 35254721Semaste#define POSIX_LOG_DEFAULT POSIX_LOG_PACKETS 36254721Semaste 37254721Semaste// The size which determines "short memory reads/writes". 38254721Semaste#define POSIX_LOG_MEMORY_SHORT_BYTES (4 * sizeof(ptrdiff_t)) 39254721Semaste 40254721Semasteclass ProcessPOSIXLog 41254721Semaste{ 42254721Semaste static int m_nestinglevel; 43254721Semaste static const char *m_pluginname; 44254721Semaste 45254721Semastepublic: 46254721Semaste static void 47254721Semaste RegisterPluginName(const char *pluginName) 48254721Semaste { 49254721Semaste m_pluginname = pluginName; 50254721Semaste } 51254721Semaste 52254721Semaste static void 53254721Semaste RegisterPluginName(lldb_private::ConstString pluginName) 54254721Semaste { 55254721Semaste m_pluginname = pluginName.GetCString(); 56254721Semaste } 57254721Semaste 58254721Semaste static lldb_private::Log * 59254721Semaste GetLogIfAllCategoriesSet(uint32_t mask = 0); 60254721Semaste 61254721Semaste static void 62254721Semaste DisableLog (const char **args, lldb_private::Stream *feedback_strm); 63254721Semaste 64254721Semaste static lldb_private::Log * 65254721Semaste EnableLog (lldb::StreamSP &log_stream_sp, uint32_t log_options, 66254721Semaste const char **args, lldb_private::Stream *feedback_strm); 67254721Semaste 68254721Semaste static void 69254721Semaste ListLogCategories (lldb_private::Stream *strm); 70254721Semaste 71254721Semaste static void 72254721Semaste LogIf (uint32_t mask, const char *format, ...); 73254721Semaste 74254721Semaste // The following functions can be used to enable the client to limit 75254721Semaste // logging to only the top level function calls. This is useful for 76254721Semaste // recursive functions. FIXME: not thread safe! 77254721Semaste // Example: 78254721Semaste // void NestingFunc() { 79254721Semaste // LogSP log (ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_ALL)); 80254721Semaste // if (log) 81254721Semaste // { 82254721Semaste // ProcessPOSIXLog::IncNestLevel(); 83254721Semaste // if (ProcessPOSIXLog::AtTopNestLevel()) 84254721Semaste // log->Print(msg); 85254721Semaste // } 86254721Semaste // NestingFunc(); 87254721Semaste // if (log) 88254721Semaste // ProcessPOSIXLog::DecNestLevel(); 89254721Semaste // } 90254721Semaste 91254721Semaste static bool 92254721Semaste AtTopNestLevel() 93254721Semaste { 94254721Semaste return m_nestinglevel == 1; 95254721Semaste } 96254721Semaste 97254721Semaste static void 98254721Semaste IncNestLevel() 99254721Semaste { 100254721Semaste ++m_nestinglevel; 101254721Semaste } 102254721Semaste 103254721Semaste static void 104254721Semaste DecNestLevel() 105254721Semaste { 106254721Semaste --m_nestinglevel; 107254721Semaste assert(m_nestinglevel >= 0); 108254721Semaste } 109254721Semaste}; 110254721Semaste 111254721Semaste#endif // liblldb_ProcessPOSIXLog_h_ 112