[llvm] e40bc8e - [ORC][MachO] Make BuildVersionOpts::fromTriple result optional, add test.
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 14 15:11:44 PDT 2024
Author: Lang Hames
Date: 2024-03-14T15:11:39-07:00
New Revision: e40bc8e509cdad67926fcd208c320cb4d50f6aec
URL: https://github.com/llvm/llvm-project/commit/e40bc8e509cdad67926fcd208c320cb4d50f6aec
DIFF: https://github.com/llvm/llvm-project/commit/e40bc8e509cdad67926fcd208c320cb4d50f6aec.diff
LOG: [ORC][MachO] Make BuildVersionOpts::fromTriple result optional, add test.
Only platform specific darwin OS values (e.g. macosx, ios, watchos, ...) can be
mapped to an LC_BUILD_VERSION platform. For all other values return an empty
optional to indicate that the load command can't be constructed.
Also fixes the simulator conditions to return the correct platform, and adds a
testcase.
Added:
llvm/unittests/ExecutionEngine/Orc/MachOPlatformTest.cpp
Modified:
llvm/include/llvm/ExecutionEngine/Orc/MachOPlatform.h
llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
llvm/unittests/ExecutionEngine/Orc/CMakeLists.txt
Removed:
################################################################################
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/MachOPlatform.h b/llvm/include/llvm/ExecutionEngine/Orc/MachOPlatform.h
index a1f9238c5e25ea..2ffde1f9eb10e8 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/MachOPlatform.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/MachOPlatform.h
@@ -60,9 +60,9 @@ class MachOPlatform : public Platform {
struct BuildVersionOpts {
- // Derive platform from triple.
- static BuildVersionOpts fromTriple(const Triple &TT, uint32_t MinOS,
- uint32_t SDK);
+ // Derive platform from triple if possible.
+ static std::optional<BuildVersionOpts>
+ fromTriple(const Triple &TT, uint32_t MinOS, uint32_t SDK);
uint32_t Platform; // Platform.
uint32_t MinOS; // X.Y.Z is encoded in nibbles xxxx.yy.zz
diff --git a/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp b/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
index c618cd42500bc5..1fa8a1274911ca 100644
--- a/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
@@ -255,7 +255,7 @@ struct ObjCImageInfoFlags {
namespace llvm {
namespace orc {
-MachOPlatform::HeaderOptions::BuildVersionOpts
+std::optional<MachOPlatform::HeaderOptions::BuildVersionOpts>
MachOPlatform::HeaderOptions::BuildVersionOpts::fromTriple(const Triple &TT,
uint32_t MinOS,
uint32_t SDK) {
@@ -263,26 +263,25 @@ MachOPlatform::HeaderOptions::BuildVersionOpts::fromTriple(const Triple &TT,
uint32_t Platform;
switch (TT.getOS()) {
case Triple::IOS:
- Platform = TT.isSimulatorEnvironment() ? MachO::PLATFORM_IOS
- : MachO::PLATFORM_IOSSIMULATOR;
+ Platform = TT.isSimulatorEnvironment() ? MachO::PLATFORM_IOSSIMULATOR
+ : MachO::PLATFORM_IOS;
break;
case Triple::MacOSX:
Platform = MachO::PLATFORM_MACOS;
break;
case Triple::TvOS:
- Platform = TT.isSimulatorEnvironment() ? MachO::PLATFORM_TVOS
- : MachO::PLATFORM_TVOSSIMULATOR;
+ Platform = TT.isSimulatorEnvironment() ? MachO::PLATFORM_TVOSSIMULATOR
+ : MachO::PLATFORM_TVOS;
break;
case Triple::WatchOS:
- Platform = TT.isSimulatorEnvironment() ? MachO::PLATFORM_WATCHOS
- : MachO::PLATFORM_WATCHOSSIMULATOR;
+ Platform = TT.isSimulatorEnvironment() ? MachO::PLATFORM_WATCHOSSIMULATOR
+ : MachO::PLATFORM_WATCHOS;
break;
default:
- Platform = MachO::PLATFORM_UNKNOWN;
- break;
+ return std::nullopt;
}
- return {Platform, MinOS, SDK};
+ return MachOPlatform::HeaderOptions::BuildVersionOpts{Platform, MinOS, SDK};
}
Expected<std::unique_ptr<MachOPlatform>> MachOPlatform::Create(
diff --git a/llvm/unittests/ExecutionEngine/Orc/CMakeLists.txt b/llvm/unittests/ExecutionEngine/Orc/CMakeLists.txt
index f102ba59e37542..8a6a26bba63c26 100644
--- a/llvm/unittests/ExecutionEngine/Orc/CMakeLists.txt
+++ b/llvm/unittests/ExecutionEngine/Orc/CMakeLists.txt
@@ -26,6 +26,7 @@ add_llvm_unittest(OrcJITTests
JITTargetMachineBuilderTest.cpp
LazyCallThroughAndReexportsTest.cpp
LookupAndRecordAddrsTest.cpp
+ MachOPlatformTest.cpp
MapperJITLinkMemoryManagerTest.cpp
MemoryMapperTest.cpp
ObjectFormatsTest.cpp
diff --git a/llvm/unittests/ExecutionEngine/Orc/MachOPlatformTest.cpp b/llvm/unittests/ExecutionEngine/Orc/MachOPlatformTest.cpp
new file mode 100644
index 00000000000000..bf6c1042252d76
--- /dev/null
+++ b/llvm/unittests/ExecutionEngine/Orc/MachOPlatformTest.cpp
@@ -0,0 +1,56 @@
+//===---------- MachOPlatformTest.cpp - MachPlatform API Tests ------------===//
+//
+// 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 "llvm/ExecutionEngine/Orc/MachOPlatform.h"
+#include "llvm/BinaryFormat/MachO.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+using namespace llvm::orc;
+
+TEST(MachOPlatformTests, BuildVersionOptsFromTriple) {
+
+ auto darwinOS = MachOPlatform::HeaderOptions::BuildVersionOpts::fromTriple(
+ Triple("arm64-apple-darwin"), 0, 0);
+ EXPECT_FALSE(darwinOS);
+
+ auto macOS = MachOPlatform::HeaderOptions::BuildVersionOpts::fromTriple(
+ Triple("arm64-apple-macosx"), 0, 0);
+ EXPECT_TRUE(macOS);
+ EXPECT_EQ(macOS->Platform, MachO::PLATFORM_MACOS);
+
+ auto iOS = MachOPlatform::HeaderOptions::BuildVersionOpts::fromTriple(
+ Triple("arm64-apple-ios"), 0, 0);
+ EXPECT_TRUE(iOS);
+ EXPECT_EQ(iOS->Platform, MachO::PLATFORM_IOS);
+
+ auto iOSSim = MachOPlatform::HeaderOptions::BuildVersionOpts::fromTriple(
+ Triple("arm64-apple-ios-simulator"), 0, 0);
+ EXPECT_TRUE(iOSSim);
+ EXPECT_EQ(iOSSim->Platform, MachO::PLATFORM_IOSSIMULATOR);
+
+ auto tvOS = MachOPlatform::HeaderOptions::BuildVersionOpts::fromTriple(
+ Triple("arm64-apple-tvos"), 0, 0);
+ EXPECT_TRUE(tvOS);
+ EXPECT_EQ(tvOS->Platform, MachO::PLATFORM_TVOS);
+
+ auto tvOSSim = MachOPlatform::HeaderOptions::BuildVersionOpts::fromTriple(
+ Triple("arm64-apple-tvos-simulator"), 0, 0);
+ EXPECT_TRUE(tvOSSim);
+ EXPECT_EQ(tvOSSim->Platform, MachO::PLATFORM_TVOSSIMULATOR);
+
+ auto watchOS = MachOPlatform::HeaderOptions::BuildVersionOpts::fromTriple(
+ Triple("arm64-apple-watchos"), 0, 0);
+ EXPECT_TRUE(watchOS);
+ EXPECT_EQ(watchOS->Platform, MachO::PLATFORM_WATCHOS);
+
+ auto watchOSSim = MachOPlatform::HeaderOptions::BuildVersionOpts::fromTriple(
+ Triple("arm64-apple-watchos-simulator"), 0, 0);
+ EXPECT_TRUE(watchOSSim);
+ EXPECT_EQ(watchOSSim->Platform, MachO::PLATFORM_WATCHOSSIMULATOR);
+}
More information about the llvm-commits
mailing list