Skip to content
This repository was archived by the owner on Jan 26, 2024. It is now read-only.

Commit 0a39a9c

Browse files
committed
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
1 parent 11a8423 commit 0a39a9c

File tree

16 files changed

+21
-82
lines changed

16 files changed

+21
-82
lines changed

lldb/include/lldb/Host/freebsd/HostInfoFreeBSD.h

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ class HostInfoFreeBSD : public HostInfoPosix {
1919
public:
2020
static llvm::VersionTuple GetOSVersion();
2121
static llvm::Optional<std::string> GetOSBuildString();
22-
static bool GetOSKernelDescription(std::string &s);
2322
static FileSpec GetProgramFileSpec();
2423
};
2524
}

lldb/include/lldb/Host/linux/HostInfoLinux.h

-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ class HostInfoLinux : public HostInfoPosix {
2727

2828
static llvm::VersionTuple GetOSVersion();
2929
static llvm::Optional<std::string> GetOSBuildString();
30-
static bool GetOSKernelDescription(std::string &s);
3130
static llvm::StringRef GetDistributionId();
3231
static FileSpec GetProgramFileSpec();
3332

lldb/include/lldb/Host/macosx/HostInfoMacOSX.h

-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ class HostInfoMacOSX : public HostInfoPosix {
2525
static llvm::VersionTuple GetOSVersion();
2626
static llvm::VersionTuple GetMacCatalystVersion();
2727
static llvm::Optional<std::string> GetOSBuildString();
28-
static bool GetOSKernelDescription(std::string &s);
2928
static FileSpec GetProgramFileSpec();
3029
static FileSpec GetXcodeContentsDirectory();
3130
static FileSpec GetXcodeDeveloperDirectory();

lldb/include/lldb/Host/netbsd/HostInfoNetBSD.h

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ class HostInfoNetBSD : public HostInfoPosix {
1919
public:
2020
static llvm::VersionTuple GetOSVersion();
2121
static llvm::Optional<std::string> GetOSBuildString();
22-
static bool GetOSKernelDescription(std::string &s);
2322
static FileSpec GetProgramFileSpec();
2423
};
2524
}

lldb/include/lldb/Host/openbsd/HostInfoOpenBSD.h

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ class HostInfoOpenBSD : public HostInfoPosix {
1919
public:
2020
static llvm::VersionTuple GetOSVersion();
2121
static llvm::Optional<std::string> GetOSBuildString();
22-
static bool GetOSKernelDescription(std::string &s);
2322
static FileSpec GetProgramFileSpec();
2423
};
2524
}

lldb/include/lldb/Host/posix/HostInfoPosix.h

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class HostInfoPosix : public HostInfoBase {
2222
public:
2323
static size_t GetPageSize();
2424
static bool GetHostname(std::string &s);
25+
static llvm::Optional<std::string> GetOSKernelDescription();
2526

2627
static uint32_t GetUserID();
2728
static uint32_t GetGroupID();

lldb/include/lldb/Host/windows/HostInfoWindows.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class HostInfoWindows : public HostInfoBase {
2828

2929
static llvm::VersionTuple GetOSVersion();
3030
static llvm::Optional<std::string> GetOSBuildString();
31-
static bool GetOSKernelDescription(std::string &s);
31+
static llvm::Optional<std::string> GetOSKernelDescription();
3232
static bool GetHostname(std::string &s);
3333
static FileSpec GetProgramFileSpec();
3434
static FileSpec GetDefaultShell();

lldb/source/Host/freebsd/HostInfoFreeBSD.cpp

-14
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,6 @@ llvm::Optional<std::string> HostInfoFreeBSD::GetOSBuildString() {
4141
return llvm::None;
4242
}
4343

44-
bool HostInfoFreeBSD::GetOSKernelDescription(std::string &s) {
45-
struct utsname un;
46-
47-
::memset(&un, 0, sizeof(utsname));
48-
s.clear();
49-
50-
if (uname(&un) < 0)
51-
return false;
52-
53-
s.assign(un.version);
54-
55-
return true;
56-
}
57-
5844
FileSpec HostInfoFreeBSD::GetProgramFileSpec() {
5945
static FileSpec g_program_filespec;
6046
if (!g_program_filespec) {

lldb/source/Host/linux/HostInfoLinux.cpp

-13
Original file line numberDiff line numberDiff line change
@@ -75,19 +75,6 @@ llvm::Optional<std::string> HostInfoLinux::GetOSBuildString() {
7575
return std::string(un.release);
7676
}
7777

78-
bool HostInfoLinux::GetOSKernelDescription(std::string &s) {
79-
struct utsname un;
80-
81-
::memset(&un, 0, sizeof(utsname));
82-
s.clear();
83-
84-
if (uname(&un) < 0)
85-
return false;
86-
87-
s.assign(un.version);
88-
return true;
89-
}
90-
9178
llvm::StringRef HostInfoLinux::GetDistributionId() {
9279
assert(g_fields && "Missing call to Initialize?");
9380
// Try to run 'lbs_release -i', and use that response for the distribution

lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm

-12
Original file line numberDiff line numberDiff line change
@@ -65,18 +65,6 @@
6565
return llvm::None;
6666
}
6767

68-
bool HostInfoMacOSX::GetOSKernelDescription(std::string &s) {
69-
int mib[2] = {CTL_KERN, KERN_VERSION};
70-
char cstr[PATH_MAX];
71-
size_t cstr_len = sizeof(cstr);
72-
if (::sysctl(mib, 2, cstr, &cstr_len, NULL, 0) == 0) {
73-
s.assign(cstr, cstr_len);
74-
return true;
75-
}
76-
s.clear();
77-
return false;
78-
}
79-
8068
static void ParseOSVersion(llvm::VersionTuple &version, NSString *Key) {
8169
@autoreleasepool {
8270
NSDictionary *version_info =

lldb/source/Host/netbsd/HostInfoNetBSD.cpp

-14
Original file line numberDiff line numberDiff line change
@@ -54,20 +54,6 @@ llvm::Optional<std::string> HostInfoNetBSD::GetOSBuildString() {
5454
return llvm::None;
5555
}
5656

57-
bool HostInfoNetBSD::GetOSKernelDescription(std::string &s) {
58-
struct utsname un;
59-
60-
::memset(&un, 0, sizeof(un));
61-
s.clear();
62-
63-
if (::uname(&un) < 0)
64-
return false;
65-
66-
s.assign(un.version);
67-
68-
return true;
69-
}
70-
7157
FileSpec HostInfoNetBSD::GetProgramFileSpec() {
7258
static FileSpec g_program_filespec;
7359

lldb/source/Host/openbsd/HostInfoOpenBSD.cpp

-14
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,6 @@ llvm::Optional<std::string> HostInfoOpenBSD::GetOSBuildString() {
4141
return llvm::None;
4242
}
4343

44-
bool HostInfoOpenBSD::GetOSKernelDescription(std::string &s) {
45-
struct utsname un;
46-
47-
::memset(&un, 0, sizeof(utsname));
48-
s.clear();
49-
50-
if (uname(&un) < 0)
51-
return false;
52-
53-
s.assign(un.version);
54-
55-
return true;
56-
}
57-
5844
FileSpec HostInfoOpenBSD::GetProgramFileSpec() {
5945
static FileSpec g_program_filespec;
6046
return g_program_filespec;

lldb/source/Host/posix/HostInfoPosix.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <mutex>
2222
#include <pwd.h>
2323
#include <sys/types.h>
24+
#include <sys/utsname.h>
2425
#include <unistd.h>
2526

2627
using namespace lldb_private;
@@ -37,6 +38,14 @@ bool HostInfoPosix::GetHostname(std::string &s) {
3738
return false;
3839
}
3940

41+
llvm::Optional<std::string> HostInfoPosix::GetOSKernelDescription() {
42+
struct utsname un;
43+
if (uname(&un) < 0)
44+
return llvm::None;
45+
46+
return std::string(un.version);
47+
}
48+
4049
#ifdef __ANDROID__
4150
#include <android/api-level.h>
4251
#endif

lldb/source/Host/windows/HostInfoWindows.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,8 @@ llvm::Optional<std::string> HostInfoWindows::GetOSBuildString() {
8282
return "Windows NT " + version.getAsString();
8383
}
8484

85-
bool HostInfoWindows::GetOSKernelDescription(std::string &s) {
86-
llvm::Optional<std::string> build = GetOSBuildString();
87-
s = build.getValueOr("");
88-
return build.hasValue();
85+
llvm::Optional<std::string> HostInfoWindows::GetOSKernelDescription() {
86+
return GetOSBuildString();
8987
}
9088

9189
bool HostInfoWindows::GetHostname(std::string &s) {

lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -272,13 +272,13 @@ GDBRemoteCommunicationServerCommon::Handle_qHostInfo(
272272
response.PutStringAsRawHex8(*s);
273273
response.PutChar(';');
274274
}
275-
std::string s;
276-
if (HostInfo::GetOSKernelDescription(s)) {
275+
if (llvm::Optional<std::string> s = HostInfo::GetOSKernelDescription()) {
277276
response.PutCString("os_kernel:");
278-
response.PutStringAsRawHex8(s);
277+
response.PutStringAsRawHex8(*s);
279278
response.PutChar(';');
280279
}
281280

281+
std::string s;
282282
#if defined(__APPLE__)
283283

284284
#if defined(__arm__) || defined(__arm64__) || defined(__aarch64__)

lldb/source/Target/Platform.cpp

+5-2
Original file line numberDiff line numberDiff line change
@@ -493,8 +493,11 @@ llvm::Optional<std::string> Platform::GetOSBuildString() {
493493
}
494494

495495
bool Platform::GetOSKernelDescription(std::string &s) {
496-
if (IsHost())
497-
return HostInfo::GetOSKernelDescription(s);
496+
if (IsHost()) {
497+
llvm::Optional<std::string> desc = HostInfo::GetOSKernelDescription();
498+
s = desc.getValueOr("");
499+
return desc.hasValue();
500+
}
498501
return GetRemoteOSKernelDescription(s);
499502
}
500503

0 commit comments

Comments
 (0)