diff options
Diffstat (limited to 'tools/debugserver/source/MacOSX/OsLogger.cpp')
| -rw-r--r-- | tools/debugserver/source/MacOSX/OsLogger.cpp | 66 | 
1 files changed, 66 insertions, 0 deletions
| diff --git a/tools/debugserver/source/MacOSX/OsLogger.cpp b/tools/debugserver/source/MacOSX/OsLogger.cpp new file mode 100644 index 000000000000..efecea30212f --- /dev/null +++ b/tools/debugserver/source/MacOSX/OsLogger.cpp @@ -0,0 +1,66 @@ +//===-- OsLogger.cpp --------------------------------------------*- C++ -*-===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "OsLogger.h" + +#if LLDB_USE_OS_LOG + +#include <os/log.h> + +#include "DNBDefs.h" +#include "DNBLog.h" + +#define LLDB_OS_LOG_MAX_BUFFER_LENGTH 256 + +namespace { +//---------------------------------------------------------------------- +// Darwin os_log logging callback that can be registered with +// DNBLogSetLogCallback +//---------------------------------------------------------------------- +void DarwinLogCallback(void *baton, uint32_t flags, const char *format, +                       va_list args) { +  if (format == nullptr) +    return; + +  static os_log_t g_logger; +  if (!g_logger) { +    g_logger = os_log_create("com.apple.dt.lldb", "debugserver"); +    if (!g_logger) +      return; +  } + +  os_log_type_t log_type; +  if (flags & DNBLOG_FLAG_FATAL) +    log_type = OS_LOG_TYPE_FAULT; +  else if (flags & DNBLOG_FLAG_ERROR) +    log_type = OS_LOG_TYPE_ERROR; +  else if (flags & DNBLOG_FLAG_WARNING) +    log_type = OS_LOG_TYPE_DEFAULT; +  else if (flags & DNBLOG_FLAG_VERBOSE) +    log_type = OS_LOG_TYPE_DEBUG; +  else +    log_type = OS_LOG_TYPE_DEFAULT; + +  // This code is unfortunate.  os_log* only takes static strings, but +  // our current log API isn't set up to make use of that style. +  char buffer[LLDB_OS_LOG_MAX_BUFFER_LENGTH]; +  vsnprintf(buffer, sizeof(buffer), format, args); +  os_log_with_type(g_logger, log_type, "%{public}s", buffer); +} +} + +DNBCallbackLog OsLogger::GetLogFunction() { +  return _os_log_impl ? DarwinLogCallback : nullptr; +} + +#else + +DNBCallbackLog OsLogger::GetLogFunction() { return nullptr; } + +#endif | 
