From 001c8e1fd9f09d3de9ff6e64bdac4b8ca681dfb4 Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Mon, 20 Jul 2020 14:10:35 -0700 Subject: [PATCH] [PlatformDarwin] Add support for Apple Silicon. Gets another large chunk of the testsuite to pass. --- .../Plugins/Platform/MacOSX/PlatformDarwin.cpp | 15 ++++++++++-- .../Plugins/Platform/MacOSX/PlatformMacOSX.cpp | 28 +++++++++++++++++++++- .../Plugins/Platform/MacOSX/PlatformMacOSX.h | 2 ++ 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp index d31559b..baa9d7b 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 0b7f898e..93860c2 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 30b11eb..c383dd9 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 -- 2.7.4