[Lldb-commits] [lldb] [lldb] Upstream xros support in lldb (PR #78389)
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Tue Jan 16 19:50:24 PST 2024
https://github.com/JDevlieghere created https://github.com/llvm/llvm-project/pull/78389
Upstream support for debugging xros applications through LLDB.
>From a326e09e34fd383fe35513c419b4be46558aab69 Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Wed, 10 Jan 2024 17:35:47 -0800
Subject: [PATCH] [lldb] Upstream xros support in lldb
Upstream support for debugging xros applications through LLDB.
---
lldb/include/lldb/Utility/XcodeSDK.h | 2 +
.../Host/macosx/objcxx/HostInfoMacOSX.mm | 3 +
.../DynamicLoaderDarwinKernel.cpp | 1 +
.../MacOSX-DYLD/DynamicLoaderMacOS.cpp | 1 +
.../MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp | 1 +
.../Instruction/ARM/EmulateInstructionARM.cpp | 1 +
.../ObjectFile/Mach-O/ObjectFileMachO.cpp | 11 +-
.../Plugins/Platform/MacOSX/CMakeLists.txt | 1 +
.../MacOSX/PlatformAppleSimulator.cpp | 37 +++++
.../Platform/MacOSX/PlatformDarwin.cpp | 17 +-
.../Platform/MacOSX/PlatformMacOSX.cpp | 3 +
.../Platform/MacOSX/PlatformRemoteAppleXR.cpp | 157 ++++++++++++++++++
.../Platform/MacOSX/PlatformRemoteAppleXR.h | 38 +++++
...PlatformiOSSimulatorCoreSimulatorSupport.h | 3 +-
.../Process/MacOSX-Kernel/ProcessKDP.cpp | 1 +
.../GDBRemoteCommunicationClient.cpp | 2 +-
.../MacOSX/SystemRuntimeMacOSX.cpp | 1 +
lldb/source/Utility/XcodeSDK.cpp | 23 +++
.../debugserver/source/MacOSX/MachProcess.mm | 12 ++
lldb/tools/debugserver/source/RNBRemote.cpp | 11 +-
lldb/unittests/Utility/XcodeSDKTest.cpp | 22 +++
21 files changed, 339 insertions(+), 9 deletions(-)
create mode 100644 lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.cpp
create mode 100644 lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.h
diff --git a/lldb/include/lldb/Utility/XcodeSDK.h b/lldb/include/lldb/Utility/XcodeSDK.h
index f8528995d549c9c..673ea578ffce85e 100644
--- a/lldb/include/lldb/Utility/XcodeSDK.h
+++ b/lldb/include/lldb/Utility/XcodeSDK.h
@@ -34,6 +34,8 @@ class XcodeSDK {
AppleTVOS,
WatchSimulator,
watchOS,
+ XRSimulator,
+ XROS,
bridgeOS,
Linux,
unknown = -1
diff --git a/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm b/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
index 110a01732b2473a..f96e2cf80c5facb 100644
--- a/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
+++ b/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
@@ -276,6 +276,9 @@ static void ParseOSVersion(llvm::VersionTuple &version, NSString *Key) {
#elif defined(TARGET_OS_WATCHOS) && TARGET_OS_WATCHOS == 1
arch_32.GetTriple().setOS(llvm::Triple::WatchOS);
arch_64.GetTriple().setOS(llvm::Triple::WatchOS);
+#elif defined(TARGET_OS_XR) && TARGET_OS_XR == 1
+ arch_32.GetTriple().setOS(llvm::Triple::XROS);
+ arch_64.GetTriple().setOS(llvm::Triple::XROS);
#elif defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1
arch_32.GetTriple().setOS(llvm::Triple::MacOSX);
arch_64.GetTriple().setOS(llvm::Triple::MacOSX);
diff --git a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
index 7df917d03ceeda5..4128ac1cdf1bbae 100644
--- a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
+++ b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
@@ -166,6 +166,7 @@ DynamicLoader *DynamicLoaderDarwinKernel::CreateInstance(Process *process,
case llvm::Triple::IOS:
case llvm::Triple::TvOS:
case llvm::Triple::WatchOS:
+ case llvm::Triple::XROS:
// NEED_BRIDGEOS_TRIPLE case llvm::Triple::BridgeOS:
if (triple_ref.getVendor() != llvm::Triple::Apple) {
return nullptr;
diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp
index 4451d8c7689a28d..261592558095b4f 100644
--- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp
+++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp
@@ -55,6 +55,7 @@ DynamicLoader *DynamicLoaderMacOS::CreateInstance(Process *process,
case llvm::Triple::IOS:
case llvm::Triple::TvOS:
case llvm::Triple::WatchOS:
+ case llvm::Triple::XROS:
// NEED_BRIDGEOS_TRIPLE case llvm::Triple::BridgeOS:
create = triple_ref.getVendor() == llvm::Triple::Apple;
break;
diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
index 0bd465aba2d8a2f..7e589b0d7af2c7d 100644
--- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
+++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
@@ -75,6 +75,7 @@ DynamicLoader *DynamicLoaderMacOSXDYLD::CreateInstance(Process *process,
case llvm::Triple::IOS:
case llvm::Triple::TvOS:
case llvm::Triple::WatchOS:
+ case llvm::Triple::XROS:
// NEED_BRIDGEOS_TRIPLE case llvm::Triple::BridgeOS:
create = triple_ref.getVendor() == llvm::Triple::Apple;
break;
diff --git a/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp b/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp
index ff5c79aa2455b03..b652ede9b1f518f 100644
--- a/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp
+++ b/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp
@@ -830,6 +830,7 @@ uint32_t EmulateInstructionARM::GetFramePointerRegisterNumber() const {
case llvm::Triple::IOS:
case llvm::Triple::TvOS:
case llvm::Triple::WatchOS:
+ case llvm::Triple::XROS:
// NEED_BRIDGEOS_TRIPLE case llvm::Triple::BridgeOS:
is_apple = true;
break;
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index e40ba8d3addb514..8cb9a5989d89848 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -4916,6 +4916,14 @@ struct OSEnv {
environment =
llvm::Triple::getEnvironmentTypeName(llvm::Triple::Simulator);
return;
+ case llvm::MachO::PLATFORM_XROS:
+ os_type = llvm::Triple::getOSTypeName(llvm::Triple::XROS);
+ return;
+ case llvm::MachO::PLATFORM_XROS_SIMULATOR:
+ os_type = llvm::Triple::getOSTypeName(llvm::Triple::XROS);
+ environment =
+ llvm::Triple::getEnvironmentTypeName(llvm::Triple::Simulator);
+ return;
default: {
Log *log(GetLog(LLDBLog::Symbols | LLDBLog::Process));
LLDB_LOGF(log, "unsupported platform in LC_BUILD_VERSION");
@@ -6483,7 +6491,8 @@ bool ObjectFileMachO::SaveCore(const lldb::ProcessSP &process_sp,
(target_triple.getOS() == llvm::Triple::MacOSX ||
target_triple.getOS() == llvm::Triple::IOS ||
target_triple.getOS() == llvm::Triple::WatchOS ||
- target_triple.getOS() == llvm::Triple::TvOS)) {
+ target_triple.getOS() == llvm::Triple::TvOS ||
+ target_triple.getOS() == llvm::Triple::XROS)) {
// NEED_BRIDGEOS_TRIPLE target_triple.getOS() == llvm::Triple::BridgeOS))
// {
bool make_core = false;
diff --git a/lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt b/lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt
index fd3dffc948e8147..8c1e9f4013fbb26 100644
--- a/lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt
+++ b/lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt
@@ -14,6 +14,7 @@ list(APPEND PLUGIN_PLATFORM_MACOSX_SOURCES
PlatformRemoteAppleBridge.cpp
PlatformRemoteAppleTV.cpp
PlatformRemoteAppleWatch.cpp
+ PlatformRemoteAppleXR.cpp
PlatformRemoteDarwinDevice.cpp
PlatformRemoteMacOSX.cpp
PlatformRemoteiOS.cpp
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp
index dc59d904c74d820..0c4b566b7d5356c 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp
@@ -675,6 +675,41 @@ struct PlatformAppleWatchSimulator {
}
};
+static const char *g_xros_plugin_name = "xros-simulator";
+static const char *g_xros_description = "XROS simulator platform plug-in.";
+
+/// XRSimulator Plugin.
+struct PlatformXRSimulator {
+ static void Initialize() {
+ PluginManager::RegisterPlugin(g_xros_plugin_name, g_xros_description,
+ PlatformXRSimulator::CreateInstance);
+ }
+
+ static void Terminate() {
+ PluginManager::UnregisterPlugin(PlatformXRSimulator::CreateInstance);
+ }
+
+ static PlatformSP CreateInstance(bool force, const ArchSpec *arch) {
+ return PlatformAppleSimulator::CreateInstance(
+ "PlatformXRSimulator", g_xros_description,
+ ConstString(g_xros_plugin_name),
+ {llvm::Triple::aarch64, llvm::Triple::x86_64, llvm::Triple::x86},
+ llvm::Triple::XROS, {llvm::Triple::XROS},
+ {
+#ifdef __APPLE__
+#if __arm64__
+ "arm64e-apple-xros-simulator", "arm64-apple-xros-simulator",
+#else
+ "x86_64-apple-xros-simulator", "x86_64h-apple-xros-simulator",
+#endif
+#endif
+ },
+ "XRSimulator.Internal.sdk", "XRSimulator.sdk",
+ XcodeSDK::Type::XRSimulator,
+ CoreSimulatorSupport::DeviceType::ProductFamilyID::appleXR, force,
+ arch);
+ }
+};
static unsigned g_initialize_count = 0;
@@ -685,12 +720,14 @@ void PlatformAppleSimulator::Initialize() {
PlatformiOSSimulator::Initialize();
PlatformAppleTVSimulator::Initialize();
PlatformAppleWatchSimulator::Initialize();
+ PlatformXRSimulator::Initialize();
}
}
void PlatformAppleSimulator::Terminate() {
if (g_initialize_count > 0)
if (--g_initialize_count == 0) {
+ PlatformXRSimulator::Terminate();
PlatformAppleWatchSimulator::Terminate();
PlatformAppleTVSimulator::Terminate();
PlatformiOSSimulator::Terminate();
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
index ca7ff5a99f9060b..6fb5bbfbe417ba1 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
@@ -796,6 +796,9 @@ FileSpec PlatformDarwin::GetSDKDirectoryForModules(XcodeSDK::Type sdk_type) {
case XcodeSDK::Type::AppleTVSimulator:
sdks_spec.AppendPathComponent("AppleTVSimulator.platform");
break;
+ case XcodeSDK::Type::XRSimulator:
+ sdks_spec.AppendPathComponent("XRSimulator.platform");
+ break;
default:
llvm_unreachable("unsupported sdk");
}
@@ -1032,6 +1035,9 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
case XcodeSDK::Type::watchOS:
use_current_os_version = get_host_os() == llvm::Triple::WatchOS;
break;
+ case XcodeSDK::Type::XROS:
+ use_current_os_version = get_host_os() == llvm::Triple::XROS;
+ break;
default:
break;
}
@@ -1049,8 +1055,10 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
version = object_file->GetMinimumOSVersion();
}
}
- // Only add the version-min options if we got a version from somewhere
- if (!version.empty() && sdk_type != XcodeSDK::Type::Linux) {
+ // Only add the version-min options if we got a version from somewhere.
+ // clang has no version-min clang flag for XROS.
+ if (!version.empty() && sdk_type != XcodeSDK::Type::Linux &&
+ sdk_type != XcodeSDK::Type::XROS) {
#define OPTION(PREFIX, NAME, VAR, ...) \
llvm::StringRef opt_##VAR = NAME; \
(void)opt_##VAR;
@@ -1079,6 +1087,9 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
case XcodeSDK::Type::watchOS:
minimum_version_option << opt_mwatchos_version_min_EQ;
break;
+ case XcodeSDK::Type::XRSimulator:
+ case XcodeSDK::Type::XROS:
+ // FIXME: Pass the right argument once it exists.
case XcodeSDK::Type::bridgeOS:
case XcodeSDK::Type::Linux:
case XcodeSDK::Type::unknown:
@@ -1343,6 +1354,8 @@ llvm::Triple::OSType PlatformDarwin::GetHostOSType() {
return llvm::Triple::TvOS;
#elif TARGET_OS_BRIDGE
return llvm::Triple::BridgeOS;
+#elif TARGET_OS_XR
+ return llvm::Triple::XROS;
#else
#error "LLDB being compiled for an unrecognized Darwin OS"
#endif
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
index ba412da62e57b07..dad6dcd13395534 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
@@ -15,6 +15,7 @@
#include "PlatformRemoteAppleBridge.h"
#include "PlatformRemoteAppleTV.h"
#include "PlatformRemoteAppleWatch.h"
+#include "PlatformRemoteAppleXR.h"
#endif
#include "lldb/Breakpoint/BreakpointLocation.h"
#include "lldb/Core/Debugger.h"
@@ -53,6 +54,7 @@ void PlatformMacOSX::Initialize() {
PlatformRemoteAppleTV::Initialize();
PlatformRemoteAppleWatch::Initialize();
PlatformRemoteAppleBridge::Initialize();
+ PlatformRemoteAppleXR::Initialize();
#endif
if (g_initialize_count++ == 0) {
@@ -75,6 +77,7 @@ void PlatformMacOSX::Terminate() {
}
#if defined(__APPLE__)
+ PlatformRemoteAppleXR::Terminate();
PlatformRemoteAppleBridge::Terminate();
PlatformRemoteAppleWatch::Terminate();
PlatformRemoteAppleTV::Terminate();
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.cpp
new file mode 100644
index 000000000000000..37aa80817a74602
--- /dev/null
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.cpp
@@ -0,0 +1,157 @@
+//===-- PlatformRemoteAppleXR.cpp -----------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include <string>
+#include <vector>
+
+#include "PlatformRemoteAppleXR.h"
+#include "lldb/Breakpoint/BreakpointLocation.h"
+#include "lldb/Core/Module.h"
+#include "lldb/Core/ModuleList.h"
+#include "lldb/Core/PluginManager.h"
+#include "lldb/Target/Process.h"
+#include "lldb/Target/Target.h"
+#include "lldb/Utility/ArchSpec.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/LLDBLog.h"
+#include "lldb/Utility/Log.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+// Static Variables
+static uint32_t g_xr_initialize_count = 0;
+
+// Static Functions
+void PlatformRemoteAppleXR::Initialize() {
+ PlatformDarwin::Initialize();
+
+ if (g_xr_initialize_count++ == 0) {
+ PluginManager::RegisterPlugin(PlatformRemoteAppleXR::GetPluginNameStatic(),
+ PlatformRemoteAppleXR::GetDescriptionStatic(),
+ PlatformRemoteAppleXR::CreateInstance);
+ }
+}
+
+void PlatformRemoteAppleXR::Terminate() {
+ if (g_xr_initialize_count > 0) {
+ if (--g_xr_initialize_count == 0) {
+ PluginManager::UnregisterPlugin(PlatformRemoteAppleXR::CreateInstance);
+ }
+ }
+
+ PlatformDarwin::Terminate();
+}
+
+PlatformSP PlatformRemoteAppleXR::CreateInstance(bool force,
+ const ArchSpec *arch) {
+ Log *log = GetLog(LLDBLog::Platform);
+ if (log) {
+ const char *arch_name;
+ if (arch && arch->GetArchitectureName())
+ arch_name = arch->GetArchitectureName();
+ else
+ arch_name = "<null>";
+
+ const char *triple_cstr =
+ arch ? arch->GetTriple().getTriple().c_str() : "<null>";
+
+ LLDB_LOGF(log, "PlatformRemoteAppleXR::%s(force=%s, arch={%s,%s})",
+ __FUNCTION__, force ? "true" : "false", arch_name, triple_cstr);
+ }
+
+ bool create = force;
+ if (!create && arch && arch->IsValid()) {
+ switch (arch->GetMachine()) {
+ case llvm::Triple::arm:
+ case llvm::Triple::aarch64:
+ case llvm::Triple::aarch64_32:
+ case llvm::Triple::thumb: {
+ const llvm::Triple &triple = arch->GetTriple();
+ llvm::Triple::VendorType vendor = triple.getVendor();
+ switch (vendor) {
+ case llvm::Triple::Apple:
+ create = true;
+ break;
+
+#if defined(__APPLE__)
+ // Only accept "unknown" for the vendor if the host is Apple and
+ // "unknown" wasn't specified (it was just returned because it was NOT
+ // specified)
+ case llvm::Triple::UnknownVendor:
+ create = !arch->TripleVendorWasSpecified();
+ break;
+
+#endif
+ default:
+ break;
+ }
+ if (create) {
+ switch (triple.getOS()) {
+ case llvm::Triple::XROS: // This is the right triple value for Apple
+ // XR debugging
+ break;
+
+ default:
+ create = false;
+ break;
+ }
+ }
+ } break;
+ default:
+ break;
+ }
+ }
+
+#if defined(__XROS_DISCLOSED__) && defined(TARGET_OS_XR) && TARGET_OS_XR == 1
+ // If lldb is running on a XR device, this isn't a RemoteXR.
+ if (force == false) {
+ create = false;
+ }
+#endif
+
+ if (create) {
+ LLDB_LOGF(log, "PlatformRemoteAppleXR::%s() creating platform",
+ __FUNCTION__);
+
+ return lldb::PlatformSP(new PlatformRemoteAppleXR());
+ }
+
+ LLDB_LOGF(log, "PlatformRemoteAppleXR::%s() aborting creation of platform",
+ __FUNCTION__);
+
+ return lldb::PlatformSP();
+}
+
+llvm::StringRef PlatformRemoteAppleXR::GetPluginNameStatic() {
+ return "remote-xros";
+}
+
+llvm::StringRef PlatformRemoteAppleXR::GetDescriptionStatic() {
+ return "Remote Apple XR platform plug-in.";
+}
+
+/// Default Constructor
+PlatformRemoteAppleXR::PlatformRemoteAppleXR() : PlatformRemoteDarwinDevice() {}
+
+std::vector<lldb_private::ArchSpec>
+PlatformRemoteAppleXR::GetSupportedArchitectures(
+ const ArchSpec &process_host_arch) {
+ std::vector<ArchSpec> result;
+ result.push_back(ArchSpec("arm64-apple-xros"));
+ result.push_back(ArchSpec("arm64-apple-xros"));
+ return result;
+}
+
+llvm::StringRef PlatformRemoteAppleXR::GetDeviceSupportDirectoryName() {
+ return "XROS DeviceSupport";
+}
+
+llvm::StringRef PlatformRemoteAppleXR::GetPlatformName() {
+ return "XROS.platform";
+}
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.h
new file mode 100644
index 000000000000000..4fed6e15eda31c2
--- /dev/null
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleXR.h
@@ -0,0 +1,38 @@
+//===-- PlatformRemoteAppleXR.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "PlatformRemoteDarwinDevice.h"
+
+namespace lldb_private {
+class PlatformRemoteAppleXR : public PlatformRemoteDarwinDevice {
+public:
+ PlatformRemoteAppleXR();
+
+ static lldb::PlatformSP CreateInstance(bool force,
+ const lldb_private::ArchSpec *arch);
+
+ static void Initialize();
+
+ static void Terminate();
+
+ static llvm::StringRef GetPluginNameStatic();
+
+ static llvm::StringRef GetDescriptionStatic();
+
+ llvm::StringRef GetDescription() override { return GetDescriptionStatic(); }
+
+ llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
+
+ std::vector<lldb_private::ArchSpec> GetSupportedArchitectures(
+ const lldb_private::ArchSpec &process_host_arch) override;
+
+protected:
+ llvm::StringRef GetDeviceSupportDirectoryName() override;
+ llvm::StringRef GetPlatformName() override;
+};
+} // namespace lldb_private
diff --git a/lldb/source/Plugins/Platform/MacOSX/objcxx/PlatformiOSSimulatorCoreSimulatorSupport.h b/lldb/source/Plugins/Platform/MacOSX/objcxx/PlatformiOSSimulatorCoreSimulatorSupport.h
index 1889be65e196d78..b2956054d50bf43 100644
--- a/lldb/source/Plugins/Platform/MacOSX/objcxx/PlatformiOSSimulatorCoreSimulatorSupport.h
+++ b/lldb/source/Plugins/Platform/MacOSX/objcxx/PlatformiOSSimulatorCoreSimulatorSupport.h
@@ -73,7 +73,8 @@ class DeviceType {
iPhone = 1,
iPad = 2,
appleTV = 3,
- appleWatch = 4
+ appleWatch = 4,
+ appleXR = 7,
};
DeviceType();
diff --git a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
index de739acf5b2a52d..755b3a773692e3a 100644
--- a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
+++ b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
@@ -125,6 +125,7 @@ bool ProcessKDP::CanDebug(TargetSP target_sp, bool plugin_specified_by_name) {
case llvm::Triple::IOS: // For arm targets
case llvm::Triple::TvOS:
case llvm::Triple::WatchOS:
+ case llvm::Triple::XROS:
if (triple_ref.getVendor() == llvm::Triple::Apple) {
ObjectFile *exe_objfile = exe_module->GetObjectFile();
if (exe_objfile->GetType() == ObjectFile::eTypeExecutable &&
diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
index ad72b3d121e6734..f87f28ceea1a127 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
@@ -1180,7 +1180,7 @@ bool GDBRemoteCommunicationClient::GetDefaultThreadId(lldb::tid_t &tid) {
static void ParseOSType(llvm::StringRef value, std::string &os_name,
std::string &environment) {
if (value.equals("iossimulator") || value.equals("tvossimulator") ||
- value.equals("watchossimulator")) {
+ value.equals("watchossimulator") || value.equals("xrossimulator")) {
environment = "simulator";
os_name = value.drop_back(environment.size()).str();
} else if (value.equals("maccatalyst")) {
diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
index dbceaf0ed4f4412..a97e51cc7b7d0a7 100644
--- a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
+++ b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
@@ -61,6 +61,7 @@ SystemRuntime *SystemRuntimeMacOSX::CreateInstance(Process *process) {
case llvm::Triple::IOS:
case llvm::Triple::TvOS:
case llvm::Triple::WatchOS:
+ case llvm::Triple::XROS:
// NEED_BRIDGEOS_TRIPLE case llvm::Triple::BridgeOS:
create = triple_ref.getVendor() == llvm::Triple::Apple;
break;
diff --git a/lldb/source/Utility/XcodeSDK.cpp b/lldb/source/Utility/XcodeSDK.cpp
index d744336373b23b8..712d611db28f831 100644
--- a/lldb/source/Utility/XcodeSDK.cpp
+++ b/lldb/source/Utility/XcodeSDK.cpp
@@ -34,6 +34,10 @@ static llvm::StringRef GetName(XcodeSDK::Type type) {
return "WatchSimulator";
case XcodeSDK::watchOS:
return "WatchOS";
+ case XcodeSDK::XRSimulator:
+ return "XRSimulator";
+ case XcodeSDK::XROS:
+ return "XROS";
case XcodeSDK::bridgeOS:
return "bridgeOS";
case XcodeSDK::Linux:
@@ -75,6 +79,10 @@ static XcodeSDK::Type ParseSDKName(llvm::StringRef &name) {
return XcodeSDK::WatchSimulator;
if (name.consume_front("WatchOS"))
return XcodeSDK::watchOS;
+ if (name.consume_front("XRSimulator"))
+ return XcodeSDK::XRSimulator;
+ if (name.consume_front("XROS"))
+ return XcodeSDK::XROS;
if (name.consume_front("bridgeOS"))
return XcodeSDK::bridgeOS;
if (name.consume_front("Linux"))
@@ -183,6 +191,12 @@ std::string XcodeSDK::GetCanonicalName(XcodeSDK::Info info) {
case watchOS:
name = "watchos";
break;
+ case XRSimulator:
+ name = "xrsimulator";
+ break;
+ case XROS:
+ name = "xros";
+ break;
case bridgeOS:
name = "bridgeos";
break;
@@ -212,6 +226,9 @@ bool XcodeSDK::SDKSupportsModules(XcodeSDK::Type sdk_type,
case Type::watchOS:
case Type::WatchSimulator:
return version >= llvm::VersionTuple(6);
+ case Type::XROS:
+ case Type::XRSimulator:
+ return true;
default:
return false;
}
@@ -233,6 +250,8 @@ bool XcodeSDK::SupportsSwift() const {
case Type::WatchSimulator:
case Type::watchOS:
return info.version.empty() || info.version >= llvm::VersionTuple(2);
+ case Type::XROS:
+ case Type::XRSimulator:
case Type::Linux:
return true;
default:
@@ -276,6 +295,10 @@ XcodeSDK::Type XcodeSDK::GetSDKTypeForTriple(const llvm::Triple &triple) {
if (triple.getEnvironment() == Triple::Simulator)
return XcodeSDK::WatchSimulator;
return XcodeSDK::watchOS;
+ case Triple::XROS:
+ if (triple.getEnvironment() == Triple::Simulator)
+ return XcodeSDK::XRSimulator;
+ return XcodeSDK::XROS;
case Triple::Linux:
return XcodeSDK::Linux;
default:
diff --git a/lldb/tools/debugserver/source/MacOSX/MachProcess.mm b/lldb/tools/debugserver/source/MacOSX/MachProcess.mm
index 93b976127ba45cd..3a4dfb9ea6ea22b 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachProcess.mm
+++ b/lldb/tools/debugserver/source/MacOSX/MachProcess.mm
@@ -72,6 +72,14 @@
#define PLATFORM_DRIVERKIT 10
#endif
+#ifndef PLATFORM_XROS
+#define PLATFORM_XROS 11
+#endif
+
+#ifndef PLATFORM_XR_SIMULATOR
+#define PLATFORM_XR_SIMULATOR 12
+#endif
+
#ifdef WITH_SPRINGBOARD
#include <CoreFoundation/CoreFoundation.h>
@@ -746,6 +754,10 @@ static bool FBSAddEventDataToOptions(NSMutableDictionary *options,
return "bridgeos";
case PLATFORM_DRIVERKIT:
return "driverkit";
+ case PLATFORM_XROS:
+ return "xros";
+ case PLATFORM_XR_SIMULATOR:
+ return "xrossimulator";
default:
DNBLogError("Unknown platform %u found for one binary", platform);
return std::nullopt;
diff --git a/lldb/tools/debugserver/source/RNBRemote.cpp b/lldb/tools/debugserver/source/RNBRemote.cpp
index 4e9086b0411f2d7..224ed033fc42179 100644
--- a/lldb/tools/debugserver/source/RNBRemote.cpp
+++ b/lldb/tools/debugserver/source/RNBRemote.cpp
@@ -3565,10 +3565,11 @@ rnb_err_t RNBRemote::HandlePacket_qSupported(const char *p) {
bool enable_compression = false;
(void)enable_compression;
-#if (defined (TARGET_OS_WATCH) && TARGET_OS_WATCH == 1) \
- || (defined (TARGET_OS_IOS) && TARGET_OS_IOS == 1) \
- || (defined (TARGET_OS_TV) && TARGET_OS_TV == 1) \
- || (defined (TARGET_OS_BRIDGE) && TARGET_OS_BRIDGE == 1)
+#if (defined(TARGET_OS_WATCH) && TARGET_OS_WATCH == 1) || \
+ (defined(TARGET_OS_IOS) && TARGET_OS_IOS == 1) || \
+ (defined(TARGET_OS_TV) && TARGET_OS_TV == 1) || \
+ (defined(TARGET_OS_BRIDGE) && TARGET_OS_BRIDGE == 1) || \
+ (defined(TARGET_OS_XR) && TARGET_OS_XR == 1)
enable_compression = true;
#endif
@@ -4866,6 +4867,8 @@ rnb_err_t RNBRemote::HandlePacket_qHostInfo(const char *p) {
strm << "ostype:bridgeos;";
#elif defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1
strm << "ostype:macosx;";
+#elif defined(TARGET_OS_XR) && TARGET_OS_XR == 1
+ strm << "ostype:xros;";
#else
strm << "ostype:ios;";
#endif
diff --git a/lldb/unittests/Utility/XcodeSDKTest.cpp b/lldb/unittests/Utility/XcodeSDKTest.cpp
index 88371a48a8b18b6..8bf7ee1be1dba7a 100644
--- a/lldb/unittests/Utility/XcodeSDKTest.cpp
+++ b/lldb/unittests/Utility/XcodeSDKTest.cpp
@@ -27,6 +27,8 @@ TEST(XcodeSDKTest, ParseTest) {
EXPECT_EQ(XcodeSDK("AppleTVOS.sdk").GetType(), XcodeSDK::AppleTVOS);
EXPECT_EQ(XcodeSDK("WatchSimulator.sdk").GetType(), XcodeSDK::WatchSimulator);
EXPECT_EQ(XcodeSDK("WatchOS.sdk").GetType(), XcodeSDK::watchOS);
+ EXPECT_EQ(XcodeSDK("XRSimulator.sdk").GetType(), XcodeSDK::XRSimulator);
+ EXPECT_EQ(XcodeSDK("XROS.sdk").GetType(), XcodeSDK::XROS);
EXPECT_EQ(XcodeSDK("Linux.sdk").GetType(), XcodeSDK::Linux);
EXPECT_EQ(XcodeSDK("MacOSX.sdk").GetVersion(), llvm::VersionTuple());
EXPECT_EQ(XcodeSDK("MacOSX10.9.sdk").GetVersion(), llvm::VersionTuple(10, 9));
@@ -127,6 +129,14 @@ TEST(XcodeSDKTest, GetCanonicalNameAndConstruct) {
EXPECT_EQ("watchos", XcodeSDK::GetCanonicalName(info));
EXPECT_EQ(XcodeSDK(info).Parse(), info);
+ info.type = XcodeSDK::Type::XRSimulator;
+ EXPECT_EQ("xrsimulator", XcodeSDK::GetCanonicalName(info));
+ EXPECT_EQ(XcodeSDK(info).Parse(), info);
+
+ info.type = XcodeSDK::Type::XROS;
+ EXPECT_EQ("xros", XcodeSDK::GetCanonicalName(info));
+ EXPECT_EQ(XcodeSDK(info).Parse(), info);
+
info.type = XcodeSDK::Type::Linux;
EXPECT_EQ("linux", XcodeSDK::GetCanonicalName(info));
EXPECT_EQ(XcodeSDK(info).Parse(), info);
@@ -164,6 +174,13 @@ TEST(XcodeSDKTest, GetCanonicalNameAndConstruct) {
EXPECT_EQ("watchos.internal", XcodeSDK::GetCanonicalName(info));
EXPECT_EQ(XcodeSDK(info).Parse(), info);
+ info.type = XcodeSDK::Type::XRSimulator;
+ EXPECT_EQ("xrsimulator.internal", XcodeSDK::GetCanonicalName(info));
+ EXPECT_EQ(XcodeSDK(info).Parse(), info);
+
+ info.type = XcodeSDK::Type::XROS;
+ EXPECT_EQ("xros.internal", XcodeSDK::GetCanonicalName(info));
+ EXPECT_EQ(XcodeSDK(info).Parse(), info);
info.type = XcodeSDK::Type::MacOSX;
info.version = llvm::VersionTuple(10, 9);
EXPECT_EQ("macosx10.9.internal", XcodeSDK::GetCanonicalName(info));
@@ -199,6 +216,11 @@ TEST(XcodeSDKTest, GetSDKTypeForTriple) {
XcodeSDK::Type::WatchSimulator);
EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("arm64-apple-watchos")),
XcodeSDK::Type::watchOS);
+ EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(
+ llvm::Triple("arm64e-apple-xros-simulator")),
+ XcodeSDK::Type::XRSimulator);
+ EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("arm64e-apple-xros")),
+ XcodeSDK::Type::XROS);
EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("x86_64-unknown-linux")),
XcodeSDK::Type::Linux);
EXPECT_EQ(XcodeSDK::GetSDKTypeForTriple(llvm::Triple("i386-unknown-netbsd")),
More information about the lldb-commits
mailing list