diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp index d31559bc9018..baa9d7b50ad6 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp @@ -570,12 +570,23 @@ bool PlatformDarwin::ARMGetSupportedArchitectureAtIndex(uint32_t idx, #define OSNAME "watchos" #elif defined(TARGET_OS_BRIDGE) && TARGET_OS_BRIDGE == 1 #define OSNAME "bridgeos" -#elif defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1 -#define OSNAME "macosx" #else #define OSNAME "ios" #endif +#if TARGET_OS_OSX + if (IsHost()) { + if (idx == 0) { + arch.SetTriple("arm64e-apple-macosx"); + return true; + } else if (idx == 1) { + arch.SetTriple("arm64-apple-macosx"); + return true; + } + return false; + } +#endif + const ArchSpec::Core system_core = system_arch.GetCore(); switch (system_core) { default: diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp index 0b7f898ee0d3..93860c257979 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp @@ -282,7 +282,33 @@ PlatformMacOSX::GetFileWithUUID(const lldb_private::FileSpec &platform_file, bool PlatformMacOSX::GetSupportedArchitectureAtIndex(uint32_t idx, ArchSpec &arch) { #if defined(__arm__) || defined(__arm64__) || defined(__aarch64__) - return ARMGetSupportedArchitectureAtIndex(idx, arch); + // 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; + } + + // We can't use x86GetSupportedArchitectureAtIndex() 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; #else return x86GetSupportedArchitectureAtIndex(idx, arch); #endif diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.h b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.h index 30b11eb37684..c383dd97daf8 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.h @@ -79,6 +79,8 @@ public: private: PlatformMacOSX(const PlatformMacOSX &) = delete; const PlatformMacOSX &operator=(const PlatformMacOSX &) = delete; + + int m_num_arches = 0; }; #endif // LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMMACOSX_H