Skip to content

Commit d903996

Browse files
authored
[lldb] [darwin] Upstream a few DriverKit cases (llvm#126604)
A DriverKit process is a kernel extension that runs in userland, instead of running in the kernel address space/priv levels, they've been around a couple of years. From lldb's perspective a DriverKit process is no different from any other userland level process, but it has a different Triple so we need to handle those cases in the lldb codebase. Some of the DriverKit triple handling had been upstreamed to llvm-project, but I noticed a few cases that had not yet. Cleaning that up.
1 parent d81b604 commit d903996

File tree

8 files changed

+25
-5
lines changed

8 files changed

+25
-5
lines changed

lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,9 @@ DynamicLoader *DynamicLoaderDarwinKernel::CreateInstance(Process *process,
168168
case llvm::Triple::IOS:
169169
case llvm::Triple::TvOS:
170170
case llvm::Triple::WatchOS:
171-
case llvm::Triple::XROS:
172171
case llvm::Triple::BridgeOS:
172+
case llvm::Triple::DriverKit:
173+
case llvm::Triple::XROS:
173174
if (triple_ref.getVendor() != llvm::Triple::Apple) {
174175
return nullptr;
175176
}
@@ -243,6 +244,7 @@ DynamicLoaderDarwinKernel::SearchForKernelWithDebugHints(Process *process) {
243244
Status read_err;
244245
addr_t kernel_addresses_64[] = {
245246
0xfffffff000002010ULL,
247+
0xfffffe0000004010ULL, // newest arm64 devices, large memory support
246248
0xfffffff000004010ULL, // newest arm64 devices
247249
0xffffff8000004010ULL, // 2014-2015-ish arm64 devices
248250
0xffffff8000002010ULL, // oldest arm64 devices
@@ -1092,7 +1094,7 @@ void DynamicLoaderDarwinKernel::LoadKernelModuleIfNeeded() {
10921094
static ConstString arm64_T1Sz_value("gT1Sz");
10931095
const Symbol *symbol =
10941096
m_kernel.GetModule()->FindFirstSymbolWithNameAndType(
1095-
kext_summary_symbol, eSymbolTypeData);
1097+
kext_summary_symbol, eSymbolTypeAny);
10961098
if (symbol) {
10971099
m_kext_summary_header_ptr_addr = symbol->GetAddress();
10981100
// Update all image infos

lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,8 @@ bool DynamicLoaderDarwin::JSONImageInformationIntoImageInfo(
419419
image_infos[i].os_type = llvm::Triple::WatchOS;
420420
else if (os_name == "bridgeos")
421421
image_infos[i].os_type = llvm::Triple::BridgeOS;
422+
else if (os_name == "driverkit")
423+
image_infos[i].os_type = llvm::Triple::DriverKit;
422424
else if (os_name == "xros")
423425
image_infos[i].os_type = llvm::Triple::XROS;
424426
else if (os_name == "maccatalyst") {

lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,9 @@ DynamicLoader *DynamicLoaderMacOS::CreateInstance(Process *process,
5555
case llvm::Triple::IOS:
5656
case llvm::Triple::TvOS:
5757
case llvm::Triple::WatchOS:
58-
case llvm::Triple::XROS:
5958
case llvm::Triple::BridgeOS:
59+
case llvm::Triple::DriverKit:
60+
case llvm::Triple::XROS:
6061
create = triple_ref.getVendor() == llvm::Triple::Apple;
6162
break;
6263
default:

lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,9 @@ DynamicLoader *DynamicLoaderMacOSXDYLD::CreateInstance(Process *process,
7575
case llvm::Triple::IOS:
7676
case llvm::Triple::TvOS:
7777
case llvm::Triple::WatchOS:
78-
case llvm::Triple::XROS:
7978
case llvm::Triple::BridgeOS:
79+
case llvm::Triple::DriverKit:
80+
case llvm::Triple::XROS:
8081
create = triple_ref.getVendor() == llvm::Triple::Apple;
8182
break;
8283
default:

lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ PlatformSP PlatformDarwinKernel::CreateInstance(bool force,
129129
case llvm::Triple::XROS:
130130
case llvm::Triple::TvOS:
131131
case llvm::Triple::BridgeOS:
132+
case llvm::Triple::DriverKit:
132133
break;
133134
// Only accept "vendor" for vendor if the host is Apple and it "unknown"
134135
// wasn't specified (it was just returned because it was NOT specified)

lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,9 @@ SystemRuntime *SystemRuntimeMacOSX::CreateInstance(Process *process) {
6262
case llvm::Triple::IOS:
6363
case llvm::Triple::TvOS:
6464
case llvm::Triple::WatchOS:
65-
case llvm::Triple::XROS:
6665
case llvm::Triple::BridgeOS:
66+
case llvm::Triple::DriverKit:
67+
case llvm::Triple::XROS:
6768
create = triple_ref.getVendor() == llvm::Triple::Apple;
6869
break;
6970
default:

lldb/source/Utility/ArchSpec.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,6 +1040,12 @@ bool ArchSpec::IsMatch(const ArchSpec &rhs, MatchType match) const {
10401040
rhs_triple_os == llvm::Triple::IOS &&
10411041
rhs_triple_env == llvm::Triple::MacABI))
10421042
return true;
1043+
// x86_64-apple-driverkit, x86_64-apple-macosx are compatible, no match.
1044+
if ((lhs_triple_os == llvm::Triple::DriverKit &&
1045+
rhs_triple_os == llvm::Triple::MacOSX) ||
1046+
(lhs_triple_os == llvm::Triple::MacOSX &&
1047+
rhs_triple_os == llvm::Triple::DriverKit))
1048+
return true;
10431049
}
10441050

10451051
// x86_64-apple-ios-macabi and x86_64-apple-ios are not compatible.

lldb/unittests/Utility/ArchSpecTest.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,12 @@ TEST(ArchSpecTest, Compatibility) {
400400
B.MergeFrom(A);
401401
ASSERT_TRUE(B.IsExactMatch(C));
402402
}
403+
{
404+
ArchSpec A("x86_64-apple-driverkit19.0");
405+
ArchSpec B("x86_64-apple-macosx10.15.0");
406+
ASSERT_FALSE(A.IsExactMatch(B));
407+
ASSERT_TRUE(A.IsCompatibleMatch(B));
408+
}
403409
}
404410

405411
TEST(ArchSpecTest, OperatorBool) {

0 commit comments

Comments
 (0)