[Lldb-commits] [lldb] 243903f - Factor out common code from the iPhone/AppleTV/WatchOS simulator platform plugins. (NFC)
Adrian Prantl via lldb-commits
lldb-commits at lists.llvm.org
Thu Aug 6 16:37:08 PDT 2020
Author: Adrian Prantl
Date: 2020-08-06T16:36:58-07:00
New Revision: 243903f3262d0e1727fe7d473da741c4a742a937
URL: https://github.com/llvm/llvm-project/commit/243903f3262d0e1727fe7d473da741c4a742a937
DIFF: https://github.com/llvm/llvm-project/commit/243903f3262d0e1727fe7d473da741c4a742a937.diff
LOG: Factor out common code from the iPhone/AppleTV/WatchOS simulator platform plugins. (NFC)
The implementation of these classes was copied & pasted from the
iPhone simulator plugin with only a handful of configuration
parameters substituted. This patch moves the redundant implementations
into the base class PlatformAppleSimulator.
Differential Revision: https://reviews.llvm.org/D85243
Added:
Modified:
lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt
lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp
lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.h
lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
lldb/unittests/Platform/PlatformAppleSimulatorTest.cpp
Removed:
lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp
lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.h
lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp
lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.h
lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp
lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.h
################################################################################
diff --git a/lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt b/lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt
index 4470797120566..8b5be337f45b7 100644
--- a/lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt
+++ b/lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt
@@ -19,9 +19,6 @@ list(APPEND PLUGIN_PLATFORM_MACOSX_SOURCES
list(APPEND PLUGIN_PLATFORM_MACOSX_DARWIN_ONLY_SOURCES
PlatformAppleSimulator.cpp
- PlatformiOSSimulator.cpp
- PlatformAppleTVSimulator.cpp
- PlatformAppleWatchSimulator.cpp
)
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp
index 0160fb95c58a9..5201e203f77e6 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp
@@ -12,16 +12,21 @@
#include <dlfcn.h>
#endif
-#include <mutex>
-#include <thread>
-#include "lldb/Host/PseudoTerminal.h"
+#include "lldb/Core/Module.h"
+#include "lldb/Core/PluginManager.h"
#include "lldb/Host/HostInfo.h"
+#include "lldb/Host/PseudoTerminal.h"
#include "lldb/Target/Process.h"
#include "lldb/Utility/LLDBAssert.h"
+#include "lldb/Utility/Log.h"
#include "lldb/Utility/Status.h"
#include "lldb/Utility/StreamString.h"
+
#include "llvm/Support/Threading.h"
+#include <mutex>
+#include <thread>
+
using namespace lldb;
using namespace lldb_private;
@@ -29,15 +34,17 @@ using namespace lldb_private;
#define UNSUPPORTED_ERROR ("Apple simulators aren't supported on this platform")
#endif
-// Static Functions
-void PlatformAppleSimulator::Initialize() { PlatformDarwin::Initialize(); }
-
-void PlatformAppleSimulator::Terminate() { PlatformDarwin::Terminate(); }
-
/// Default Constructor
PlatformAppleSimulator::PlatformAppleSimulator(
+ const char *class_name, const char *description, ConstString plugin_name,
+ llvm::Triple::OSType preferred_os,
+ llvm::SmallVector<llvm::StringRef, 4> supported_triples,
+ llvm::StringRef sdk, lldb_private::XcodeSDK::Type sdk_type,
CoreSimulatorSupport::DeviceType::ProductFamilyID kind)
- : PlatformDarwin(true), m_kind(kind) {}
+ : PlatformDarwin(true), m_class_name(class_name),
+ m_description(description), m_plugin_name(plugin_name), m_kind(kind),
+ m_os_type(preferred_os), m_supported_triples(supported_triples),
+ m_sdk(sdk), m_sdk_type(sdk_type) {}
/// Destructor.
///
@@ -73,6 +80,12 @@ lldb_private::Status PlatformAppleSimulator::LaunchProcess(
}
void PlatformAppleSimulator::GetStatus(Stream &strm) {
+ Platform::GetStatus(strm);
+ if (!m_sdk.empty())
+ strm << " SDK Path: \"" << m_sdk << "\"\n";
+ else
+ strm << " SDK Path: error: unable to locate SDK\n";
+
#if defined(__APPLE__)
// This will get called by subclasses, so just output status on the current
// simulator
@@ -87,31 +100,30 @@ void PlatformAppleSimulator::GetStatus(Stream &strm) {
strm.Printf("Available devices:\n");
for (size_t i = 0; i < num_devices; ++i) {
CoreSimulatorSupport::Device device = devices.GetDeviceAtIndex(i);
- strm.Printf(" %s: %s\n", device.GetUDID().c_str(),
- device.GetName().c_str());
+ strm << " " << device.GetUDID() << ": " << device.GetName() << "\n";
}
if (m_device.hasValue() && m_device->operator bool()) {
- strm.Printf("Current device: %s: %s", m_device->GetUDID().c_str(),
- m_device->GetName().c_str());
+ strm << "Current device: " << m_device->GetUDID() << ": "
+ << m_device->GetName();
if (m_device->GetState() == CoreSimulatorSupport::Device::State::Booted) {
- strm.Printf(" state = booted");
+ strm << " state = booted";
}
- strm.Printf("\nType \"platform connect <ARG>\" where <ARG> is a device "
- "UDID or a device name to disconnect and connect to a "
- "
diff erent device.\n");
+ strm << "\nType \"platform connect <ARG>\" where <ARG> is a device "
+ "UDID or a device name to disconnect and connect to a "
+ "
diff erent device.\n";
} else {
- strm.Printf("No current device is selected, \"platform connect <ARG>\" "
- "where <ARG> is a device UDID or a device name to connect to "
- "a specific device.\n");
+ strm << "No current device is selected, \"platform connect <ARG>\" "
+ "where <ARG> is a device UDID or a device name to connect to "
+ "a specific device.\n";
}
} else {
- strm.Printf("No devices are available.\n");
+ strm << "No devices are available.\n";
}
#else
- strm.Printf(UNSUPPORTED_ERROR);
+ strm << UNSUPPORTED_ERROR;
#endif
}
@@ -261,3 +273,402 @@ bool PlatformAppleSimulator::GetSupportedArchitectureAtIndex(uint32_t idx,
arch = ArchSpec(m_supported_triples[idx]);
return true;
}
+
+PlatformSP PlatformAppleSimulator::CreateInstance(
+ const char *class_name, const char *description, ConstString plugin_name,
+ llvm::SmallVector<llvm::Triple::ArchType, 4> supported_arch,
+ llvm::Triple::OSType preferred_os,
+ llvm::SmallVector<llvm::Triple::OSType, 4> supported_os,
+ llvm::SmallVector<llvm::StringRef, 4> supported_triples,
+ llvm::StringRef sdk, lldb_private::XcodeSDK::Type sdk_type,
+ CoreSimulatorSupport::DeviceType::ProductFamilyID kind, bool force,
+ const ArchSpec *arch) {
+ Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_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, "%s::%s(force=%s, arch={%s,%s})", class_name, __FUNCTION__,
+ force ? "true" : "false", arch_name, triple_cstr);
+ }
+
+ bool create = force;
+ if (!create && arch && arch->IsValid()) {
+ if (std::count(supported_arch.begin(), supported_arch.end(),
+ arch->GetMachine())) {
+ const llvm::Triple &triple = arch->GetTriple();
+ switch (triple.getVendor()) {
+ case llvm::Triple::Apple:
+ create = true;
+ break;
+
+#if defined(__APPLE__)
+ // Only accept "unknown" for the vendor if the host is Apple and if
+ // "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) {
+ if (std::count(supported_os.begin(), supported_os.end(), triple.getOS()))
+ create = true;
+#if defined(__APPLE__)
+ // Only accept "unknown" for the OS if the host is Apple and it
+ // "unknown" wasn't specified (it was just returned because it was NOT
+ // specified)
+ else if (triple.getOS() == llvm::Triple::UnknownOS)
+ create = !arch->TripleOSWasSpecified();
+#endif
+ else
+ create = false;
+ }
+ }
+ }
+ if (create) {
+ LLDB_LOGF(log, "%s::%s() creating platform", class_name, __FUNCTION__);
+
+ return PlatformSP(new PlatformAppleSimulator(
+ class_name, description, plugin_name, preferred_os, supported_triples,
+ sdk, sdk_type, kind));
+ }
+
+ LLDB_LOGF(log, "%s::%s() aborting creation of platform", class_name,
+ __FUNCTION__);
+
+ return PlatformSP();
+}
+
+Status PlatformAppleSimulator::ResolveExecutable(
+ const ModuleSpec &module_spec, lldb::ModuleSP &exe_module_sp,
+ const FileSpecList *module_search_paths_ptr) {
+ Status error;
+ // Nothing special to do here, just use the actual file and architecture
+
+ ModuleSpec resolved_module_spec(module_spec);
+
+ // If we have "ls" as the exe_file, resolve the executable loation based on
+ // the current path variables
+ // TODO: resolve bare executables in the Platform SDK
+ // if (!resolved_exe_file.Exists())
+ // resolved_exe_file.ResolveExecutableLocation ();
+
+ // Resolve any executable within a bundle on MacOSX
+ // TODO: verify that this handles shallow bundles, if not then implement one
+ // ourselves
+ Host::ResolveExecutableInBundle(resolved_module_spec.GetFileSpec());
+
+ if (FileSystem::Instance().Exists(resolved_module_spec.GetFileSpec())) {
+ if (resolved_module_spec.GetArchitecture().IsValid()) {
+ error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
+ NULL, NULL, NULL);
+
+ if (exe_module_sp && exe_module_sp->GetObjectFile())
+ return error;
+ exe_module_sp.reset();
+ }
+ // No valid architecture was specified or the exact ARM slice wasn't found
+ // so ask the platform for the architectures that we should be using (in
+ // the correct order) and see if we can find a match that way
+ StreamString arch_names;
+ ArchSpec platform_arch;
+ for (uint32_t idx = 0; GetSupportedArchitectureAtIndex(
+ idx, resolved_module_spec.GetArchitecture());
+ ++idx) {
+ // Only match x86 with x86 and x86_64 with x86_64...
+ if (!module_spec.GetArchitecture().IsValid() ||
+ module_spec.GetArchitecture().GetCore() ==
+ resolved_module_spec.GetArchitecture().GetCore()) {
+ error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
+ NULL, NULL, NULL);
+ // Did we find an executable using one of the
+ if (error.Success()) {
+ if (exe_module_sp && exe_module_sp->GetObjectFile())
+ break;
+ else
+ error.SetErrorToGenericError();
+ }
+
+ if (idx > 0)
+ arch_names.PutCString(", ");
+ arch_names.PutCString(platform_arch.GetArchitectureName());
+ }
+ }
+
+ if (error.Fail() || !exe_module_sp) {
+ if (FileSystem::Instance().Readable(resolved_module_spec.GetFileSpec())) {
+ error.SetErrorStringWithFormat(
+ "'%s' doesn't contain any '%s' platform architectures: %s",
+ resolved_module_spec.GetFileSpec().GetPath().c_str(),
+ GetPluginName().GetCString(), arch_names.GetString().str().c_str());
+ } else {
+ error.SetErrorStringWithFormat(
+ "'%s' is not readable",
+ resolved_module_spec.GetFileSpec().GetPath().c_str());
+ }
+ }
+ } else {
+ error.SetErrorStringWithFormat("'%s' does not exist",
+ module_spec.GetFileSpec().GetPath().c_str());
+ }
+
+ return error;
+}
+
+Status PlatformAppleSimulator::GetSymbolFile(const FileSpec &platform_file,
+ const UUID *uuid_ptr,
+ FileSpec &local_file) {
+ Status error;
+ char platform_file_path[PATH_MAX];
+ if (platform_file.GetPath(platform_file_path, sizeof(platform_file_path))) {
+ char resolved_path[PATH_MAX];
+
+ if (!m_sdk.empty()) {
+ ::snprintf(resolved_path, sizeof(resolved_path), "%s/%s",
+ m_sdk.str().c_str(), platform_file_path);
+
+ // First try in the SDK and see if the file is in there
+ local_file.SetFile(resolved_path, FileSpec::Style::native);
+ FileSystem::Instance().Resolve(local_file);
+ if (FileSystem::Instance().Exists(local_file))
+ return error;
+
+ // Else fall back to the actual path itself
+ local_file.SetFile(platform_file_path, FileSpec::Style::native);
+ FileSystem::Instance().Resolve(local_file);
+ if (FileSystem::Instance().Exists(local_file))
+ return error;
+ }
+ error.SetErrorStringWithFormat(
+ "unable to locate a platform file for '%s' in platform '%s'",
+ platform_file_path, GetPluginName().GetCString());
+ } else {
+ error.SetErrorString("invalid platform file argument");
+ }
+ return error;
+}
+
+Status PlatformAppleSimulator::GetSharedModule(
+ const ModuleSpec &module_spec, Process *process, ModuleSP &module_sp,
+ const FileSpecList *module_search_paths_ptr, ModuleSP *old_module_sp_ptr,
+ bool *did_create_ptr) {
+ // For iOS/tvOS/watchOS, the SDK files are all cached locally on the
+ // host system. So first we ask for the file in the cached SDK, then
+ // we attempt to get a shared module for the right architecture with
+ // the right UUID.
+ Status error;
+ ModuleSpec platform_module_spec(module_spec);
+ const FileSpec &platform_file = module_spec.GetFileSpec();
+ error = GetSymbolFile(platform_file, module_spec.GetUUIDPtr(),
+ platform_module_spec.GetFileSpec());
+ if (error.Success()) {
+ error = ResolveExecutable(platform_module_spec, module_sp,
+ module_search_paths_ptr);
+ } else {
+ const bool always_create = false;
+ error = ModuleList::GetSharedModule(
+ module_spec, module_sp, module_search_paths_ptr, old_module_sp_ptr,
+ did_create_ptr, always_create);
+ }
+ if (module_sp)
+ module_sp->SetPlatformFileSpec(platform_file);
+
+ return error;
+}
+
+uint32_t PlatformAppleSimulator::FindProcesses(
+ const ProcessInstanceInfoMatch &match_info,
+ ProcessInstanceInfoList &process_infos) {
+ ProcessInstanceInfoList all_osx_process_infos;
+ // First we get all OSX processes
+ const uint32_t n = Host::FindProcesses(match_info, all_osx_process_infos);
+
+ // Now we filter them down to only the matching triples.
+ for (uint32_t i = 0; i < n; ++i) {
+ const ProcessInstanceInfo &proc_info = all_osx_process_infos[i];
+ const llvm::Triple &triple = proc_info.GetArchitecture().GetTriple();
+ if (triple.getOS() == m_os_type &&
+ triple.getEnvironment() == llvm::Triple::Simulator) {
+ process_infos.push_back(proc_info);
+ }
+ }
+ return process_infos.size();
+}
+
+static llvm::StringRef GetXcodeSDKDir(std::string preferred,
+ std::string secondary) {
+ llvm::StringRef sdk;
+ sdk = HostInfo::GetXcodeSDKPath(XcodeSDK(std::move(preferred)));
+ if (sdk.empty())
+ sdk = HostInfo::GetXcodeSDKPath(XcodeSDK(std::move(secondary)));
+ return sdk;
+}
+
+static unsigned g_ios_initialize_count = 0;
+static const char *g_ios_plugin_name = "ios-simulator";
+static const char *g_ios_description = "iPhone simulator platform plug-in.";
+
+/// IPhone Simulator Plugin.
+struct PlatformiOSSimulator {
+ static void Initialize() {
+ if (g_ios_initialize_count++ == 0) {
+ PluginManager::RegisterPlugin(ConstString(g_ios_plugin_name),
+ g_ios_description,
+ PlatformiOSSimulator::CreateInstance);
+ }
+ }
+
+ static void Terminate() {
+ if (g_ios_initialize_count > 0)
+ if (--g_ios_initialize_count == 0)
+ PluginManager::UnregisterPlugin(PlatformiOSSimulator::CreateInstance);
+ }
+
+ static PlatformSP CreateInstance(bool force, const ArchSpec *arch) {
+ llvm::StringRef sdk;
+ sdk = HostInfo::GetXcodeSDKPath(XcodeSDK("iPhoneSimulator.Internal.sdk"));
+ if (sdk.empty())
+ sdk = HostInfo::GetXcodeSDKPath(XcodeSDK("iPhoneSimulator.sdk"));
+
+ return PlatformAppleSimulator::CreateInstance(
+ "PlatformiOSSimulator", g_ios_description,
+ ConstString(g_ios_plugin_name),
+ {llvm::Triple::aarch64, llvm::Triple::x86_64, llvm::Triple::x86},
+ llvm::Triple::IOS,
+ {// Deprecated, but still support Darwin for historical reasons.
+ llvm::Triple::Darwin, llvm::Triple::MacOSX,
+ // IOS is not used for simulator triples, but accept it just in
+ // case.
+ llvm::Triple::IOS},
+ {
+#ifdef __APPLE__
+#if __arm64__
+ "arm64e-apple-ios-simulator", "arm64-apple-ios-simulator",
+ "x86_64-apple-ios-simulator", "x86_64h-apple-ios-simulator",
+#else
+ "x86_64h-apple-ios-simulator", "x86_64-apple-ios-simulator",
+ "i386-apple-ios-simulator",
+#endif
+#endif
+ },
+ GetXcodeSDKDir("iPhoneSimulator.Internal.sdk", "iPhoneSimulator.sdk"),
+ XcodeSDK::Type::iPhoneSimulator,
+ CoreSimulatorSupport::DeviceType::ProductFamilyID::iPhone, force, arch);
+ }
+};
+
+static unsigned g_tvos_initialize_count = 0;
+static const char *g_tvos_plugin_name = "tvos-simulator";
+static const char *g_tvos_description = "tvOS simulator platform plug-in.";
+
+/// Apple TV Simulator Plugin.
+struct PlatformAppleTVSimulator {
+ static void Initialize() {
+ if (g_tvos_initialize_count++ == 0) {
+ PluginManager::RegisterPlugin(ConstString(g_tvos_plugin_name),
+ g_tvos_description,
+ PlatformAppleTVSimulator::CreateInstance);
+ }
+ }
+
+ static void Terminate() {
+ if (g_tvos_initialize_count > 0)
+ if (--g_tvos_initialize_count == 0)
+ PluginManager::UnregisterPlugin(PlatformAppleTVSimulator::CreateInstance);
+ }
+
+ static PlatformSP CreateInstance(bool force, const ArchSpec *arch) {
+ return PlatformAppleSimulator::CreateInstance(
+ "PlatformAppleTVSimulator", g_tvos_description,
+ ConstString(g_tvos_plugin_name),
+ {llvm::Triple::aarch64, llvm::Triple::x86_64}, llvm::Triple::TvOS,
+ {llvm::Triple::TvOS},
+ {
+#ifdef __APPLE__
+#if __arm64__
+ "arm64e-apple-tvos-simulator", "arm64-apple-tvos-simulator",
+ "x86_64h-apple-tvos-simulator", "x86_64-apple-tvos-simulator",
+#else
+ "x86_64h-apple-tvos-simulator", "x86_64-apple-tvos-simulator",
+#endif
+#endif
+ },
+ GetXcodeSDKDir("AppleTVSimulator.Internal.sdk", "AppleTVSimulator.sdk"),
+ XcodeSDK::Type::AppleTVSimulator,
+ CoreSimulatorSupport::DeviceType::ProductFamilyID::appleTV, force,
+ arch);
+ }
+};
+
+
+static unsigned g_watchos_initialize_count = 0;
+static const char *g_watchos_plugin_name = "watchos-simulator";
+static const char *g_watchos_description =
+ "Apple Watch simulator platform plug-in.";
+
+/// Apple Watch Simulator Plugin.
+struct PlatformAppleWatchSimulator {
+ static void Initialize() {
+ if (g_watchos_initialize_count++ == 0) {
+ PluginManager::RegisterPlugin(
+ ConstString(g_watchos_plugin_name), g_watchos_description,
+ PlatformAppleWatchSimulator::CreateInstance);
+ }
+ }
+
+ static void Terminate() {
+ if (g_watchos_initialize_count > 0)
+ if (--g_watchos_initialize_count == 0)
+ PluginManager::UnregisterPlugin(
+ PlatformAppleWatchSimulator::CreateInstance);
+ }
+
+ static PlatformSP CreateInstance(bool force, const ArchSpec *arch) {
+ return PlatformAppleSimulator::CreateInstance(
+ "PlatformAppleWatchSimulator", g_watchos_description,
+ ConstString(g_watchos_plugin_name),
+ {llvm::Triple::aarch64, llvm::Triple::x86_64, llvm::Triple::x86},
+ llvm::Triple::WatchOS, {llvm::Triple::WatchOS},
+ {
+#ifdef __APPLE__
+#if __arm64__
+ "arm64e-apple-watchos-simulator", "arm64-apple-watchos-simulator",
+#else
+ "x86_64-apple-watchos-simulator", "x86_64h-apple-watchos-simulator",
+ "i386-apple-watchos-simulator",
+#endif
+#endif
+ },
+ GetXcodeSDKDir("WatchSimulator.Internal.sdk", "WatchSimulator.sdk"),
+ XcodeSDK::Type::WatchSimulator,
+ CoreSimulatorSupport::DeviceType::ProductFamilyID::appleWatch, force,
+ arch);
+ }
+};
+
+
+// Static Functions
+void PlatformAppleSimulator::Initialize() {
+ PlatformDarwin::Initialize();
+ PlatformiOSSimulator::Initialize();
+ PlatformAppleTVSimulator::Initialize();
+ PlatformAppleWatchSimulator::Initialize();
+}
+
+void PlatformAppleSimulator::Terminate() {
+ PlatformAppleWatchSimulator::Terminate();
+ PlatformAppleTVSimulator::Terminate();
+ PlatformiOSSimulator::Terminate();
+ PlatformDarwin::Terminate();
+}
+
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.h b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.h
index 6182acaf229ac..c330bcb69b948 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.h
@@ -13,6 +13,7 @@
#include "Plugins/Platform/MacOSX/PlatformDarwin.h"
#include "Plugins/Platform/MacOSX/objcxx/PlatformiOSSimulatorCoreSimulatorSupport.h"
+#include "lldb/Utility/ConstString.h"
#include "lldb/Utility/FileSpec.h"
#include "llvm/ADT/Optional.h"
@@ -26,10 +27,29 @@ class PlatformAppleSimulator : public PlatformDarwin {
// Class Methods
PlatformAppleSimulator(
+ const char *class_name, const char *description,
+ lldb_private::ConstString plugin_name, llvm::Triple::OSType preferred_os,
+ llvm::SmallVector<llvm::StringRef, 4> supported_triples,
+ llvm::StringRef sdk, lldb_private::XcodeSDK::Type sdk_type,
CoreSimulatorSupport::DeviceType::ProductFamilyID kind);
+ static lldb::PlatformSP
+ CreateInstance(const char *class_name, const char *description,
+ lldb_private::ConstString plugin_name,
+ llvm::SmallVector<llvm::Triple::ArchType, 4> supported_arch,
+ llvm::Triple::OSType preferred_os,
+ llvm::SmallVector<llvm::Triple::OSType, 4> supported_os,
+ llvm::SmallVector<llvm::StringRef, 4> supported_triples,
+ llvm::StringRef sdk, lldb_private::XcodeSDK::Type sdk_type,
+ CoreSimulatorSupport::DeviceType::ProductFamilyID kind,
+ bool force, const lldb_private::ArchSpec *arch);
+
virtual ~PlatformAppleSimulator();
+ lldb_private::ConstString GetPluginName() override { return m_plugin_name; }
+ const char *GetDescription() override { return m_description; }
+ uint32_t GetPluginVersion() override { return 1; }
+
lldb_private::Status
LaunchProcess(lldb_private::ProcessLaunchInfo &launch_info) override;
@@ -47,7 +67,32 @@ class PlatformAppleSimulator : public PlatformDarwin {
bool GetSupportedArchitectureAtIndex(uint32_t idx,
lldb_private::ArchSpec &arch) override;
+ lldb_private::Status ResolveExecutable(
+ const lldb_private::ModuleSpec &module_spec, lldb::ModuleSP &module_sp,
+ const lldb_private::FileSpecList *module_search_paths_ptr) override;
+
+ lldb_private::Status
+ GetSharedModule(const lldb_private::ModuleSpec &module_spec,
+ lldb_private::Process *process, lldb::ModuleSP &module_sp,
+ const lldb_private::FileSpecList *module_search_paths_ptr,
+ lldb::ModuleSP *old_module_sp_ptr,
+ bool *did_create_ptr) override;
+
+ uint32_t
+ FindProcesses(const lldb_private::ProcessInstanceInfoMatch &match_info,
+ lldb_private::ProcessInstanceInfoList &process_infos) override;
+
+ void
+ AddClangModuleCompilationOptions(lldb_private::Target *target,
+ std::vector<std::string> &options) override {
+ return PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
+ target, options, m_sdk_type);
+ }
+
protected:
+ const char *m_class_name;
+ const char *m_description;
+ lldb_private::ConstString m_plugin_name;
std::mutex m_core_sim_path_mutex;
llvm::Optional<lldb_private::FileSpec> m_core_simulator_framework_path;
llvm::Optional<CoreSimulatorSupport::Device> m_device;
@@ -56,7 +101,9 @@ class PlatformAppleSimulator : public PlatformDarwin {
lldb_private::FileSpec GetCoreSimulatorPath();
llvm::Triple::OSType m_os_type = llvm::Triple::UnknownOS;
- llvm::ArrayRef<llvm::StringRef> m_supported_triples = {};
+ llvm::SmallVector<llvm::StringRef, 4> m_supported_triples = {};
+ llvm::StringRef m_sdk;
+ lldb_private::XcodeSDK::Type m_sdk_type;
void LoadCoreSimulator();
@@ -68,6 +115,11 @@ class PlatformAppleSimulator : public PlatformDarwin {
PlatformAppleSimulator(const PlatformAppleSimulator &) = delete;
const PlatformAppleSimulator &
operator=(const PlatformAppleSimulator &) = delete;
+ lldb_private::Status
+
+ GetSymbolFile(const lldb_private::FileSpec &platform_file,
+ const lldb_private::UUID *uuid_ptr,
+ lldb_private::FileSpec &local_file);
};
#endif // LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMAPPLESIMULATOR_H
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp
deleted file mode 100644
index 27f798b00ebf4..0000000000000
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp
+++ /dev/null
@@ -1,342 +0,0 @@
-//===-- PlatformAppleTVSimulator.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 "PlatformAppleTVSimulator.h"
-
-#include "lldb/Breakpoint/BreakpointLocation.h"
-#include "lldb/Core/Module.h"
-#include "lldb/Core/ModuleList.h"
-#include "lldb/Core/ModuleSpec.h"
-#include "lldb/Core/PluginManager.h"
-#include "lldb/Host/Host.h"
-#include "lldb/Host/HostInfo.h"
-#include "lldb/Target/Target.h"
-#include "lldb/Utility/ArchSpec.h"
-#include "lldb/Utility/FileSpec.h"
-#include "lldb/Utility/Log.h"
-#include "lldb/Utility/ProcessInfo.h"
-#include "lldb/Utility/Status.h"
-#include "lldb/Utility/StreamString.h"
-
-#include "llvm/Support/FileSystem.h"
-
-using namespace lldb;
-using namespace lldb_private;
-
-namespace lldb_private {
-class Process;
-}
-
-// Static Variables
-static uint32_t g_initialize_count = 0;
-
-// Static Functions
-void PlatformAppleTVSimulator::Initialize() {
- PlatformDarwin::Initialize();
-
- if (g_initialize_count++ == 0) {
- PluginManager::RegisterPlugin(
- PlatformAppleTVSimulator::GetPluginNameStatic(),
- PlatformAppleTVSimulator::GetDescriptionStatic(),
- PlatformAppleTVSimulator::CreateInstance);
- }
-}
-
-void PlatformAppleTVSimulator::Terminate() {
- if (g_initialize_count > 0) {
- if (--g_initialize_count == 0) {
- PluginManager::UnregisterPlugin(PlatformAppleTVSimulator::CreateInstance);
- }
- }
-
- PlatformDarwin::Terminate();
-}
-
-PlatformSP PlatformAppleTVSimulator::CreateInstance(bool force,
- const ArchSpec *arch) {
- Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_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, "PlatformAppleTVSimulator::%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::aarch64:
- case llvm::Triple::x86_64: {
- const llvm::Triple &triple = arch->GetTriple();
- switch (triple.getVendor()) {
- case llvm::Triple::Apple:
- create = true;
- break;
-
-#if defined(__APPLE__)
- // Only accept "unknown" for the vendor if the host is Apple and it
- // "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::TvOS:
- break;
-
-#if defined(__APPLE__)
- // Only accept "unknown" for the OS if the host is Apple and it
- // "unknown" wasn't specified (it was just returned because it was NOT
- // specified)
- case llvm::Triple::UnknownOS:
- create = !arch->TripleOSWasSpecified();
- break;
-#endif
- default:
- create = false;
- break;
- }
- }
- } break;
- default:
- break;
- }
- }
- if (create) {
- LLDB_LOGF(log, "PlatformAppleTVSimulator::%s() creating platform",
- __FUNCTION__);
-
- return PlatformSP(new PlatformAppleTVSimulator());
- }
-
- LLDB_LOGF(log, "PlatformAppleTVSimulator::%s() aborting creation of platform",
- __FUNCTION__);
-
- return PlatformSP();
-}
-
-lldb_private::ConstString PlatformAppleTVSimulator::GetPluginNameStatic() {
- static ConstString g_name("tvos-simulator");
- return g_name;
-}
-
-const char *PlatformAppleTVSimulator::GetDescriptionStatic() {
- return "Apple TV simulator platform plug-in.";
-}
-
-/// Default Constructor
-PlatformAppleTVSimulator::PlatformAppleTVSimulator()
- : PlatformAppleSimulator(
- CoreSimulatorSupport::DeviceType::ProductFamilyID::appleTV) {
-#ifdef __APPLE__
-#if __arm64__
- static const llvm::StringRef supported_triples[] = {
- "arm64e-apple-tvos-simulator",
- "arm64-apple-tvos-simulator",
- "x86_64h-apple-tvos-simulator",
- "x86_64-apple-tvos-simulator",
- };
-#else
- static const llvm::StringRef supported_triples[] = {
- "x86_64h-apple-tvos-simulator",
- "x86_64-apple-tvos-simulator",
- };
-#endif
- m_supported_triples = supported_triples;
-#endif
-}
-
-/// Destructor.
-///
-/// The destructor is virtual since this class is designed to be
-/// inherited from by the plug-in instance.
-PlatformAppleTVSimulator::~PlatformAppleTVSimulator() {}
-
-void PlatformAppleTVSimulator::GetStatus(Stream &strm) {
- Platform::GetStatus(strm);
- llvm::StringRef sdk_directory = GetSDKDirectoryAsCString();
- if (!sdk_directory.empty())
- strm.Printf(" SDK Path: \"%s\"\n", sdk_directory.str().c_str());
- else
- strm.PutCString(" SDK Path: error: unable to locate SDK\n");
-}
-
-Status PlatformAppleTVSimulator::ResolveExecutable(
- const ModuleSpec &module_spec, lldb::ModuleSP &exe_module_sp,
- const FileSpecList *module_search_paths_ptr) {
- Status error;
- // Nothing special to do here, just use the actual file and architecture
-
- ModuleSpec resolved_module_spec(module_spec);
-
- // If we have "ls" as the exe_file, resolve the executable loation based on
- // the current path variables
- // TODO: resolve bare executables in the Platform SDK
- // if (!resolved_exe_file.Exists())
- // resolved_exe_file.ResolveExecutableLocation ();
-
- // Resolve any executable within a bundle on MacOSX
- // TODO: verify that this handles shallow bundles, if not then implement one
- // ourselves
- Host::ResolveExecutableInBundle(resolved_module_spec.GetFileSpec());
-
- if (FileSystem::Instance().Exists(resolved_module_spec.GetFileSpec())) {
- if (resolved_module_spec.GetArchitecture().IsValid()) {
- error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
- NULL, NULL, NULL);
-
- if (exe_module_sp && exe_module_sp->GetObjectFile())
- return error;
- exe_module_sp.reset();
- }
- // No valid architecture was specified or the exact ARM slice wasn't found
- // so ask the platform for the architectures that we should be using (in
- // the correct order) and see if we can find a match that way
- StreamString arch_names;
- ArchSpec platform_arch;
- for (uint32_t idx = 0; GetSupportedArchitectureAtIndex(
- idx, resolved_module_spec.GetArchitecture());
- ++idx) {
- // Only match x86 with x86 and x86_64 with x86_64...
- if (!module_spec.GetArchitecture().IsValid() ||
- module_spec.GetArchitecture().GetCore() ==
- resolved_module_spec.GetArchitecture().GetCore()) {
- error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
- NULL, NULL, NULL);
- // Did we find an executable using one of the
- if (error.Success()) {
- if (exe_module_sp && exe_module_sp->GetObjectFile())
- break;
- else
- error.SetErrorToGenericError();
- }
-
- if (idx > 0)
- arch_names.PutCString(", ");
- arch_names.PutCString(platform_arch.GetArchitectureName());
- }
- }
-
- if (error.Fail() || !exe_module_sp) {
- if (FileSystem::Instance().Readable(resolved_module_spec.GetFileSpec())) {
- error.SetErrorStringWithFormat(
- "'%s' doesn't contain any '%s' platform architectures: %s",
- resolved_module_spec.GetFileSpec().GetPath().c_str(),
- GetPluginName().GetCString(), arch_names.GetString().str().c_str());
- } else {
- error.SetErrorStringWithFormat(
- "'%s' is not readable",
- resolved_module_spec.GetFileSpec().GetPath().c_str());
- }
- }
- } else {
- error.SetErrorStringWithFormat("'%s' does not exist",
- module_spec.GetFileSpec().GetPath().c_str());
- }
-
- return error;
-}
-
-llvm::StringRef PlatformAppleTVSimulator::GetSDKDirectoryAsCString() {
- llvm::StringRef sdk;
- sdk = HostInfo::GetXcodeSDKPath(XcodeSDK("AppleTVSimulator.Internal.sdk"));
- if (sdk.empty())
- sdk = HostInfo::GetXcodeSDKPath(XcodeSDK("AppleTVSimulator.sdk"));
- return sdk;
-}
-
-Status PlatformAppleTVSimulator::GetSymbolFile(const FileSpec &platform_file,
- const UUID *uuid_ptr,
- FileSpec &local_file) {
- Status error;
- char platform_file_path[PATH_MAX];
- if (platform_file.GetPath(platform_file_path, sizeof(platform_file_path))) {
- char resolved_path[PATH_MAX];
-
- llvm::StringRef sdk_dir = GetSDKDirectoryAsCString();
- if (!sdk_dir.empty()) {
- ::snprintf(resolved_path, sizeof(resolved_path), "%s/%s",
- sdk_dir.str().c_str(), platform_file_path);
-
- // First try in the SDK and see if the file is in there
- local_file.SetFile(resolved_path, FileSpec::Style::native);
- FileSystem::Instance().Resolve(local_file);
- if (FileSystem::Instance().Exists(local_file))
- return error;
-
- // Else fall back to the actual path itself
- local_file.SetFile(platform_file_path, FileSpec::Style::native);
- FileSystem::Instance().Resolve(local_file);
- if (FileSystem::Instance().Exists(local_file))
- return error;
- }
- error.SetErrorStringWithFormat(
- "unable to locate a platform file for '%s' in platform '%s'",
- platform_file_path, GetPluginName().GetCString());
- } else {
- error.SetErrorString("invalid platform file argument");
- }
- return error;
-}
-
-Status PlatformAppleTVSimulator::GetSharedModule(
- const ModuleSpec &module_spec, lldb_private::Process *process,
- ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr,
- ModuleSP *old_module_sp_ptr, bool *did_create_ptr) {
- // For AppleTV, the SDK files are all cached locally on the host system. So
- // first we ask for the file in the cached SDK, then we attempt to get a
- // shared module for the right architecture with the right UUID.
- Status error;
- ModuleSpec platform_module_spec(module_spec);
- const FileSpec &platform_file = module_spec.GetFileSpec();
- error = GetSymbolFile(platform_file, module_spec.GetUUIDPtr(),
- platform_module_spec.GetFileSpec());
- if (error.Success()) {
- error = ResolveExecutable(platform_module_spec, module_sp,
- module_search_paths_ptr);
- } else {
- const bool always_create = false;
- error = ModuleList::GetSharedModule(
- module_spec, module_sp, module_search_paths_ptr, old_module_sp_ptr,
- did_create_ptr, always_create);
- }
- if (module_sp)
- module_sp->SetPlatformFileSpec(platform_file);
-
- return error;
-}
-
-uint32_t PlatformAppleTVSimulator::FindProcesses(
- const ProcessInstanceInfoMatch &match_info,
- ProcessInstanceInfoList &process_infos) {
- ProcessInstanceInfoList all_osx_process_infos;
- // First we get all OSX processes
- const uint32_t n = Host::FindProcesses(match_info, all_osx_process_infos);
-
- // Now we filter them down to only the TvOS triples
- for (uint32_t i = 0; i < n; ++i) {
- const ProcessInstanceInfo &proc_info = all_osx_process_infos[i];
- if (proc_info.GetArchitecture().GetTriple().getOS() == llvm::Triple::TvOS) {
- process_infos.push_back(proc_info);
- }
- }
- return process_infos.size();
-}
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.h b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.h
deleted file mode 100644
index a94f94f9f57f7..0000000000000
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.h
+++ /dev/null
@@ -1,85 +0,0 @@
-//===-- PlatformAppleTVSimulator.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
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMAPPLETVSIMULATOR_H
-#define LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMAPPLETVSIMULATOR_H
-
-#include "PlatformAppleSimulator.h"
-
-class PlatformAppleTVSimulator : public PlatformAppleSimulator {
-public:
- // Class Functions
- static lldb::PlatformSP CreateInstance(bool force,
- const lldb_private::ArchSpec *arch);
-
- static void Initialize();
-
- static void Terminate();
-
- static lldb_private::ConstString GetPluginNameStatic();
-
- static const char *GetDescriptionStatic();
-
- // Class Methods
- PlatformAppleTVSimulator();
-
- virtual ~PlatformAppleTVSimulator();
-
- // lldb_private::PluginInterface functions
- lldb_private::ConstString GetPluginName() override {
- return GetPluginNameStatic();
- }
-
- uint32_t GetPluginVersion() override { return 1; }
-
- // lldb_private::Platform functions
- lldb_private::Status ResolveExecutable(
- const lldb_private::ModuleSpec &module_spec, lldb::ModuleSP &module_sp,
- const lldb_private::FileSpecList *module_search_paths_ptr) override;
-
- const char *GetDescription() override { return GetDescriptionStatic(); }
-
- void GetStatus(lldb_private::Stream &strm) override;
-
- virtual lldb_private::Status
- GetSymbolFile(const lldb_private::FileSpec &platform_file,
- const lldb_private::UUID *uuid_ptr,
- lldb_private::FileSpec &local_file);
-
- lldb_private::Status
- GetSharedModule(const lldb_private::ModuleSpec &module_spec,
- lldb_private::Process *process, lldb::ModuleSP &module_sp,
- const lldb_private::FileSpecList *module_search_paths_ptr,
- lldb::ModuleSP *old_module_sp_ptr,
- bool *did_create_ptr) override;
-
- uint32_t
- FindProcesses(const lldb_private::ProcessInstanceInfoMatch &match_info,
- lldb_private::ProcessInstanceInfoList &process_infos) override;
-
- void
- AddClangModuleCompilationOptions(lldb_private::Target *target,
- std::vector<std::string> &options) override {
- return PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
- target, options, lldb_private::XcodeSDK::Type::iPhoneSimulator);
- }
-
-protected:
- std::mutex m_sdk_dir_mutex;
- std::string m_sdk_directory;
- std::string m_build_update;
-
- llvm::StringRef GetSDKDirectoryAsCString();
-
-private:
- PlatformAppleTVSimulator(const PlatformAppleTVSimulator &) = delete;
- const PlatformAppleTVSimulator &
- operator=(const PlatformAppleTVSimulator &) = delete;
-};
-
-#endif // LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMAPPLETVSIMULATOR_H
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp
deleted file mode 100644
index 79f254c43a6ae..0000000000000
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp
+++ /dev/null
@@ -1,344 +0,0 @@
-//===-- PlatformAppleWatchSimulator.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 "PlatformAppleWatchSimulator.h"
-
-#include "lldb/Breakpoint/BreakpointLocation.h"
-#include "lldb/Core/Module.h"
-#include "lldb/Core/ModuleList.h"
-#include "lldb/Core/ModuleSpec.h"
-#include "lldb/Core/PluginManager.h"
-#include "lldb/Host/Host.h"
-#include "lldb/Host/HostInfo.h"
-#include "lldb/Target/Process.h"
-#include "lldb/Utility/ArchSpec.h"
-#include "lldb/Utility/FileSpec.h"
-#include "lldb/Utility/Log.h"
-#include "lldb/Utility/ProcessInfo.h"
-#include "lldb/Utility/Status.h"
-#include "lldb/Utility/StreamString.h"
-
-using namespace lldb;
-using namespace lldb_private;
-
-namespace lldb_private {
-class Process;
-}
-
-// Static Variables
-static uint32_t g_initialize_count = 0;
-
-// Static Functions
-void PlatformAppleWatchSimulator::Initialize() {
- PlatformDarwin::Initialize();
-
- if (g_initialize_count++ == 0) {
- PluginManager::RegisterPlugin(
- PlatformAppleWatchSimulator::GetPluginNameStatic(),
- PlatformAppleWatchSimulator::GetDescriptionStatic(),
- PlatformAppleWatchSimulator::CreateInstance);
- }
-}
-
-void PlatformAppleWatchSimulator::Terminate() {
- if (g_initialize_count > 0) {
- if (--g_initialize_count == 0) {
- PluginManager::UnregisterPlugin(
- PlatformAppleWatchSimulator::CreateInstance);
- }
- }
-
- PlatformDarwin::Terminate();
-}
-
-PlatformSP PlatformAppleWatchSimulator::CreateInstance(bool force,
- const ArchSpec *arch) {
- Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_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, "PlatformAppleWatchSimulator::%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::aarch64:
- case llvm::Triple::x86_64:
- case llvm::Triple::x86: {
- const llvm::Triple &triple = arch->GetTriple();
- switch (triple.getVendor()) {
- case llvm::Triple::Apple:
- create = true;
- break;
-
-#if defined(__APPLE__)
- // Only accept "unknown" for the vendor if the host is Apple and it
- // "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::WatchOS:
- break;
-
-#if defined(__APPLE__)
- // Only accept "unknown" for the OS if the host is Apple and it
- // "unknown" wasn't specified (it was just returned because it was NOT
- // specified)
- case llvm::Triple::UnknownOS:
- create = !arch->TripleOSWasSpecified();
- break;
-#endif
- default:
- create = false;
- break;
- }
- }
- } break;
- default:
- break;
- }
- }
- if (create) {
- LLDB_LOGF(log, "PlatformAppleWatchSimulator::%s() creating platform",
- __FUNCTION__);
-
- return PlatformSP(new PlatformAppleWatchSimulator());
- }
-
- LLDB_LOGF(log,
- "PlatformAppleWatchSimulator::%s() aborting creation of platform",
- __FUNCTION__);
-
- return PlatformSP();
-}
-
-lldb_private::ConstString PlatformAppleWatchSimulator::GetPluginNameStatic() {
- static ConstString g_name("watchos-simulator");
- return g_name;
-}
-
-const char *PlatformAppleWatchSimulator::GetDescriptionStatic() {
- return "Apple Watch simulator platform plug-in.";
-}
-
-/// Default Constructor
-PlatformAppleWatchSimulator::PlatformAppleWatchSimulator()
- : PlatformAppleSimulator(
- CoreSimulatorSupport::DeviceType::ProductFamilyID::appleWatch) {
-#ifdef __APPLE__
-#if __arm64__
- static const llvm::StringRef supported_triples[] = {
- "arm64e-apple-watchos-simulator",
- "arm64-apple-watchos-simulator",
- };
-#else
- static const llvm::StringRef supported_triples[] = {
- "x86_64-apple-watchos-simulator",
- "x86_64h-apple-watchos-simulator",
- "i386-apple-watchos-simulator",
- };
-#endif
- m_supported_triples = supported_triples;
-#endif
-}
-
-/// Destructor.
-///
-/// The destructor is virtual since this class is designed to be
-/// inherited from by the plug-in instance.
-PlatformAppleWatchSimulator::~PlatformAppleWatchSimulator() {}
-
-void PlatformAppleWatchSimulator::GetStatus(Stream &strm) {
- Platform::GetStatus(strm);
- llvm::StringRef sdk_directory = GetSDKDirectoryAsCString();
- if (!sdk_directory.empty())
- strm.Printf(" SDK Path: \"%s\"\n", sdk_directory.str().c_str());
- else
- strm.PutCString(" SDK Path: error: unable to locate SDK\n");
-}
-
-Status PlatformAppleWatchSimulator::ResolveExecutable(
- const ModuleSpec &module_spec, lldb::ModuleSP &exe_module_sp,
- const FileSpecList *module_search_paths_ptr) {
- Status error;
- // Nothing special to do here, just use the actual file and architecture
-
- ModuleSpec resolved_module_spec(module_spec);
-
- // If we have "ls" as the exe_file, resolve the executable loation based on
- // the current path variables
- // TODO: resolve bare executables in the Platform SDK
- // if (!resolved_exe_file.Exists())
- // resolved_exe_file.ResolveExecutableLocation ();
-
- // Resolve any executable within a bundle on MacOSX
- // TODO: verify that this handles shallow bundles, if not then implement one
- // ourselves
- Host::ResolveExecutableInBundle(resolved_module_spec.GetFileSpec());
-
- if (FileSystem::Instance().Exists(resolved_module_spec.GetFileSpec())) {
- if (resolved_module_spec.GetArchitecture().IsValid()) {
- error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
- NULL, NULL, NULL);
-
- if (exe_module_sp && exe_module_sp->GetObjectFile())
- return error;
- exe_module_sp.reset();
- }
- // No valid architecture was specified or the exact ARM slice wasn't found
- // so ask the platform for the architectures that we should be using (in
- // the correct order) and see if we can find a match that way
- StreamString arch_names;
- ArchSpec platform_arch;
- for (uint32_t idx = 0; GetSupportedArchitectureAtIndex(
- idx, resolved_module_spec.GetArchitecture());
- ++idx) {
- // Only match x86 with x86 and x86_64 with x86_64...
- if (!module_spec.GetArchitecture().IsValid() ||
- module_spec.GetArchitecture().GetCore() ==
- resolved_module_spec.GetArchitecture().GetCore()) {
- error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
- NULL, NULL, NULL);
- // Did we find an executable using one of the
- if (error.Success()) {
- if (exe_module_sp && exe_module_sp->GetObjectFile())
- break;
- else
- error.SetErrorToGenericError();
- }
-
- if (idx > 0)
- arch_names.PutCString(", ");
- arch_names.PutCString(platform_arch.GetArchitectureName());
- }
- }
-
- if (error.Fail() || !exe_module_sp) {
- if (FileSystem::Instance().Readable(resolved_module_spec.GetFileSpec())) {
- error.SetErrorStringWithFormat(
- "'%s' doesn't contain any '%s' platform architectures: %s",
- resolved_module_spec.GetFileSpec().GetPath().c_str(),
- GetPluginName().GetCString(), arch_names.GetString().str().c_str());
- } else {
- error.SetErrorStringWithFormat(
- "'%s' is not readable",
- resolved_module_spec.GetFileSpec().GetPath().c_str());
- }
- }
- } else {
- error.SetErrorStringWithFormat("'%s' does not exist",
- module_spec.GetFileSpec().GetPath().c_str());
- }
-
- return error;
-}
-
-llvm::StringRef PlatformAppleWatchSimulator::GetSDKDirectoryAsCString() {
- llvm::StringRef sdk;
- sdk = HostInfo::GetXcodeSDKPath(XcodeSDK("WatchSimulator.Internal.sdk"));
- if (sdk.empty())
- sdk = HostInfo::GetXcodeSDKPath(XcodeSDK("WatchSimulator.sdk"));
- return sdk;
-}
-
-Status PlatformAppleWatchSimulator::GetSymbolFile(const FileSpec &platform_file,
- const UUID *uuid_ptr,
- FileSpec &local_file) {
- Status error;
- char platform_file_path[PATH_MAX];
- if (platform_file.GetPath(platform_file_path, sizeof(platform_file_path))) {
- char resolved_path[PATH_MAX];
-
- llvm::StringRef sdk_dir = GetSDKDirectoryAsCString();
- if (!sdk_dir.empty()) {
- ::snprintf(resolved_path, sizeof(resolved_path), "%s/%s",
- sdk_dir.str().c_str(), platform_file_path);
-
- // First try in the SDK and see if the file is in there
- local_file.SetFile(resolved_path, FileSpec::Style::native);
- FileSystem::Instance().Resolve(local_file);
- if (FileSystem::Instance().Exists(local_file))
- return error;
-
- // Else fall back to the actual path itself
- local_file.SetFile(platform_file_path, FileSpec::Style::native);
- FileSystem::Instance().Resolve(local_file);
- if (FileSystem::Instance().Exists(local_file))
- return error;
- }
- error.SetErrorStringWithFormat(
- "unable to locate a platform file for '%s' in platform '%s'",
- platform_file_path, GetPluginName().GetCString());
- } else {
- error.SetErrorString("invalid platform file argument");
- }
- return error;
-}
-
-Status PlatformAppleWatchSimulator::GetSharedModule(
- const ModuleSpec &module_spec, lldb_private::Process *process,
- ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr,
- ModuleSP *old_module_sp_ptr, bool *did_create_ptr) {
- // For AppleWatch, the SDK files are all cached locally on the host system.
- // So first we ask for the file in the cached SDK, then we attempt to get a
- // shared module for the right architecture with the right UUID.
- Status error;
- ModuleSpec platform_module_spec(module_spec);
- const FileSpec &platform_file = module_spec.GetFileSpec();
- error = GetSymbolFile(platform_file, module_spec.GetUUIDPtr(),
- platform_module_spec.GetFileSpec());
- if (error.Success()) {
- error = ResolveExecutable(platform_module_spec, module_sp,
- module_search_paths_ptr);
- } else {
- const bool always_create = false;
- error = ModuleList::GetSharedModule(
- module_spec, module_sp, module_search_paths_ptr, old_module_sp_ptr,
- did_create_ptr, always_create);
- }
- if (module_sp)
- module_sp->SetPlatformFileSpec(platform_file);
-
- return error;
-}
-
-uint32_t PlatformAppleWatchSimulator::FindProcesses(
- const ProcessInstanceInfoMatch &match_info,
- ProcessInstanceInfoList &process_infos) {
- ProcessInstanceInfoList all_osx_process_infos;
- // First we get all OSX processes
- const uint32_t n = Host::FindProcesses(match_info, all_osx_process_infos);
-
- // Now we filter them down to only the WatchOS triples
- for (uint32_t i = 0; i < n; ++i) {
- const ProcessInstanceInfo &proc_info = all_osx_process_infos[i];
- if (proc_info.GetArchitecture().GetTriple().getOS() ==
- llvm::Triple::WatchOS) {
- process_infos.push_back(proc_info);
- }
- }
- return process_infos.size();
-}
-
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.h b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.h
deleted file mode 100644
index 78b936691b0c7..0000000000000
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.h
+++ /dev/null
@@ -1,85 +0,0 @@
-//===-- PlatformAppleWatchSimulator.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
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMAPPLEWATCHSIMULATOR_H
-#define LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMAPPLEWATCHSIMULATOR_H
-
-#include "PlatformAppleSimulator.h"
-
-class PlatformAppleWatchSimulator : public PlatformAppleSimulator {
-public:
- // Class Functions
- static lldb::PlatformSP CreateInstance(bool force,
- const lldb_private::ArchSpec *arch);
-
- static void Initialize();
-
- static void Terminate();
-
- static lldb_private::ConstString GetPluginNameStatic();
-
- static const char *GetDescriptionStatic();
-
- // Class Methods
- PlatformAppleWatchSimulator();
-
- virtual ~PlatformAppleWatchSimulator();
-
- // lldb_private::PluginInterface functions
- lldb_private::ConstString GetPluginName() override {
- return GetPluginNameStatic();
- }
-
- uint32_t GetPluginVersion() override { return 1; }
-
- // lldb_private::Platform functions
- lldb_private::Status ResolveExecutable(
- const lldb_private::ModuleSpec &module_spec, lldb::ModuleSP &module_sp,
- const lldb_private::FileSpecList *module_search_paths_ptr) override;
-
- const char *GetDescription() override { return GetDescriptionStatic(); }
-
- void GetStatus(lldb_private::Stream &strm) override;
-
- virtual lldb_private::Status
- GetSymbolFile(const lldb_private::FileSpec &platform_file,
- const lldb_private::UUID *uuid_ptr,
- lldb_private::FileSpec &local_file);
-
- lldb_private::Status
- GetSharedModule(const lldb_private::ModuleSpec &module_spec,
- lldb_private::Process *process, lldb::ModuleSP &module_sp,
- const lldb_private::FileSpecList *module_search_paths_ptr,
- lldb::ModuleSP *old_module_sp_ptr,
- bool *did_create_ptr) override;
-
- uint32_t
- FindProcesses(const lldb_private::ProcessInstanceInfoMatch &match_info,
- lldb_private::ProcessInstanceInfoList &process_infos) override;
-
- void
- AddClangModuleCompilationOptions(lldb_private::Target *target,
- std::vector<std::string> &options) override {
- return PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
- target, options, lldb_private::XcodeSDK::Type::iPhoneSimulator);
- }
-
-protected:
- std::mutex m_sdk_dir_mutex;
- std::string m_sdk_directory;
- std::string m_build_update;
-
- llvm::StringRef GetSDKDirectoryAsCString();
-
-private:
- PlatformAppleWatchSimulator(const PlatformAppleWatchSimulator &) = delete;
- const PlatformAppleWatchSimulator &
- operator=(const PlatformAppleWatchSimulator &) = delete;
-};
-
-#endif // LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMAPPLEWATCHSIMULATOR_H
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
index 93860c2579798..a1128328ea5e2 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
@@ -9,13 +9,11 @@
#include "PlatformMacOSX.h"
#include "PlatformRemoteiOS.h"
#if defined(__APPLE__)
-#include "PlatformAppleTVSimulator.h"
-#include "PlatformAppleWatchSimulator.h"
+#include "PlatformAppleSimulator.h"
#include "PlatformDarwinKernel.h"
#include "PlatformRemoteAppleBridge.h"
#include "PlatformRemoteAppleTV.h"
#include "PlatformRemoteAppleWatch.h"
-#include "PlatformiOSSimulator.h"
#endif
#include "lldb/Breakpoint/BreakpointLocation.h"
#include "lldb/Core/Module.h"
@@ -47,10 +45,8 @@ void PlatformMacOSX::Initialize() {
PlatformDarwin::Initialize();
PlatformRemoteiOS::Initialize();
#if defined(__APPLE__)
- PlatformiOSSimulator::Initialize();
+ PlatformAppleSimulator::Initialize();
PlatformDarwinKernel::Initialize();
- PlatformAppleTVSimulator::Initialize();
- PlatformAppleWatchSimulator::Initialize();
PlatformRemoteAppleTV::Initialize();
PlatformRemoteAppleWatch::Initialize();
PlatformRemoteAppleBridge::Initialize();
@@ -79,10 +75,8 @@ void PlatformMacOSX::Terminate() {
PlatformRemoteAppleBridge::Terminate();
PlatformRemoteAppleWatch::Terminate();
PlatformRemoteAppleTV::Terminate();
- PlatformAppleWatchSimulator::Terminate();
- PlatformAppleTVSimulator::Terminate();
PlatformDarwinKernel::Terminate();
- PlatformiOSSimulator::Terminate();
+ PlatformAppleSimulator::Terminate();
#endif
PlatformRemoteiOS::Terminate();
PlatformDarwin::Terminate();
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp
deleted file mode 100644
index b73c06fcdc8b4..0000000000000
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp
+++ /dev/null
@@ -1,349 +0,0 @@
-//===-- PlatformiOSSimulator.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 "PlatformiOSSimulator.h"
-
-#include "lldb/Breakpoint/BreakpointLocation.h"
-#include "lldb/Core/Module.h"
-#include "lldb/Core/ModuleList.h"
-#include "lldb/Core/ModuleSpec.h"
-#include "lldb/Core/PluginManager.h"
-#include "lldb/Host/Host.h"
-#include "lldb/Host/HostInfo.h"
-#include "lldb/Target/Target.h"
-#include "lldb/Utility/ArchSpec.h"
-#include "lldb/Utility/FileSpec.h"
-#include "lldb/Utility/Log.h"
-#include "lldb/Utility/ProcessInfo.h"
-#include "lldb/Utility/Status.h"
-#include "lldb/Utility/StreamString.h"
-
-#include "llvm/Support/FileSystem.h"
-
-using namespace lldb;
-using namespace lldb_private;
-
-namespace lldb_private {
-class Process;
-}
-
-// Static Variables
-static uint32_t g_initialize_count = 0;
-
-// Static Functions
-void PlatformiOSSimulator::Initialize() {
- PlatformAppleSimulator::Initialize();
-
- if (g_initialize_count++ == 0) {
- PluginManager::RegisterPlugin(PlatformiOSSimulator::GetPluginNameStatic(),
- PlatformiOSSimulator::GetDescriptionStatic(),
- PlatformiOSSimulator::CreateInstance);
- }
-}
-
-void PlatformiOSSimulator::Terminate() {
- if (g_initialize_count > 0) {
- if (--g_initialize_count == 0) {
- PluginManager::UnregisterPlugin(PlatformiOSSimulator::CreateInstance);
- }
- }
-
- PlatformAppleSimulator::Terminate();
-}
-
-PlatformSP PlatformiOSSimulator::CreateInstance(bool force,
- const ArchSpec *arch) {
- Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_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, "PlatformiOSSimulator::%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::aarch64:
- case llvm::Triple::x86_64:
- case llvm::Triple::x86: {
- const llvm::Triple &triple = arch->GetTriple();
- switch (triple.getVendor()) {
- case llvm::Triple::Apple:
- create = true;
- break;
-
-#if defined(__APPLE__)
- // Only accept "unknown" for the vendor if the host is Apple and it
- // "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::Darwin: // Deprecated, but still support Darwin for
- // historical reasons
- case llvm::Triple::MacOSX:
- case llvm::Triple::IOS: // IOS is not used for simulator triples, but
- // accept it just in case
- break;
-
-#if defined(__APPLE__)
- // Only accept "unknown" for the OS if the host is Apple and it
- // "unknown" wasn't specified (it was just returned because it was NOT
- // specified)
- case llvm::Triple::UnknownOS:
- create = !arch->TripleOSWasSpecified();
- break;
-#endif
- default:
- create = false;
- break;
- }
- }
- } break;
- default:
- break;
- }
- }
- if (create) {
- LLDB_LOGF(log, "PlatformiOSSimulator::%s() creating platform",
- __FUNCTION__);
-
- return PlatformSP(new PlatformiOSSimulator());
- }
-
- LLDB_LOGF(log, "PlatformiOSSimulator::%s() aborting creation of platform",
- __FUNCTION__);
-
- return PlatformSP();
-}
-
-lldb_private::ConstString PlatformiOSSimulator::GetPluginNameStatic() {
- static ConstString g_name("ios-simulator");
- return g_name;
-}
-
-const char *PlatformiOSSimulator::GetDescriptionStatic() {
- return "iOS simulator platform plug-in.";
-}
-
-/// Default Constructor
-PlatformiOSSimulator::PlatformiOSSimulator()
- : PlatformAppleSimulator(
- CoreSimulatorSupport::DeviceType::ProductFamilyID::iPhone) {
-#ifdef __APPLE__
-#if __arm64__
- static const llvm::StringRef supported_triples[] = {
- "arm64e-apple-ios-simulator",
- "arm64-apple-ios-simulator",
- "x86_64-apple-ios-simulator",
- "x86_64h-apple-ios-simulator",
- };
-#else
- static const llvm::StringRef supported_triples[] = {
- "x86_64h-apple-ios-simulator",
- "x86_64-apple-ios-simulator",
- "i386-apple-ios-simulator",
- };
-#endif
- m_supported_triples = supported_triples;
-#endif
-}
-
-/// Destructor.
-///
-/// The destructor is virtual since this class is designed to be
-/// inherited from by the plug-in instance.
-PlatformiOSSimulator::~PlatformiOSSimulator() {}
-
-void PlatformiOSSimulator::GetStatus(Stream &strm) {
- Platform::GetStatus(strm);
- llvm::StringRef sdk_directory = GetSDKDirectoryAsCString();
- if (!sdk_directory.empty())
- strm.Printf(" SDK Path: \"%s\"\n", sdk_directory.str().c_str());
- else
- strm.PutCString(" SDK Path: error: unable to locate SDK\n");
- PlatformAppleSimulator::GetStatus(strm);
-}
-
-Status PlatformiOSSimulator::ResolveExecutable(
- const ModuleSpec &module_spec, lldb::ModuleSP &exe_module_sp,
- const FileSpecList *module_search_paths_ptr) {
- Status error;
- // Nothing special to do here, just use the actual file and architecture
-
- ModuleSpec resolved_module_spec(module_spec);
-
- // If we have "ls" as the exe_file, resolve the executable loation based on
- // the current path variables
- // TODO: resolve bare executables in the Platform SDK
- // if (!resolved_exe_file.Exists())
- // resolved_exe_file.ResolveExecutableLocation ();
-
- // Resolve any executable within a bundle on MacOSX
- // TODO: verify that this handles shallow bundles, if not then implement one
- // ourselves
- Host::ResolveExecutableInBundle(resolved_module_spec.GetFileSpec());
-
- if (FileSystem::Instance().Exists(resolved_module_spec.GetFileSpec())) {
- if (resolved_module_spec.GetArchitecture().IsValid()) {
- error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
- NULL, NULL, NULL);
-
- if (exe_module_sp && exe_module_sp->GetObjectFile())
- return error;
- exe_module_sp.reset();
- }
- // No valid architecture was specified or the exact ARM slice wasn't found
- // so ask the platform for the architectures that we should be using (in
- // the correct order) and see if we can find a match that way
- StreamString arch_names;
- ArchSpec platform_arch;
- for (uint32_t idx = 0; GetSupportedArchitectureAtIndex(
- idx, resolved_module_spec.GetArchitecture());
- ++idx) {
- // Only match x86 with x86 and x86_64 with x86_64...
- if (!module_spec.GetArchitecture().IsValid() ||
- module_spec.GetArchitecture().GetCore() ==
- resolved_module_spec.GetArchitecture().GetCore()) {
- error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
- NULL, NULL, NULL);
- // Did we find an executable using one of the
- if (error.Success()) {
- if (exe_module_sp && exe_module_sp->GetObjectFile())
- break;
- else
- error.SetErrorToGenericError();
- }
-
- if (idx > 0)
- arch_names.PutCString(", ");
- arch_names.PutCString(platform_arch.GetArchitectureName());
- }
- }
-
- if (error.Fail() || !exe_module_sp) {
- if (FileSystem::Instance().Readable(resolved_module_spec.GetFileSpec())) {
- error.SetErrorStringWithFormat(
- "'%s' doesn't contain any '%s' platform architectures: %s",
- resolved_module_spec.GetFileSpec().GetPath().c_str(),
- GetPluginName().GetCString(), arch_names.GetString().str().c_str());
- } else {
- error.SetErrorStringWithFormat(
- "'%s' is not readable",
- resolved_module_spec.GetFileSpec().GetPath().c_str());
- }
- }
- } else {
- error.SetErrorStringWithFormat("'%s' does not exist",
- module_spec.GetFileSpec().GetPath().c_str());
- }
-
- return error;
-}
-
-llvm::StringRef PlatformiOSSimulator::GetSDKDirectoryAsCString() {
- llvm::StringRef sdk;
- sdk = HostInfo::GetXcodeSDKPath(XcodeSDK("iPhoneSimulator.Internal.sdk"));
- if (sdk.empty())
- sdk = HostInfo::GetXcodeSDKPath(XcodeSDK("iPhoneSimulator.sdk"));
- return sdk;
-}
-
-Status PlatformiOSSimulator::GetSymbolFile(const FileSpec &platform_file,
- const UUID *uuid_ptr,
- FileSpec &local_file) {
- Status error;
- char platform_file_path[PATH_MAX];
- if (platform_file.GetPath(platform_file_path, sizeof(platform_file_path))) {
- char resolved_path[PATH_MAX];
-
- llvm::StringRef sdk_dir = GetSDKDirectoryAsCString();
- if (!sdk_dir.empty()) {
- ::snprintf(resolved_path, sizeof(resolved_path), "%s/%s",
- sdk_dir.str().c_str(), platform_file_path);
-
- // First try in the SDK and see if the file is in there
- local_file.SetFile(resolved_path, FileSpec::Style::native);
- FileSystem::Instance().Resolve(local_file);
- if (FileSystem::Instance().Exists(local_file))
- return error;
-
- // Else fall back to the actual path itself
- local_file.SetFile(platform_file_path, FileSpec::Style::native);
- FileSystem::Instance().Resolve(local_file);
- if (FileSystem::Instance().Exists(local_file))
- return error;
- }
- error.SetErrorStringWithFormat(
- "unable to locate a platform file for '%s' in platform '%s'",
- platform_file_path, GetPluginName().GetCString());
- } else {
- error.SetErrorString("invalid platform file argument");
- }
- return error;
-}
-
-Status PlatformiOSSimulator::GetSharedModule(
- const ModuleSpec &module_spec, Process *process, ModuleSP &module_sp,
- const FileSpecList *module_search_paths_ptr, ModuleSP *old_module_sp_ptr,
- bool *did_create_ptr) {
- // For iOS, the SDK files are all cached locally on the host system. So first
- // we ask for the file in the cached SDK, then we attempt to get a shared
- // module for the right architecture with the right UUID.
- Status error;
- ModuleSpec platform_module_spec(module_spec);
- const FileSpec &platform_file = module_spec.GetFileSpec();
- error = GetSymbolFile(platform_file, module_spec.GetUUIDPtr(),
- platform_module_spec.GetFileSpec());
- if (error.Success()) {
- error = ResolveExecutable(platform_module_spec, module_sp,
- module_search_paths_ptr);
- } else {
- const bool always_create = false;
- error = ModuleList::GetSharedModule(
- module_spec, module_sp, module_search_paths_ptr, old_module_sp_ptr,
- did_create_ptr, always_create);
- }
- if (module_sp)
- module_sp->SetPlatformFileSpec(platform_file);
-
- return error;
-}
-
-uint32_t
-PlatformiOSSimulator::FindProcesses(const ProcessInstanceInfoMatch &match_info,
- ProcessInstanceInfoList &process_infos) {
- ProcessInstanceInfoList all_osx_process_infos;
- // First we get all OSX processes
- const uint32_t n = Host::FindProcesses(match_info, all_osx_process_infos);
-
- // Now we filter them down to only the iOS triples
- for (uint32_t i = 0; i < n; ++i) {
- const ProcessInstanceInfo &proc_info = all_osx_process_infos[i];
- if (proc_info.GetArchitecture().GetTriple().getOS() == llvm::Triple::IOS) {
- process_infos.push_back(proc_info);
- }
- }
- return process_infos.size();
-}
-
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.h b/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.h
deleted file mode 100644
index 982f8e2de5e7a..0000000000000
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.h
+++ /dev/null
@@ -1,86 +0,0 @@
-//===-- PlatformiOSSimulator.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
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMIOSSIMULATOR_H
-#define LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMIOSSIMULATOR_H
-
-#include <mutex>
-#include <string>
-
-#include "PlatformAppleSimulator.h"
-
-class PlatformiOSSimulator : public PlatformAppleSimulator {
-public:
- PlatformiOSSimulator();
-
- ~PlatformiOSSimulator() override;
-
- // Class Functions
- static lldb::PlatformSP CreateInstance(bool force,
- const lldb_private::ArchSpec *arch);
-
- static void Initialize();
-
- static void Terminate();
-
- static lldb_private::ConstString GetPluginNameStatic();
-
- static const char *GetDescriptionStatic();
-
- // lldb_private::PluginInterface functions
- lldb_private::ConstString GetPluginName() override {
- return GetPluginNameStatic();
- }
-
- uint32_t GetPluginVersion() override { return 1; }
-
- // lldb_private::Platform functions
- lldb_private::Status ResolveExecutable(
- const lldb_private::ModuleSpec &module_spec, lldb::ModuleSP &module_sp,
- const lldb_private::FileSpecList *module_search_paths_ptr) override;
-
- const char *GetDescription() override { return GetDescriptionStatic(); }
-
- void GetStatus(lldb_private::Stream &strm) override;
-
- virtual lldb_private::Status
- GetSymbolFile(const lldb_private::FileSpec &platform_file,
- const lldb_private::UUID *uuid_ptr,
- lldb_private::FileSpec &local_file);
-
- lldb_private::Status
- GetSharedModule(const lldb_private::ModuleSpec &module_spec,
- lldb_private::Process *process, lldb::ModuleSP &module_sp,
- const lldb_private::FileSpecList *module_search_paths_ptr,
- lldb::ModuleSP *old_module_sp_ptr,
- bool *did_create_ptr) override;
-
- uint32_t
- FindProcesses(const lldb_private::ProcessInstanceInfoMatch &match_info,
- lldb_private::ProcessInstanceInfoList &process_infos) override;
-
- void
- AddClangModuleCompilationOptions(lldb_private::Target *target,
- std::vector<std::string> &options) override {
- return PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
- target, options, lldb_private::XcodeSDK::Type::iPhoneSimulator);
- }
-
-protected:
- std::mutex m_sdk_dir_mutex;
- std::string m_sdk_directory;
- std::string m_build_update;
-
- llvm::StringRef GetSDKDirectoryAsCString();
-
-private:
- PlatformiOSSimulator(const PlatformiOSSimulator &) = delete;
- const PlatformiOSSimulator &operator=(const PlatformiOSSimulator &) = delete;
-};
-
-#endif // LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMIOSSIMULATOR_H
diff --git a/lldb/unittests/Platform/PlatformAppleSimulatorTest.cpp b/lldb/unittests/Platform/PlatformAppleSimulatorTest.cpp
index 0b90380b797c5..42549e89cc34a 100644
--- a/lldb/unittests/Platform/PlatformAppleSimulatorTest.cpp
+++ b/lldb/unittests/Platform/PlatformAppleSimulatorTest.cpp
@@ -8,9 +8,7 @@
#include "gtest/gtest.h"
-#include "Plugins/Platform/MacOSX/PlatformAppleTVSimulator.h"
-#include "Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.h"
-#include "Plugins/Platform/MacOSX/PlatformiOSSimulator.h"
+#include "Plugins/Platform/MacOSX/PlatformAppleSimulator.h"
#include "TestingSupport/SubsystemRAII.h"
#include "lldb/Host/FileSystem.h"
#include "lldb/Host/HostInfo.h"
@@ -20,8 +18,7 @@ using namespace lldb;
using namespace lldb_private;
class PlatformAppleSimulatorTest : public ::testing::Test {
- SubsystemRAII<FileSystem, HostInfo, PlatformAppleTVSimulator,
- PlatformiOSSimulator, PlatformAppleWatchSimulator>
+ SubsystemRAII<FileSystem, HostInfo, PlatformAppleSimulator>
subsystems;
};
More information about the lldb-commits
mailing list