//===-- GDBServerLog.cpp ----------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// //---------------------------------------------------------------------- // // GDBServerLog.cpp // liblldb // // Created by Greg Clayton on 6/19/09. // // //---------------------------------------------------------------------- #include "GDBServerLog.h" using namespace lldb; static Log * LogAccessor (bool get, Log *log) { static Log* g_log = NULL; // Leak for now as auto_ptr was being cleaned up // by global constructors before other threads // were done with it. if (get) { // // Debug code below for enabling logging by default // if (g_log == NULL) // { // g_log = new Log("/dev/stdout", false); // g_log->GetMask().SetAllFlagBits(GS_LOG_ALL); // g_log->GetOptions().Set(LLDB_LOG_OPTION_THREADSAFE | LLDB_LOG_OPTION_PREPEND_THREAD_NAME); // } } else { if (g_log) delete g_log; g_log = log; } return g_log; } Log * GDBServerLog::GetLogIfAllCategoriesSet (uint32_t mask) { Log *log = LogAccessor (true, NULL); if (log && mask) { uint32_t log_mask = log->GetMask().GetAllFlagBits(); if ((log_mask & mask) != mask) return NULL; } return log; } void GDBServerLog::SetLog (Log *log) { LogAccessor (false, log); } void GDBServerLog::LogIf (uint32_t mask, const char *format, ...) { Log *log = GDBServerLog::GetLogIfAllCategoriesSet (mask); if (log) { va_list args; va_start (args, format); log->VAPrintf (format, args); va_end (args); } }