From 0a39a9c2cb43f93c82908cabdf73fdd4918a26e5 Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Mon, 25 Oct 2021 16:44:12 +0200 Subject: [PATCH] Modernize and simplify HostInfo::GetOSKernelDescription Replace bool+by-ref argument with llvm::Optional, and move the common implementation into HostInfoPOSIX. Based on my (simple) experiment, the uname and the sysctl approach return the same value on MacOS, so there's no need for a mac-specific implementation of this functionality. Differential Revision: https://reviews.llvm.org/D112457 --- lldb/include/lldb/Host/freebsd/HostInfoFreeBSD.h | 1 - lldb/include/lldb/Host/linux/HostInfoLinux.h | 1 - lldb/include/lldb/Host/macosx/HostInfoMacOSX.h | 1 - lldb/include/lldb/Host/netbsd/HostInfoNetBSD.h | 1 - lldb/include/lldb/Host/openbsd/HostInfoOpenBSD.h | 1 - lldb/include/lldb/Host/posix/HostInfoPosix.h | 1 + lldb/include/lldb/Host/windows/HostInfoWindows.h | 2 +- lldb/source/Host/freebsd/HostInfoFreeBSD.cpp | 14 -------------- lldb/source/Host/linux/HostInfoLinux.cpp | 13 ------------- lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm | 12 ------------ lldb/source/Host/netbsd/HostInfoNetBSD.cpp | 14 -------------- lldb/source/Host/openbsd/HostInfoOpenBSD.cpp | 14 -------------- lldb/source/Host/posix/HostInfoPosix.cpp | 9 +++++++++ lldb/source/Host/windows/HostInfoWindows.cpp | 6 ++---- .../gdb-remote/GDBRemoteCommunicationServerCommon.cpp | 6 +++--- lldb/source/Target/Platform.cpp | 7 +++++-- 16 files changed, 21 insertions(+), 82 deletions(-) diff --git a/lldb/include/lldb/Host/freebsd/HostInfoFreeBSD.h b/lldb/include/lldb/Host/freebsd/HostInfoFreeBSD.h index 8207e90..b2f3f08 100644 --- a/lldb/include/lldb/Host/freebsd/HostInfoFreeBSD.h +++ b/lldb/include/lldb/Host/freebsd/HostInfoFreeBSD.h @@ -19,7 +19,6 @@ class HostInfoFreeBSD : public HostInfoPosix { public: static llvm::VersionTuple GetOSVersion(); static llvm::Optional GetOSBuildString(); - static bool GetOSKernelDescription(std::string &s); static FileSpec GetProgramFileSpec(); }; } diff --git a/lldb/include/lldb/Host/linux/HostInfoLinux.h b/lldb/include/lldb/Host/linux/HostInfoLinux.h index 6287670..e2167b8 100644 --- a/lldb/include/lldb/Host/linux/HostInfoLinux.h +++ b/lldb/include/lldb/Host/linux/HostInfoLinux.h @@ -27,7 +27,6 @@ public: static llvm::VersionTuple GetOSVersion(); static llvm::Optional GetOSBuildString(); - static bool GetOSKernelDescription(std::string &s); static llvm::StringRef GetDistributionId(); static FileSpec GetProgramFileSpec(); diff --git a/lldb/include/lldb/Host/macosx/HostInfoMacOSX.h b/lldb/include/lldb/Host/macosx/HostInfoMacOSX.h index 42c2872..de7ecc1 100644 --- a/lldb/include/lldb/Host/macosx/HostInfoMacOSX.h +++ b/lldb/include/lldb/Host/macosx/HostInfoMacOSX.h @@ -25,7 +25,6 @@ public: static llvm::VersionTuple GetOSVersion(); static llvm::VersionTuple GetMacCatalystVersion(); static llvm::Optional GetOSBuildString(); - static bool GetOSKernelDescription(std::string &s); static FileSpec GetProgramFileSpec(); static FileSpec GetXcodeContentsDirectory(); static FileSpec GetXcodeDeveloperDirectory(); diff --git a/lldb/include/lldb/Host/netbsd/HostInfoNetBSD.h b/lldb/include/lldb/Host/netbsd/HostInfoNetBSD.h index 021f862..32644ce 100644 --- a/lldb/include/lldb/Host/netbsd/HostInfoNetBSD.h +++ b/lldb/include/lldb/Host/netbsd/HostInfoNetBSD.h @@ -19,7 +19,6 @@ class HostInfoNetBSD : public HostInfoPosix { public: static llvm::VersionTuple GetOSVersion(); static llvm::Optional GetOSBuildString(); - static bool GetOSKernelDescription(std::string &s); static FileSpec GetProgramFileSpec(); }; } diff --git a/lldb/include/lldb/Host/openbsd/HostInfoOpenBSD.h b/lldb/include/lldb/Host/openbsd/HostInfoOpenBSD.h index ba5ac8c..01879ad 100644 --- a/lldb/include/lldb/Host/openbsd/HostInfoOpenBSD.h +++ b/lldb/include/lldb/Host/openbsd/HostInfoOpenBSD.h @@ -19,7 +19,6 @@ class HostInfoOpenBSD : public HostInfoPosix { public: static llvm::VersionTuple GetOSVersion(); static llvm::Optional GetOSBuildString(); - static bool GetOSKernelDescription(std::string &s); static FileSpec GetProgramFileSpec(); }; } diff --git a/lldb/include/lldb/Host/posix/HostInfoPosix.h b/lldb/include/lldb/Host/posix/HostInfoPosix.h index 825c79f..f1ff6b8 100644 --- a/lldb/include/lldb/Host/posix/HostInfoPosix.h +++ b/lldb/include/lldb/Host/posix/HostInfoPosix.h @@ -22,6 +22,7 @@ class HostInfoPosix : public HostInfoBase { public: static size_t GetPageSize(); static bool GetHostname(std::string &s); + static llvm::Optional GetOSKernelDescription(); static uint32_t GetUserID(); static uint32_t GetGroupID(); diff --git a/lldb/include/lldb/Host/windows/HostInfoWindows.h b/lldb/include/lldb/Host/windows/HostInfoWindows.h index d7f9e68..d359ee2 100644 --- a/lldb/include/lldb/Host/windows/HostInfoWindows.h +++ b/lldb/include/lldb/Host/windows/HostInfoWindows.h @@ -28,7 +28,7 @@ public: static llvm::VersionTuple GetOSVersion(); static llvm::Optional GetOSBuildString(); - static bool GetOSKernelDescription(std::string &s); + static llvm::Optional GetOSKernelDescription(); static bool GetHostname(std::string &s); static FileSpec GetProgramFileSpec(); static FileSpec GetDefaultShell(); diff --git a/lldb/source/Host/freebsd/HostInfoFreeBSD.cpp b/lldb/source/Host/freebsd/HostInfoFreeBSD.cpp index 50f4399..f9ff456 100644 --- a/lldb/source/Host/freebsd/HostInfoFreeBSD.cpp +++ b/lldb/source/Host/freebsd/HostInfoFreeBSD.cpp @@ -41,20 +41,6 @@ llvm::Optional HostInfoFreeBSD::GetOSBuildString() { return llvm::None; } -bool HostInfoFreeBSD::GetOSKernelDescription(std::string &s) { - struct utsname un; - - ::memset(&un, 0, sizeof(utsname)); - s.clear(); - - if (uname(&un) < 0) - return false; - - s.assign(un.version); - - return true; -} - FileSpec HostInfoFreeBSD::GetProgramFileSpec() { static FileSpec g_program_filespec; if (!g_program_filespec) { diff --git a/lldb/source/Host/linux/HostInfoLinux.cpp b/lldb/source/Host/linux/HostInfoLinux.cpp index 32642ed..fa82da2 100644 --- a/lldb/source/Host/linux/HostInfoLinux.cpp +++ b/lldb/source/Host/linux/HostInfoLinux.cpp @@ -75,19 +75,6 @@ llvm::Optional HostInfoLinux::GetOSBuildString() { return std::string(un.release); } -bool HostInfoLinux::GetOSKernelDescription(std::string &s) { - struct utsname un; - - ::memset(&un, 0, sizeof(utsname)); - s.clear(); - - if (uname(&un) < 0) - return false; - - s.assign(un.version); - return true; -} - llvm::StringRef HostInfoLinux::GetDistributionId() { assert(g_fields && "Missing call to Initialize?"); // Try to run 'lbs_release -i', and use that response for the distribution diff --git a/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm b/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm index 5f141b08..6d02555 100644 --- a/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm +++ b/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm @@ -65,18 +65,6 @@ llvm::Optional HostInfoMacOSX::GetOSBuildString() { return llvm::None; } -bool HostInfoMacOSX::GetOSKernelDescription(std::string &s) { - int mib[2] = {CTL_KERN, KERN_VERSION}; - char cstr[PATH_MAX]; - size_t cstr_len = sizeof(cstr); - if (::sysctl(mib, 2, cstr, &cstr_len, NULL, 0) == 0) { - s.assign(cstr, cstr_len); - return true; - } - s.clear(); - return false; -} - static void ParseOSVersion(llvm::VersionTuple &version, NSString *Key) { @autoreleasepool { NSDictionary *version_info = diff --git a/lldb/source/Host/netbsd/HostInfoNetBSD.cpp b/lldb/source/Host/netbsd/HostInfoNetBSD.cpp index 42bfb20..234dd3d 100644 --- a/lldb/source/Host/netbsd/HostInfoNetBSD.cpp +++ b/lldb/source/Host/netbsd/HostInfoNetBSD.cpp @@ -54,20 +54,6 @@ llvm::Optional HostInfoNetBSD::GetOSBuildString() { return llvm::None; } -bool HostInfoNetBSD::GetOSKernelDescription(std::string &s) { - struct utsname un; - - ::memset(&un, 0, sizeof(un)); - s.clear(); - - if (::uname(&un) < 0) - return false; - - s.assign(un.version); - - return true; -} - FileSpec HostInfoNetBSD::GetProgramFileSpec() { static FileSpec g_program_filespec; diff --git a/lldb/source/Host/openbsd/HostInfoOpenBSD.cpp b/lldb/source/Host/openbsd/HostInfoOpenBSD.cpp index 18ffa38..5db843f 100644 --- a/lldb/source/Host/openbsd/HostInfoOpenBSD.cpp +++ b/lldb/source/Host/openbsd/HostInfoOpenBSD.cpp @@ -41,20 +41,6 @@ llvm::Optional HostInfoOpenBSD::GetOSBuildString() { return llvm::None; } -bool HostInfoOpenBSD::GetOSKernelDescription(std::string &s) { - struct utsname un; - - ::memset(&un, 0, sizeof(utsname)); - s.clear(); - - if (uname(&un) < 0) - return false; - - s.assign(un.version); - - return true; -} - FileSpec HostInfoOpenBSD::GetProgramFileSpec() { static FileSpec g_program_filespec; return g_program_filespec; diff --git a/lldb/source/Host/posix/HostInfoPosix.cpp b/lldb/source/Host/posix/HostInfoPosix.cpp index b633acf..6355359 100644 --- a/lldb/source/Host/posix/HostInfoPosix.cpp +++ b/lldb/source/Host/posix/HostInfoPosix.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include using namespace lldb_private; @@ -37,6 +38,14 @@ bool HostInfoPosix::GetHostname(std::string &s) { return false; } +llvm::Optional HostInfoPosix::GetOSKernelDescription() { + struct utsname un; + if (uname(&un) < 0) + return llvm::None; + + return std::string(un.version); +} + #ifdef __ANDROID__ #include #endif diff --git a/lldb/source/Host/windows/HostInfoWindows.cpp b/lldb/source/Host/windows/HostInfoWindows.cpp index 1e6ce0c..c6fa96d 100644 --- a/lldb/source/Host/windows/HostInfoWindows.cpp +++ b/lldb/source/Host/windows/HostInfoWindows.cpp @@ -82,10 +82,8 @@ llvm::Optional HostInfoWindows::GetOSBuildString() { return "Windows NT " + version.getAsString(); } -bool HostInfoWindows::GetOSKernelDescription(std::string &s) { - llvm::Optional build = GetOSBuildString(); - s = build.getValueOr(""); - return build.hasValue(); +llvm::Optional HostInfoWindows::GetOSKernelDescription() { + return GetOSBuildString(); } bool HostInfoWindows::GetHostname(std::string &s) { diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp index 17b7f17..15a1f0e 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp @@ -272,13 +272,13 @@ GDBRemoteCommunicationServerCommon::Handle_qHostInfo( response.PutStringAsRawHex8(*s); response.PutChar(';'); } - std::string s; - if (HostInfo::GetOSKernelDescription(s)) { + if (llvm::Optional s = HostInfo::GetOSKernelDescription()) { response.PutCString("os_kernel:"); - response.PutStringAsRawHex8(s); + response.PutStringAsRawHex8(*s); response.PutChar(';'); } + std::string s; #if defined(__APPLE__) #if defined(__arm__) || defined(__arm64__) || defined(__aarch64__) diff --git a/lldb/source/Target/Platform.cpp b/lldb/source/Target/Platform.cpp index 6dd091b..2d4c292 100644 --- a/lldb/source/Target/Platform.cpp +++ b/lldb/source/Target/Platform.cpp @@ -493,8 +493,11 @@ llvm::Optional Platform::GetOSBuildString() { } bool Platform::GetOSKernelDescription(std::string &s) { - if (IsHost()) - return HostInfo::GetOSKernelDescription(s); + if (IsHost()) { + llvm::Optional desc = HostInfo::GetOSKernelDescription(); + s = desc.getValueOr(""); + return desc.hasValue(); + } return GetRemoteOSKernelDescription(s); } -- 2.7.4