diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2022-06-24 10:03:03 -0700 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2022-06-24 10:53:15 -0700 |
commit | 1e5d5261e2b6637011a65c929828ca8cb0ab8e2e (patch) | |
tree | 04a9fccea4276705707fc593c8b751dbe9b443e1 | |
parent | 4821508d4db75a535d02b8938f81fac6de66cc26 (diff) | |
download | llvm-1e5d5261e2b6637011a65c929828ca8cb0ab8e2e.zip llvm-1e5d5261e2b6637011a65c929828ca8cb0ab8e2e.tar.gz llvm-1e5d5261e2b6637011a65c929828ca8cb0ab8e2e.tar.bz2 |
[lldb] Add SystemLogHandler for emitting log messages to the system log
Add a system log handler that emits log messages to the operating system
log. In addition to the log handler itself, this patch also introduces a
new Host::SystemLog helper function to abstract over writing to the
system log.
Differential revision: https://reviews.llvm.org/D128321
-rw-r--r-- | lldb/include/lldb/Host/Host.h | 11 | ||||
-rw-r--r-- | lldb/source/Host/common/Host.cpp | 10 | ||||
-rw-r--r-- | lldb/source/Host/macosx/objcxx/Host.mm | 15 |
3 files changed, 36 insertions, 0 deletions
diff --git a/lldb/include/lldb/Host/Host.h b/lldb/include/lldb/Host/Host.h index b0097a1..b3e0cba 100644 --- a/lldb/include/lldb/Host/Host.h +++ b/lldb/include/lldb/Host/Host.h @@ -13,6 +13,7 @@ #include "lldb/Host/HostThread.h" #include "lldb/Utility/Environment.h" #include "lldb/Utility/FileSpec.h" +#include "lldb/Utility/Log.h" #include "lldb/Utility/Timeout.h" #include "lldb/lldb-private-forward.h" #include "lldb/lldb-private.h" @@ -86,6 +87,9 @@ public: StartMonitoringChildProcess(const MonitorChildProcessCallback &callback, lldb::pid_t pid); + /// Emit the given message to the operating system log. + static void SystemLog(llvm::StringRef message); + /// Get the process ID for the calling process. /// /// \return @@ -252,6 +256,13 @@ protected: ProcessInstanceInfoList &proc_infos); }; +/// Log handler that emits log messages to the operating system log. +class SystemLogHandler : public LogHandler { +public: + SystemLogHandler(); + void Emit(llvm::StringRef message) override; +}; + } // namespace lldb_private namespace llvm { diff --git a/lldb/source/Host/common/Host.cpp b/lldb/source/Host/common/Host.cpp index 3310425..925ed95 100644 --- a/lldb/source/Host/common/Host.cpp +++ b/lldb/source/Host/common/Host.cpp @@ -106,6 +106,10 @@ llvm::Expected<HostThread> Host::StartMonitoringChildProcess( }); } +#if !defined(__APPLE__) +void Host::SystemLog(llvm::StringRef message) { llvm::errs() << message; } +#endif + #ifndef __linux__ // Scoped class that will disable thread canceling when it is constructed, and // exception safely restore the previous value it when it goes out of scope. @@ -627,3 +631,9 @@ uint32_t Host::FindProcesses(const ProcessInstanceInfoMatch &match_info, return result; } + +SystemLogHandler::SystemLogHandler() {} + +void SystemLogHandler::Emit(llvm::StringRef message) { + Host::SystemLog(message); +} diff --git a/lldb/source/Host/macosx/objcxx/Host.mm b/lldb/source/Host/macosx/objcxx/Host.mm index 4c369e9..1c990c8 100644 --- a/lldb/source/Host/macosx/objcxx/Host.mm +++ b/lldb/source/Host/macosx/objcxx/Host.mm @@ -82,6 +82,7 @@ #include "../cfcpp/CFCString.h" #include <objc/objc-auto.h> +#include <os/log.h> #include <CoreFoundation/CoreFoundation.h> #include <Foundation/Foundation.h> @@ -98,6 +99,20 @@ int __pthread_fchdir(int fildes); using namespace lldb; using namespace lldb_private; +static os_log_t g_os_log; +static std::once_flag g_os_log_once; + +void Host::SystemLog(llvm::StringRef message) { + if (__builtin_available(macos 10.12, iOS 10, tvOS 10, watchOS 3, *)) { + std::call_once(g_os_log_once, []() { + g_os_log = os_log_create("com.apple.dt.lldb", "lldb"); + }); + os_log(g_os_log, "%{public}s", message.str().c_str()); + } else { + llvm::errs() << message; + } +} + bool Host::GetBundleDirectory(const FileSpec &file, FileSpec &bundle_directory) { #if defined(__APPLE__) |