[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