summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/BinaryFormat/MachO.h1
-rw-r--r--llvm/include/llvm/Object/MachO.h1
-rw-r--r--llvm/lib/MC/MCAsmStreamer.cpp1
-rw-r--r--llvm/lib/MC/MCParser/DarwinAsmParser.cpp2
-rw-r--r--llvm/lib/MC/MCStreamer.cpp9
-rw-r--r--llvm/test/CodeGen/X86/macCatalyst.ll3
-rw-r--r--llvm/test/MC/MachO/build-version-maccatalyst.s4
-rw-r--r--llvm/test/MC/MachO/darwin-version-min-load-command.s8
-rw-r--r--llvm/test/tools/llvm-objdump/X86/macho-maccatalyst-build-version.yaml54
9 files changed, 83 insertions, 0 deletions
diff --git a/llvm/include/llvm/BinaryFormat/MachO.h b/llvm/include/llvm/BinaryFormat/MachO.h
index 089add56836..a01393a3b30 100644
--- a/llvm/include/llvm/BinaryFormat/MachO.h
+++ b/llvm/include/llvm/BinaryFormat/MachO.h
@@ -487,6 +487,7 @@ enum PlatformType {
PLATFORM_TVOS = 3,
PLATFORM_WATCHOS = 4,
PLATFORM_BRIDGEOS = 5,
+ PLATFORM_MACCATALYST = 6,
PLATFORM_IOSSIMULATOR = 7,
PLATFORM_TVOSSIMULATOR = 8,
PLATFORM_WATCHOSSIMULATOR = 9
diff --git a/llvm/include/llvm/Object/MachO.h b/llvm/include/llvm/Object/MachO.h
index 17edd9cfefb..71c835cc016 100644
--- a/llvm/include/llvm/Object/MachO.h
+++ b/llvm/include/llvm/Object/MachO.h
@@ -608,6 +608,7 @@ public:
case MachO::PLATFORM_TVOS: return "tvos";
case MachO::PLATFORM_WATCHOS: return "watchos";
case MachO::PLATFORM_BRIDGEOS: return "bridgeos";
+ case MachO::PLATFORM_MACCATALYST: return "maccatalyst";
case MachO::PLATFORM_IOSSIMULATOR: return "iossimulator";
case MachO::PLATFORM_TVOSSIMULATOR: return "tvossimulator";
case MachO::PLATFORM_WATCHOSSIMULATOR: return "watchossimulator";
diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index 350502d633d..a78092ec458 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -541,6 +541,7 @@ static const char *getPlatformName(MachO::PlatformType Type) {
case MachO::PLATFORM_TVOS: return "tvos";
case MachO::PLATFORM_WATCHOS: return "watchos";
case MachO::PLATFORM_BRIDGEOS: return "bridgeos";
+ case MachO::PLATFORM_MACCATALYST: return "maccatalyst";
case MachO::PLATFORM_IOSSIMULATOR: return "iossimulator";
case MachO::PLATFORM_TVOSSIMULATOR: return "tvossimulator";
case MachO::PLATFORM_WATCHOSSIMULATOR: return "watchossimulator";
diff --git a/llvm/lib/MC/MCParser/DarwinAsmParser.cpp b/llvm/lib/MC/MCParser/DarwinAsmParser.cpp
index 09d41db06c6..1b5b0126734 100644
--- a/llvm/lib/MC/MCParser/DarwinAsmParser.cpp
+++ b/llvm/lib/MC/MCParser/DarwinAsmParser.cpp
@@ -1148,6 +1148,7 @@ static Triple::OSType getOSTypeFromPlatform(MachO::PlatformType Type) {
case MachO::PLATFORM_TVOS: return Triple::TvOS;
case MachO::PLATFORM_WATCHOS: return Triple::WatchOS;
case MachO::PLATFORM_BRIDGEOS: /* silence warning */ break;
+ case MachO::PLATFORM_MACCATALYST: return Triple::IOS;
case MachO::PLATFORM_IOSSIMULATOR: /* silence warning */ break;
case MachO::PLATFORM_TVOSSIMULATOR: /* silence warning */ break;
case MachO::PLATFORM_WATCHOSSIMULATOR: /* silence warning */ break;
@@ -1168,6 +1169,7 @@ bool DarwinAsmParser::parseBuildVersion(StringRef Directive, SMLoc Loc) {
.Case("ios", MachO::PLATFORM_IOS)
.Case("tvos", MachO::PLATFORM_TVOS)
.Case("watchos", MachO::PLATFORM_WATCHOS)
+ .Case("maccatalyst", MachO::PLATFORM_MACCATALYST)
.Default(0);
if (Platform == 0)
return Error(PlatformLoc, "unknown platform name");
diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp
index b7986ee0334..decbb96817e 100644
--- a/llvm/lib/MC/MCStreamer.cpp
+++ b/llvm/lib/MC/MCStreamer.cpp
@@ -1077,6 +1077,15 @@ void MCStreamer::EmitVersionForTarget(const Triple &Target,
unsigned Major;
unsigned Minor;
unsigned Update;
+ if (Target.isMacCatalystEnvironment()) {
+ // Mac Catalyst always uses the build version load command.
+ Target.getiOSVersion(Major, Minor, Update);
+ assert(Major && "A non-zero major version is expected");
+ EmitBuildVersion(MachO::PLATFORM_MACCATALYST, Major, Minor, Update,
+ SDKVersion);
+ return;
+ }
+
MCVersionMinType VersionType;
if (Target.isWatchOS()) {
VersionType = MCVM_WatchOSVersionMin;
diff --git a/llvm/test/CodeGen/X86/macCatalyst.ll b/llvm/test/CodeGen/X86/macCatalyst.ll
new file mode 100644
index 00000000000..190c467e93d
--- /dev/null
+++ b/llvm/test/CodeGen/X86/macCatalyst.ll
@@ -0,0 +1,3 @@
+; RUN: llc %s -o - | FileCheck %s
+target triple="x86_64-apple-ios13.0-maccatalyst"
+; CHECK: .build_version maccatalyst, 13, 0
diff --git a/llvm/test/MC/MachO/build-version-maccatalyst.s b/llvm/test/MC/MachO/build-version-maccatalyst.s
new file mode 100644
index 00000000000..9056780810d
--- /dev/null
+++ b/llvm/test/MC/MachO/build-version-maccatalyst.s
@@ -0,0 +1,4 @@
+// RUN: llvm-mc -triple x86_64-apple-ios %s | FileCheck %s
+
+.build_version maccatalyst,13,0
+// CHECK: .build_version maccatalyst, 13, 0
diff --git a/llvm/test/MC/MachO/darwin-version-min-load-command.s b/llvm/test/MC/MachO/darwin-version-min-load-command.s
index 7fd4daa40a0..05f61f0bc49 100644
--- a/llvm/test/MC/MachO/darwin-version-min-load-command.s
+++ b/llvm/test/MC/MachO/darwin-version-min-load-command.s
@@ -1,6 +1,7 @@
// RUN: llvm-mc -triple x86_64-apple-macosx10.10.0 %s -filetype=obj -o - | llvm-objdump -macho -private-headers - | FileCheck %s
// RUN: llvm-mc -triple x86_64-apple-ios8.0.0 %s -filetype=obj -o - | llvm-objdump -macho -private-headers - | FileCheck %s --check-prefix=CHECK-IOS
// RUN: llvm-mc -triple x86_64-apple-darwin %s -filetype=obj -o - | llvm-objdump -macho -private-headers - | FileCheck %s --check-prefix=CHECK-DARWIN
+// RUN: llvm-mc -triple x86_64-apple-ios13.0-maccatalyst %s -filetype=obj -o - | llvm-objdump -macho -private-headers - | FileCheck %s --check-prefix=CHECK-MACCATALYST
// Test version-min load command should be inferred from triple and should always be generated on Darwin
// CHECK: Load command
@@ -33,3 +34,10 @@
// CHECK-BRIDGEOS-NEXT: sdk n/a
// CHECK-BRIDGEOS-NEXT: minos 2.0
// CHECK-BRIDGEOS-NEXT: ntools 0
+
+// CHECK-MACCATALYST: cmd LC_BUILD_VERSION
+// CHECK-MACCATALYST-NEXT: cmdsize 24
+// CHECK-MACCATALYST-NEXT: platform maccatalyst
+// CHECK-MACCATALYST-NEXT: sdk n/a
+// CHECK-MACCATALYST-NEXT: minos 13.0
+// CHECK-MACCATALYST-NEXT: ntools 0
diff --git a/llvm/test/tools/llvm-objdump/X86/macho-maccatalyst-build-version.yaml b/llvm/test/tools/llvm-objdump/X86/macho-maccatalyst-build-version.yaml
new file mode 100644
index 00000000000..4d2f5d6dddf
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/X86/macho-maccatalyst-build-version.yaml
@@ -0,0 +1,54 @@
+# RUN: yaml2obj %s | llvm-objdump -macho -private-headers - | FileCheck %s
+
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACF
+ cputype: 0x01000007
+ cpusubtype: 0x00000003
+ filetype: 0x00000004
+ ncmds: 2
+ sizeofcmds: 192
+ flags: 0x00000000
+ reserved: 0
+LoadCommands:
+ - cmd: LC_SEGMENT_64
+ cmdsize: 152
+ segname: __TEXT
+ vmaddr: 4294967296
+ vmsize: 8192
+ fileoff: 0
+ filesize: 3099
+ maxprot: 7
+ initprot: 5
+ nsects: 1
+ flags: 0
+ Sections:
+ - sectname: __text
+ segname: __TEXT
+ addr: 0x0000000100001160
+ size: 3099
+ offset: 0x00001160
+ align: 4
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ - cmd: LC_BUILD_VERSION
+ cmdsize: 32
+ platform: 6
+ minos: 0x000D0000
+ sdk: 0x00090000
+ ntools: 1
+ Tools:
+ - tool: 1
+ version: 0x00000000
+...
+
+CHECK: Load command 1
+CHECK-NEXT: cmd LC_BUILD_VERSION
+CHECK-NEXT: cmdsize 32
+CHECK-NEXT: platform maccatalyst
+CHECK-NEXT: sdk 9.0
+CHECK-NEXT: minos 13.0
OpenPOWER on IntegriCloud