[Lldb-commits] [lldb] [lldb] Search both visionOS and XROS DeviceSupport directories (PR #228573)
Med Ismail Bennani via lldb-commits
lldb-commits at lists.llvm.org
Fri Oct 2 17:09:16 PDT 2026
https://github.com/medismailben updated https://github.com/llvm/llvm-project/pull/228573
>From 8de59d3b4aea791606d1471669e4f5aa6e152176 Mon Sep 17 00:00:00 2001
From: Med Ismail Bennani <ismail at bennani.ma>
Date: Fri, 2 Oct 2026 15:09:16 -0700
Subject: [PATCH] [lldb] Search both visionOS and XROS DeviceSupport
directories
Xcode now downloads visionOS shared cache symbols into
~/Library/Developer/Xcode/visionOS DeviceSupport, but
PlatformRemoteAppleXR only looked in "XROS DeviceSupport". As a result,
LLDB never found the expanded shared cache for visionOS devices and
failed to resolve symbols like memcpy, which breaks expression
evaluation and loading images into the inferior.
Make GetDeviceSupportDirectoryName return a list of directory names
(renamed to GetDeviceSupportDirectoryNames) and have
PlatformDarwinDevice search each of them. visionOS returns both the
current and the legacy name; all other platforms keep their single name.
Signed-off-by: Med Ismail Bennani <ismail at bennani.ma>
---
.../Platform/MacOSX/PlatformDarwinDevice.cpp | 29 ++++++++++---------
.../Platform/MacOSX/PlatformDarwinDevice.h | 4 ++-
.../Platform/MacOSX/PlatformMacOSX.cpp | 5 ++--
.../Plugins/Platform/MacOSX/PlatformMacOSX.h | 2 +-
.../MacOSX/PlatformRemoteAppleBridge.cpp | 5 ++--
.../MacOSX/PlatformRemoteAppleBridge.h | 2 +-
.../Platform/MacOSX/PlatformRemoteAppleTV.cpp | 5 ++--
.../Platform/MacOSX/PlatformRemoteAppleTV.h | 2 +-
.../MacOSX/PlatformRemoteAppleWatch.cpp | 5 ++--
.../MacOSX/PlatformRemoteAppleWatch.h | 2 +-
.../Platform/MacOSX/PlatformRemoteAppleXR.cpp | 7 +++--
.../Platform/MacOSX/PlatformRemoteAppleXR.h | 2 +-
.../Platform/MacOSX/PlatformRemoteMacOSX.cpp | 5 ++--
.../Platform/MacOSX/PlatformRemoteMacOSX.h | 2 +-
.../Platform/MacOSX/PlatformRemoteiOS.cpp | 5 ++--
.../Platform/MacOSX/PlatformRemoteiOS.h | 2 +-
16 files changed, 49 insertions(+), 35 deletions(-)
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.cpp
index 825b9df61f2e887..3584c73f4faaf01 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.cpp
@@ -96,19 +96,22 @@ bool PlatformDarwinDevice::UpdateSDKDirectoryInfosIfNeeded() {
if (device_support_dir) {
AddSharedCacheDirectory(device_support_dir, "builtin SDK directory");
- // "macOS DeviceSupport", "iOS DeviceSupport", etc.
- llvm::StringRef dirname = GetDeviceSupportDirectoryName();
- std::string local_sdk_cache_str = "~/Library/Developer/Xcode/";
- local_sdk_cache_str += std::string(dirname);
- FileSpec local_sdk_cache(local_sdk_cache_str.c_str());
- FileSystem::Instance().Resolve(local_sdk_cache);
- if (FileSystem::Instance().Exists(local_sdk_cache)) {
- LLDB_LOGF(log,
- "PlatformDarwinDevice::UpdateSDKDirectoryInfosIfNeeded "
- "searching %s for additional SDKs",
- local_sdk_cache.GetPath().c_str());
- AddSharedCacheDirectory(local_sdk_cache.GetPath().c_str(),
- "system developer dir directory");
+ // "macOS DeviceSupport", "iOS DeviceSupport", etc. The names are in
+ // order of preference, so stop at the first one that exists.
+ for (llvm::StringRef dirname : GetDeviceSupportDirectoryNames()) {
+ std::string local_sdk_cache_str = "~/Library/Developer/Xcode/";
+ local_sdk_cache_str += std::string(dirname);
+ FileSpec local_sdk_cache(local_sdk_cache_str.c_str());
+ FileSystem::Instance().Resolve(local_sdk_cache);
+ if (FileSystem::Instance().Exists(local_sdk_cache)) {
+ LLDB_LOGF(log,
+ "PlatformDarwinDevice::UpdateSDKDirectoryInfosIfNeeded "
+ "searching %s for additional SDKs",
+ local_sdk_cache.GetPath().c_str());
+ AddSharedCacheDirectory(local_sdk_cache.GetPath().c_str(),
+ "system developer dir directory");
+ break;
+ }
}
const char *addtional_platform_dirs = getenv("PLATFORM_SDK_DIRECTORY");
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.h b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.h
index e2699db983368fa..3240080d691914e 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.h
@@ -11,6 +11,7 @@
#include "PlatformDarwin.h"
+#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include <string>
@@ -64,7 +65,8 @@ class PlatformDarwinDevice : public PlatformDarwin {
const char *GetDeviceSupportDirectoryForOSVersion();
virtual llvm::StringRef GetPlatformName() = 0;
- virtual llvm::StringRef GetDeviceSupportDirectoryName() = 0;
+ virtual llvm::SmallVector<llvm::StringRef>
+ GetDeviceSupportDirectoryNames() = 0;
std::mutex m_sdk_dir_mutex;
SDKDirectoryInfoCollection m_sdk_directory_infos;
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
index ebc81692cbc1e6b..bb3c4210bff9093 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
@@ -178,8 +178,9 @@ lldb_private::Status PlatformMacOSX::GetSharedModule(
return error;
}
-llvm::StringRef PlatformMacOSX::GetDeviceSupportDirectoryName() {
- return "macOS DeviceSupport";
+llvm::SmallVector<llvm::StringRef>
+PlatformMacOSX::GetDeviceSupportDirectoryNames() {
+ return {"macOS DeviceSupport"};
}
llvm::StringRef PlatformMacOSX::GetPlatformName() { return "MacOSX.platform"; }
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.h b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.h
index 93eb9ddfd185846..251e0d498d5ed21 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.h
@@ -68,7 +68,7 @@ class PlatformMacOSX : public PlatformDarwinDevice {
}
protected:
- llvm::StringRef GetDeviceSupportDirectoryName() override;
+ llvm::SmallVector<llvm::StringRef> GetDeviceSupportDirectoryNames() override;
llvm::StringRef GetPlatformName() override;
};
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.cpp
index 2aa4ad56bb84ad8..4b04db7c2c4f2e1 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.cpp
@@ -142,8 +142,9 @@ std::vector<ArchSpec> PlatformRemoteAppleBridge::GetSupportedArchitectures(
return {ArchSpec("arm64-apple-bridgeos")};
}
-llvm::StringRef PlatformRemoteAppleBridge::GetDeviceSupportDirectoryName() {
- return "BridgeOS DeviceSupport";
+llvm::SmallVector<llvm::StringRef>
+PlatformRemoteAppleBridge::GetDeviceSupportDirectoryNames() {
+ return {"BridgeOS DeviceSupport"};
}
llvm::StringRef PlatformRemoteAppleBridge::GetPlatformName() {
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.h
index 91dd02cc943235b..74dceb0d1412b2e 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.h
@@ -42,7 +42,7 @@ class PlatformRemoteAppleBridge : public PlatformRemoteDarwinDevice {
GetSupportedArchitectures(const ArchSpec &process_host_arch) override;
protected:
- llvm::StringRef GetDeviceSupportDirectoryName() override;
+ llvm::SmallVector<llvm::StringRef> GetDeviceSupportDirectoryNames() override;
llvm::StringRef GetPlatformName() override;
};
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp
index 5b729690eda13ab..66d8d06f9135f4a 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp
@@ -154,8 +154,9 @@ std::vector<ArchSpec> PlatformRemoteAppleTV::GetSupportedArchitectures(
}
}
-llvm::StringRef PlatformRemoteAppleTV::GetDeviceSupportDirectoryName() {
- return "tvOS DeviceSupport";
+llvm::SmallVector<llvm::StringRef>
+PlatformRemoteAppleTV::GetDeviceSupportDirectoryNames() {
+ return {"tvOS DeviceSupport"};
}
llvm::StringRef PlatformRemoteAppleTV::GetPlatformName() {
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h
index 2962f19bd2ee268..aee1512cc4fa9d5 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h
@@ -48,7 +48,7 @@ class PlatformRemoteAppleTV : public PlatformRemoteDarwinDevice {
const lldb_private::ArchSpec &process_host_arch) override;
protected:
- llvm::StringRef GetDeviceSupportDirectoryName() override;
+ llvm::SmallVector<llvm::StringRef> GetDeviceSupportDirectoryNames() override;
llvm::StringRef GetPlatformName() override;
};
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp
index 7dc8b9b4c9de32f..1cb1389cb8aee91 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp
@@ -180,8 +180,9 @@ PlatformRemoteAppleWatch::GetSupportedArchitectures(const ArchSpec &host_info) {
}
}
-llvm::StringRef PlatformRemoteAppleWatch::GetDeviceSupportDirectoryName() {
- return "watchOS DeviceSupport";
+llvm::SmallVector<llvm::StringRef>
+PlatformRemoteAppleWatch::GetDeviceSupportDirectoryNames() {
+ return {"watchOS DeviceSupport"};
}
llvm::StringRef PlatformRemoteAppleWatch::GetPlatformName() {
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h
index 20694f00d9f5e88..9b63c476e41090b 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h
@@ -40,7 +40,7 @@ class PlatformRemoteAppleWatch : public PlatformRemoteDarwinDevice {
GetSupportedArchitectures(const ArchSpec &process_host_arch) override;
protected:
- llvm::StringRef GetDeviceSupportDirectoryName() override;
+ llvm::SmallVector<llvm::StringRef> GetDeviceSupportDirectoryNames() override;
llvm::StringRef GetPlatformName() override;
};
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.cpp
index c7e734a5a098d7a..fd1015c4a80b225 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.cpp
@@ -148,8 +148,11 @@ PlatformRemoteAppleXR::GetSupportedArchitectures(
return result;
}
-llvm::StringRef PlatformRemoteAppleXR::GetDeviceSupportDirectoryName() {
- return "XROS DeviceSupport";
+llvm::SmallVector<llvm::StringRef>
+PlatformRemoteAppleXR::GetDeviceSupportDirectoryNames() {
+ // Xcode 27+ uses "visionOS DeviceSupport"; earlier versions used
+ // "XROS DeviceSupport".
+ return {"visionOS DeviceSupport", "XROS DeviceSupport"};
}
llvm::StringRef PlatformRemoteAppleXR::GetPlatformName() {
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.h
index 2fbb6caad8110f2..31064888560e80c 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.h
@@ -35,7 +35,7 @@ class PlatformRemoteAppleXR : public PlatformRemoteDarwinDevice {
const lldb_private::ArchSpec &process_host_arch) override;
protected:
- llvm::StringRef GetDeviceSupportDirectoryName() override;
+ llvm::SmallVector<llvm::StringRef> GetDeviceSupportDirectoryNames() override;
llvm::StringRef GetPlatformName() override;
};
} // namespace lldb_private
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.cpp
index 21bb0c51ef31e52..de4b04965602bb9 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.cpp
@@ -141,8 +141,9 @@ llvm::StringRef PlatformRemoteMacOSX::GetDescriptionStatic() {
return "Remote Mac OS X user platform plug-in.";
}
-llvm::StringRef PlatformRemoteMacOSX::GetDeviceSupportDirectoryName() {
- return "macOS DeviceSupport";
+llvm::SmallVector<llvm::StringRef>
+PlatformRemoteMacOSX::GetDeviceSupportDirectoryNames() {
+ return {"macOS DeviceSupport"};
}
llvm::StringRef PlatformRemoteMacOSX::GetPlatformName() {
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.h
index 17ae372e3616b2b..81e6394f566adfb 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.h
@@ -45,7 +45,7 @@ class PlatformRemoteMacOSX : public virtual PlatformRemoteDarwinDevice {
GetSupportedArchitectures(const ArchSpec &process_host_arch) override;
protected:
- llvm::StringRef GetDeviceSupportDirectoryName() override;
+ llvm::SmallVector<llvm::StringRef> GetDeviceSupportDirectoryNames() override;
llvm::StringRef GetPlatformName() override;
};
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
index d6f573bbe2754c2..5342d791018d8dd 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
@@ -148,8 +148,9 @@ bool PlatformRemoteiOS::CheckLocalSharedCache() const {
return true;
}
-llvm::StringRef PlatformRemoteiOS::GetDeviceSupportDirectoryName() {
- return "iOS DeviceSupport";
+llvm::SmallVector<llvm::StringRef>
+PlatformRemoteiOS::GetDeviceSupportDirectoryNames() {
+ return {"iOS DeviceSupport"};
}
llvm::StringRef PlatformRemoteiOS::GetPlatformName() {
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h
index 991bf1d4dd1a371..23ac184bbd42d8c 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h
@@ -42,7 +42,7 @@ class PlatformRemoteiOS : public PlatformRemoteDarwinDevice {
protected:
bool CheckLocalSharedCache() const override;
- llvm::StringRef GetDeviceSupportDirectoryName() override;
+ llvm::SmallVector<llvm::StringRef> GetDeviceSupportDirectoryNames() override;
llvm::StringRef GetPlatformName() override;
};
More information about the lldb-commits
mailing list