diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.h b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.h --- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.h @@ -65,8 +65,7 @@ lldb_private::Target &target, lldb_private::Status &error) override; - bool GetSupportedArchitectureAtIndex(uint32_t idx, - lldb_private::ArchSpec &arch) override; + std::vector GetSupportedArchitectures() override; lldb_private::Status ResolveExecutable( const lldb_private::ModuleSpec &module_spec, lldb::ModuleSP &module_sp, diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp --- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp @@ -265,12 +265,11 @@ } #endif -bool PlatformAppleSimulator::GetSupportedArchitectureAtIndex(uint32_t idx, - ArchSpec &arch) { - if (idx >= m_supported_triples.size()) - return false; - arch = ArchSpec(m_supported_triples[idx]); - return true; +std::vector PlatformAppleSimulator::GetSupportedArchitectures() { + std::vector result(m_supported_triples.size()); + llvm::transform(m_supported_triples, result.begin(), + [](llvm::StringRef triple) { return ArchSpec(triple); }); + return result; } PlatformSP PlatformAppleSimulator::CreateInstance( @@ -380,10 +379,11 @@ // 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; + llvm::ListSeparator LS; ArchSpec platform_arch; - for (uint32_t idx = 0; GetSupportedArchitectureAtIndex( - idx, resolved_module_spec.GetArchitecture()); - ++idx) { + for (const ArchSpec &arch : GetSupportedArchitectures()) { + resolved_module_spec.GetArchitecture() = arch; + // Only match x86 with x86 and x86_64 with x86_64... if (!module_spec.GetArchitecture().IsValid() || module_spec.GetArchitecture().GetCore() == @@ -398,9 +398,7 @@ error.SetErrorToGenericError(); } - if (idx > 0) - arch_names.PutCString(", "); - arch_names.PutCString(platform_arch.GetArchitectureName()); + arch_names << LS << platform_arch.GetArchitectureName(); } } diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h @@ -60,11 +60,9 @@ bool ModuleIsExcludedForUnconstrainedSearches( lldb_private::Target &target, const lldb::ModuleSP &module_sp) override; - bool ARMGetSupportedArchitectureAtIndex(uint32_t idx, - lldb_private::ArchSpec &arch); + void ARMGetSupportedArchitectures(std::vector &archs); - bool x86GetSupportedArchitectureAtIndex(uint32_t idx, - lldb_private::ArchSpec &arch); + void x86GetSupportedArchitectures(std::vector &archs); uint32_t GetResumeCountForLaunchInfo( lldb_private::ProcessLaunchInfo &launch_info) override; @@ -102,8 +100,6 @@ /// located in. static lldb_private::FileSpec GetCurrentCommandLineToolsDirectory(); - std::vector GetSupportedArchitectures() override; - protected: static const char *GetCompatibleArch(lldb_private::ArchSpec::Core core, size_t idx); @@ -174,10 +170,6 @@ static std::string FindComponentInPath(llvm::StringRef path, llvm::StringRef component); - virtual bool - GetSupportedArchitectureAtIndex(uint32_t idx, - lldb_private::ArchSpec &arch) = 0; - std::string m_developer_directory; llvm::StringMap m_sdk_path; std::mutex m_sdk_path_mutex; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp @@ -514,45 +514,19 @@ return obj_type == ObjectFile::eTypeDynamicLinker; } -bool PlatformDarwin::x86GetSupportedArchitectureAtIndex(uint32_t idx, - ArchSpec &arch) { +void PlatformDarwin::x86GetSupportedArchitectures( + std::vector &archs) { ArchSpec host_arch = HostInfo::GetArchitecture(HostInfo::eArchKindDefault); - if (host_arch.GetCore() == ArchSpec::eCore_x86_64_x86_64h) { - switch (idx) { - case 0: - arch = host_arch; - return true; - - case 1: - arch.SetTriple("x86_64-apple-macosx"); - return true; - - case 2: - arch = HostInfo::GetArchitecture(HostInfo::eArchKind32); - return true; + archs.push_back(host_arch); - default: - return false; - } + if (host_arch.GetCore() == ArchSpec::eCore_x86_64_x86_64h) { + archs.push_back(ArchSpec("x86_64-apple-macosx")); + archs.push_back(HostInfo::GetArchitecture(HostInfo::eArchKind32)); } else { - if (idx == 0) { - arch = HostInfo::GetArchitecture(HostInfo::eArchKindDefault); - return arch.IsValid(); - } else if (idx == 1) { - ArchSpec platform_arch( - HostInfo::GetArchitecture(HostInfo::eArchKindDefault)); - ArchSpec platform_arch64( - HostInfo::GetArchitecture(HostInfo::eArchKind64)); - if (platform_arch.IsExactMatch(platform_arch64)) { - // This macosx platform supports both 32 and 64 bit. Since we already - // returned the 64 bit arch for idx == 0, return the 32 bit arch for - // idx == 1 - arch = HostInfo::GetArchitecture(HostInfo::eArchKind32); - return arch.IsValid(); - } - } + ArchSpec host_arch64 = HostInfo::GetArchitecture(HostInfo::eArchKind64); + if (host_arch.IsExactMatch(host_arch64)) + archs.push_back(HostInfo::GetArchitecture(HostInfo::eArchKind32)); } - return false; } static llvm::ArrayRef GetCompatibleArchs(ArchSpec::Core core) { @@ -669,21 +643,19 @@ /// The architecture selection rules for arm processors These cpu subtypes have /// distinct names (e.g. armv7f) but armv7 binaries run fine on an armv7f /// processor. -bool PlatformDarwin::ARMGetSupportedArchitectureAtIndex(uint32_t idx, - ArchSpec &arch) { +void PlatformDarwin::ARMGetSupportedArchitectures( + std::vector &archs) { const ArchSpec system_arch = GetSystemArchitecture(); const ArchSpec::Core system_core = system_arch.GetCore(); - if (const char *compatible_arch = GetCompatibleArch(system_core, idx)) { + const char *compatible_arch; + for (unsigned idx = 0; + (compatible_arch = GetCompatibleArch(system_core, idx)); ++idx) { llvm::Triple triple; triple.setArchName(compatible_arch); triple.setVendor(llvm::Triple::VendorType::Apple); - arch.SetTriple(triple); - return true; + archs.push_back(ArchSpec(triple)); } - - arch.Clear(); - return false; } static FileSpec GetXcodeSelectPath() { @@ -1367,11 +1339,3 @@ return FileSpec(FindComponentInPath(fspec.GetPath(), "CommandLineTools")); return {}; } - -std::vector PlatformDarwin::GetSupportedArchitectures() { - std::vector result; - ArchSpec arch; - for (uint32_t idx = 0; GetSupportedArchitectureAtIndex(idx, arch); ++idx) - result.push_back(arch); - return result; -} diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h @@ -56,8 +56,7 @@ llvm::SmallVectorImpl *old_modules, bool *did_create_ptr) override; - bool GetSupportedArchitectureAtIndex(uint32_t idx, - lldb_private::ArchSpec &arch) override; + std::vector GetSupportedArchitectures() override; bool SupportsModules() override { return false; } diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp @@ -911,13 +911,14 @@ return {}; } -bool PlatformDarwinKernel::GetSupportedArchitectureAtIndex(uint32_t idx, - ArchSpec &arch) { +std::vector PlatformDarwinKernel::GetSupportedArchitectures() { + std::vector result; #if defined(__arm__) || defined(__arm64__) || defined(__aarch64__) - return ARMGetSupportedArchitectureAtIndex(idx, arch); + ARMGetSupportedArchitectures(result); #else - return x86GetSupportedArchitectureAtIndex(idx, arch); + x86GetSupportedArchitectures(result); #endif + return result; } void PlatformDarwinKernel::CalculateTrapHandlerSymbolNames() { diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.h b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.h --- a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.h @@ -47,8 +47,7 @@ return PlatformDarwin::GetFile(source, destination); } - bool GetSupportedArchitectureAtIndex(uint32_t idx, - lldb_private::ArchSpec &arch) override; + std::vector GetSupportedArchitectures() override; lldb_private::ConstString GetSDKDirectory(lldb_private::Target &target) override; @@ -59,11 +58,6 @@ return PlatformDarwin::AddClangModuleCompilationOptionsForSDKType( target, options, lldb_private::XcodeSDK::Type::MacOSX); } - -private: -#if defined(__arm__) || defined(__arm64__) || defined(__aarch64__) - uint32_t m_num_arm_arches = 0; -#endif }; #endif // LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMMACOSX_H diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp --- a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp @@ -133,39 +133,23 @@ return {}; } -bool PlatformMacOSX::GetSupportedArchitectureAtIndex(uint32_t idx, - ArchSpec &arch) { +std::vector PlatformMacOSX::GetSupportedArchitectures() { + std::vector result; #if defined(__arm__) || defined(__arm64__) || defined(__aarch64__) // macOS for ARM64 support both native and translated x86_64 processes - if (!m_num_arm_arches || idx < m_num_arm_arches) { - bool res = ARMGetSupportedArchitectureAtIndex(idx, arch); - if (res) - return true; - if (!m_num_arm_arches) - m_num_arm_arches = idx; - } + ARMGetSupportedArchitectures(result); - // We can't use x86GetSupportedArchitectureAtIndex() because it uses + // We can't use x86GetSupportedArchitectures() because it uses // the system architecture for some of its return values and also // has a 32bits variant. - if (idx == m_num_arm_arches) { - arch.SetTriple("x86_64-apple-macosx"); - return true; - } else if (idx == m_num_arm_arches + 1) { - arch.SetTriple("x86_64-apple-ios-macabi"); - return true; - } else if (idx == m_num_arm_arches + 2) { - arch.SetTriple("arm64-apple-ios"); - return true; - } else if (idx == m_num_arm_arches + 3) { - arch.SetTriple("arm64e-apple-ios"); - return true; - } - - return false; + result.push_back(ArchSpec("x86_64-apple-macosx")); + result.push_back(ArchSpec("x86_64-apple-ios-macabi")); + result.push_back(ArchSpec("arm64-apple-ios")); + result.push_back(ArchSpec("arm64e-apple-ios")); #else - return x86GetSupportedArchitectureAtIndex(idx, arch); + x86GetSupportedArchitectures(result); #endif + return result; } lldb_private::Status PlatformMacOSX::GetSharedModule( diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.h --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.h @@ -40,8 +40,7 @@ llvm::StringRef GetDescription() override { return GetDescriptionStatic(); } - bool GetSupportedArchitectureAtIndex(uint32_t idx, - lldb_private::ArchSpec &arch) override; + std::vector GetSupportedArchitectures() override; protected: llvm::StringRef GetDeviceSupportDirectoryName() override; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.cpp --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.cpp @@ -137,34 +137,8 @@ return "Remote BridgeOS platform plug-in."; } -bool PlatformRemoteAppleBridge::GetSupportedArchitectureAtIndex(uint32_t idx, - ArchSpec &arch) { - ArchSpec system_arch(GetSystemArchitecture()); - - const ArchSpec::Core system_core = system_arch.GetCore(); - switch (system_core) { - default: - switch (idx) { - case 0: - arch.SetTriple("arm64-apple-bridgeos"); - return true; - default: - break; - } - break; - - case ArchSpec::eCore_arm_arm64: - switch (idx) { - case 0: - arch.SetTriple("arm64-apple-bridgeos"); - return true; - default: - break; - } - break; - } - arch.Clear(); - return false; +std::vector PlatformRemoteAppleBridge::GetSupportedArchitectures() { + return {ArchSpec("arm64-apple-bridgeos")}; } llvm::StringRef PlatformRemoteAppleBridge::GetDeviceSupportDirectoryName() { diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h @@ -40,8 +40,7 @@ llvm::StringRef GetDescription() override { return GetDescriptionStatic(); } - bool GetSupportedArchitectureAtIndex(uint32_t idx, - lldb_private::ArchSpec &arch) override; + std::vector GetSupportedArchitectures() override; protected: llvm::StringRef GetDeviceSupportDirectoryName() override; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp @@ -132,90 +132,24 @@ return "Remote Apple TV platform plug-in."; } -bool PlatformRemoteAppleTV::GetSupportedArchitectureAtIndex(uint32_t idx, - ArchSpec &arch) { +std::vector PlatformRemoteAppleTV::GetSupportedArchitectures() { ArchSpec system_arch(GetSystemArchitecture()); const ArchSpec::Core system_core = system_arch.GetCore(); switch (system_core) { default: - switch (idx) { - case 0: - arch.SetTriple("arm64-apple-tvos"); - return true; - case 1: - arch.SetTriple("armv7s-apple-tvos"); - return true; - case 2: - arch.SetTriple("armv7-apple-tvos"); - return true; - case 3: - arch.SetTriple("thumbv7s-apple-tvos"); - return true; - case 4: - arch.SetTriple("thumbv7-apple-tvos"); - return true; - default: - break; - } - break; - case ArchSpec::eCore_arm_arm64: - switch (idx) { - case 0: - arch.SetTriple("arm64-apple-tvos"); - return true; - case 1: - arch.SetTriple("armv7s-apple-tvos"); - return true; - case 2: - arch.SetTriple("armv7-apple-tvos"); - return true; - case 3: - arch.SetTriple("thumbv7s-apple-tvos"); - return true; - case 4: - arch.SetTriple("thumbv7-apple-tvos"); - return true; - default: - break; - } - break; + return {ArchSpec("arm64-apple-tvos"), ArchSpec("armv7s-apple-tvos"), + ArchSpec("armv7-apple-tvos"), ArchSpec("thumbv7s-apple-tvos"), + ArchSpec("thumbv7-apple-tvos")}; case ArchSpec::eCore_arm_armv7s: - switch (idx) { - case 0: - arch.SetTriple("armv7s-apple-tvos"); - return true; - case 1: - arch.SetTriple("armv7-apple-tvos"); - return true; - case 2: - arch.SetTriple("thumbv7s-apple-tvos"); - return true; - case 3: - arch.SetTriple("thumbv7-apple-tvos"); - return true; - default: - break; - } - break; + return {ArchSpec("armv7s-apple-tvos"), ArchSpec("armv7-apple-tvos"), + ArchSpec("thumbv7s-apple-tvos"), ArchSpec("thumbv7-apple-tvos")}; case ArchSpec::eCore_arm_armv7: - switch (idx) { - case 0: - arch.SetTriple("armv7-apple-tvos"); - return true; - case 1: - arch.SetTriple("thumbv7-apple-tvos"); - return true; - default: - break; - } - break; + return {ArchSpec("armv7-apple-tvos"), ArchSpec("thumbv7-apple-tvos")}; } - arch.Clear(); - return false; } llvm::StringRef PlatformRemoteAppleTV::GetDeviceSupportDirectoryName() { diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h @@ -43,8 +43,7 @@ // lldb_private::Platform functions - bool GetSupportedArchitectureAtIndex(uint32_t idx, - lldb_private::ArchSpec &arch) override; + std::vector GetSupportedArchitectures() override; protected: llvm::StringRef GetDeviceSupportDirectoryName() override; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp @@ -143,154 +143,39 @@ PlatformRemoteAppleWatch::PlatformRemoteAppleWatch() : PlatformRemoteDarwinDevice() {} -bool PlatformRemoteAppleWatch::GetSupportedArchitectureAtIndex(uint32_t idx, - ArchSpec &arch) { +std::vector PlatformRemoteAppleWatch::GetSupportedArchitectures() { ArchSpec system_arch(GetSystemArchitecture()); const ArchSpec::Core system_core = system_arch.GetCore(); switch (system_core) { default: - switch (idx) { - case 0: - arch.SetTriple("arm64-apple-watchos"); - return true; - case 1: - arch.SetTriple("armv7k-apple-watchos"); - return true; - case 2: - arch.SetTriple("armv7s-apple-watchos"); - return true; - case 3: - arch.SetTriple("armv7-apple-watchos"); - return true; - case 4: - arch.SetTriple("thumbv7k-apple-watchos"); - return true; - case 5: - arch.SetTriple("thumbv7-apple-watchos"); - return true; - case 6: - arch.SetTriple("thumbv7s-apple-watchos"); - return true; - case 7: - arch.SetTriple("arm64_32-apple-watchos"); - return true; - default: - break; - } - break; - case ArchSpec::eCore_arm_arm64: - switch (idx) { - case 0: - arch.SetTriple("arm64-apple-watchos"); - return true; - case 1: - arch.SetTriple("armv7k-apple-watchos"); - return true; - case 2: - arch.SetTriple("armv7s-apple-watchos"); - return true; - case 3: - arch.SetTriple("armv7-apple-watchos"); - return true; - case 4: - arch.SetTriple("thumbv7k-apple-watchos"); - return true; - case 5: - arch.SetTriple("thumbv7-apple-watchos"); - return true; - case 6: - arch.SetTriple("thumbv7s-apple-watchos"); - return true; - case 7: - arch.SetTriple("arm64_32-apple-watchos"); - return true; - default: - break; - } - break; + return { + ArchSpec("arm64-apple-watchos"), ArchSpec("armv7k-apple-watchos"), + ArchSpec("armv7s-apple-watchos"), ArchSpec("armv7-apple-watchos"), + ArchSpec("thumbv7k-apple-watchos"), ArchSpec("thumbv7-apple-watchos"), + ArchSpec("thumbv7s-apple-watchos"), ArchSpec("arm64_32-apple-watchos")}; case ArchSpec::eCore_arm_armv7k: - switch (idx) { - case 0: - arch.SetTriple("armv7k-apple-watchos"); - return true; - case 1: - arch.SetTriple("armv7s-apple-watchos"); - return true; - case 2: - arch.SetTriple("armv7-apple-watchos"); - return true; - case 3: - arch.SetTriple("thumbv7k-apple-watchos"); - return true; - case 4: - arch.SetTriple("thumbv7-apple-watchos"); - return true; - case 5: - arch.SetTriple("thumbv7s-apple-watchos"); - return true; - case 6: - arch.SetTriple("arm64_32-apple-watchos"); - return true; - default: - break; - } - break; + return { + ArchSpec("armv7k-apple-watchos"), ArchSpec("armv7s-apple-watchos"), + ArchSpec("armv7-apple-watchos"), ArchSpec("thumbv7k-apple-watchos"), + ArchSpec("thumbv7-apple-watchos"), ArchSpec("thumbv7s-apple-watchos"), + ArchSpec("arm64_32-apple-watchos")}; case ArchSpec::eCore_arm_armv7s: - switch (idx) { - case 0: - arch.SetTriple("armv7s-apple-watchos"); - return true; - case 1: - arch.SetTriple("armv7k-apple-watchos"); - return true; - case 2: - arch.SetTriple("armv7-apple-watchos"); - return true; - case 3: - arch.SetTriple("thumbv7k-apple-watchos"); - return true; - case 4: - arch.SetTriple("thumbv7-apple-watchos"); - return true; - case 5: - arch.SetTriple("thumbv7s-apple-watchos"); - return true; - case 6: - arch.SetTriple("arm64_32-apple-watchos"); - return true; - default: - break; - } - break; + return { + ArchSpec("armv7s-apple-watchos"), ArchSpec("armv7k-apple-watchos"), + ArchSpec("armv7-apple-watchos"), ArchSpec("thumbv7k-apple-watchos"), + ArchSpec("thumbv7-apple-watchos"), ArchSpec("thumbv7s-apple-watchos"), + ArchSpec("arm64_32-apple-watchos")}; case ArchSpec::eCore_arm_armv7: - switch (idx) { - case 0: - arch.SetTriple("armv7-apple-watchos"); - return true; - case 1: - arch.SetTriple("armv7k-apple-watchos"); - return true; - case 2: - arch.SetTriple("thumbv7k-apple-watchos"); - return true; - case 3: - arch.SetTriple("thumbv7-apple-watchos"); - return true; - case 4: - arch.SetTriple("arm64_32-apple-watchos"); - return true; - default: - break; - } - break; + return {ArchSpec("armv7-apple-watchos"), ArchSpec("armv7k-apple-watchos"), + ArchSpec("thumbv7k-apple-watchos"), + ArchSpec("thumbv7-apple-watchos"), + ArchSpec("arm64_32-apple-watchos")}; } - arch.Clear(); - return false; } llvm::StringRef PlatformRemoteAppleWatch::GetDeviceSupportDirectoryName() { diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteDarwinDevice.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteDarwinDevice.cpp --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteDarwinDevice.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteDarwinDevice.cpp @@ -90,9 +90,9 @@ // 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; - for (uint32_t idx = 0; GetSupportedArchitectureAtIndex( - idx, resolved_module_spec.GetArchitecture()); - ++idx) { + llvm::ListSeparator LS; + for (const ArchSpec &arch : GetSupportedArchitectures()) { + resolved_module_spec.GetArchitecture() = arch; error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp, nullptr, nullptr, nullptr); // Did we find an executable using one of the @@ -103,10 +103,7 @@ error.SetErrorToGenericError(); } - if (idx > 0) - arch_names.PutCString(", "); - arch_names.PutCString( - resolved_module_spec.GetArchitecture().GetArchitectureName()); + arch_names << LS << arch.GetArchitectureName(); } if (error.Fail() || !exe_module_sp) { diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.h --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.h @@ -42,15 +42,11 @@ const lldb_private::UUID *uuid_ptr, lldb_private::FileSpec &local_file) override; - bool GetSupportedArchitectureAtIndex(uint32_t idx, - lldb_private::ArchSpec &arch) override; + std::vector GetSupportedArchitectures() override; protected: llvm::StringRef GetDeviceSupportDirectoryName() override; llvm::StringRef GetPlatformName() override; - -private: - uint32_t m_num_arm_arches = 0; }; #endif // LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMREMOTEMACOSX_H diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.cpp --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.cpp @@ -124,35 +124,19 @@ return PlatformSP(); } -bool PlatformRemoteMacOSX::GetSupportedArchitectureAtIndex(uint32_t idx, - ArchSpec &arch) { +std::vector PlatformRemoteMacOSX::GetSupportedArchitectures() { // macOS for ARM64 support both native and translated x86_64 processes - if (!m_num_arm_arches || idx < m_num_arm_arches) { - bool res = ARMGetSupportedArchitectureAtIndex(idx, arch); - if (res) - return true; - if (!m_num_arm_arches) - m_num_arm_arches = idx; - } + std::vector result; + ARMGetSupportedArchitectures(result); - // We can't use x86GetSupportedArchitectureAtIndex() because it uses + // We can't use x86GetSupportedArchitectures() because it uses // the system architecture for some of its return values and also // has a 32bits variant. - if (idx == m_num_arm_arches) { - arch.SetTriple("x86_64-apple-macosx"); - return true; - } else if (idx == m_num_arm_arches + 1) { - arch.SetTriple("x86_64-apple-ios-macabi"); - return true; - } else if (idx == m_num_arm_arches + 2) { - arch.SetTriple("arm64-apple-ios"); - return true; - } else if (idx == m_num_arm_arches + 3) { - arch.SetTriple("arm64e-apple-ios"); - return true; - } - - return false; + result.push_back(ArchSpec("x86_64-apple-macosx")); + result.push_back(ArchSpec("x86_64-apple-ios-macabi")); + result.push_back(ArchSpec("arm64-apple-ios")); + result.push_back(ArchSpec("arm64e-apple-ios")); + return result; } lldb_private::Status PlatformRemoteMacOSX::GetFileWithUUID( diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h @@ -39,8 +39,7 @@ // lldb_private::PluginInterface functions llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } - bool GetSupportedArchitectureAtIndex(uint32_t idx, - lldb_private::ArchSpec &arch) override; + std::vector GetSupportedArchitectures() override; protected: llvm::StringRef GetDeviceSupportDirectoryName() override; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp @@ -133,9 +133,10 @@ PlatformRemoteiOS::PlatformRemoteiOS() : PlatformRemoteDarwinDevice() {} -bool PlatformRemoteiOS::GetSupportedArchitectureAtIndex(uint32_t idx, - ArchSpec &arch) { - return ARMGetSupportedArchitectureAtIndex(idx, arch); +std::vector PlatformRemoteiOS::GetSupportedArchitectures() { + std::vector result; + ARMGetSupportedArchitectures(result); + return result; } llvm::StringRef PlatformRemoteiOS::GetDeviceSupportDirectoryName() {