Author: Adrian Prantl Date: 2020-07-24T18:01:41-07:00 New Revision: e937840dbdce20f2ab7ca4dcd9f04c3fd89e56e3
URL: https://github.com/llvm/llvm-project/commit/e937840dbdce20f2ab7ca4dcd9f04c3fd89e56e3 DIFF: https://github.com/llvm/llvm-project/commit/e937840dbdce20f2ab7ca4dcd9f04c3fd89e56e3.diff LOG: Upstream macCatalyst support in ArchSpec and associated unit tests. Added: Modified: lldb/source/Utility/ArchSpec.cpp lldb/unittests/Utility/ArchSpecTest.cpp Removed: ################################################################################ diff --git a/lldb/source/Utility/ArchSpec.cpp b/lldb/source/Utility/ArchSpec.cpp index f220f4e30b29..a77ae8633070 100644 --- a/lldb/source/Utility/ArchSpec.cpp +++ b/lldb/source/Utility/ArchSpec.cpp @@ -846,6 +846,15 @@ bool ArchSpec::ContainsOnlyArch(const llvm::Triple &normalized_triple) { } void ArchSpec::MergeFrom(const ArchSpec &other) { + // ios-macabi always wins over macosx. + if ((GetTriple().getOS() == llvm::Triple::MacOSX || + GetTriple().getOS() == llvm::Triple::UnknownOS) && + other.GetTriple().getOS() == llvm::Triple::IOS && + other.GetTriple().getEnvironment() == llvm::Triple::MacABI) { + (*this) = other; + return; + } + if (!TripleVendorWasSpecified() && other.TripleVendorWasSpecified()) GetTriple().setVendor(other.GetTriple().getVendor()); if (!TripleOSWasSpecified() && other.TripleOSWasSpecified()) @@ -1031,6 +1040,22 @@ bool ArchSpec::IsEqualTo(const ArchSpec &rhs, bool exact_match) const { const llvm::Triple::OSType lhs_triple_os = lhs_triple.getOS(); const llvm::Triple::OSType rhs_triple_os = rhs_triple.getOS(); + const llvm::Triple::EnvironmentType lhs_triple_env = + lhs_triple.getEnvironment(); + const llvm::Triple::EnvironmentType rhs_triple_env = + rhs_triple.getEnvironment(); + + if (!exact_match) { + // x86_64-apple-ios-macabi, x86_64-apple-macosx are compatible, no match. + if ((lhs_triple_os == llvm::Triple::IOS && + lhs_triple_env == llvm::Triple::MacABI && + rhs_triple_os == llvm::Triple::MacOSX) || + (lhs_triple_os == llvm::Triple::MacOSX && + rhs_triple_os == llvm::Triple::IOS && + rhs_triple_env == llvm::Triple::MacABI)) + return true; + } + if (lhs_triple_os != rhs_triple_os) { const bool rhs_os_specified = rhs.TripleOSWasSpecified(); const bool lhs_os_specified = TripleOSWasSpecified(); @@ -1045,10 +1070,13 @@ bool ArchSpec::IsEqualTo(const ArchSpec &rhs, bool exact_match) const { return false; } - const llvm::Triple::EnvironmentType lhs_triple_env = - lhs_triple.getEnvironment(); - const llvm::Triple::EnvironmentType rhs_triple_env = - rhs_triple.getEnvironment(); + // x86_64-apple-ios-macabi and x86_64-apple-ios are not compatible. + if (lhs_triple_os == llvm::Triple::IOS && + rhs_triple_os == llvm::Triple::IOS && + (lhs_triple_env == llvm::Triple::MacABI || + rhs_triple_env == llvm::Triple::MacABI) && + lhs_triple_env != rhs_triple_env) + return false; return IsCompatibleEnvironment(lhs_triple_env, rhs_triple_env); } diff --git a/lldb/unittests/Utility/ArchSpecTest.cpp b/lldb/unittests/Utility/ArchSpecTest.cpp index 4e8e2f3c34d7..a8f43ed7dc7c 100644 --- a/lldb/unittests/Utility/ArchSpecTest.cpp +++ b/lldb/unittests/Utility/ArchSpecTest.cpp @@ -328,6 +328,40 @@ TEST(ArchSpecTest, Compatibility) { ASSERT_TRUE(A.IsExactMatch(B)); ASSERT_TRUE(A.IsCompatibleMatch(B)); } + { + ArchSpec A("x86_64"); + ArchSpec B("x86_64-apple-ios12.0.0-macabi"); + // FIXME: The exact match also looks unintuitive. + ASSERT_TRUE(A.IsExactMatch(B)); + ASSERT_TRUE(A.IsCompatibleMatch(B)); + } + { + ArchSpec A("x86_64-apple-ios12.0.0"); + ArchSpec B("x86_64-apple-ios12.0.0-macabi"); + ASSERT_FALSE(A.IsExactMatch(B)); + ASSERT_FALSE(A.IsCompatibleMatch(B)); + } + { + ArchSpec A("x86_64-apple-macosx10.14.2"); + ArchSpec B("x86_64-apple-ios12.0.0-macabi"); + ASSERT_FALSE(A.IsExactMatch(B)); + ASSERT_TRUE(A.IsCompatibleMatch(B)); + } + { + ArchSpec A("x86_64-apple-macosx10.14.2"); + ArchSpec B("x86_64-apple-ios12.0.0-macabi"); + // ios-macabi wins. + A.MergeFrom(B); + ASSERT_TRUE(A.IsExactMatch(B)); + } + { + ArchSpec A("x86_64-apple-macosx10.14.2"); + ArchSpec B("x86_64-apple-ios12.0.0-macabi"); + ArchSpec C(B); + // ios-macabi wins. + B.MergeFrom(A); + ASSERT_TRUE(B.IsExactMatch(C)); + } } TEST(ArchSpecTest, OperatorBool) { _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits