Skip to content

Commit 532a182

Browse files
committed
[llvm] Teach MachO about XROS (llvm#78373)
Add support for XROS to encode in Mach-O file formats. (cherry picked from commit 735adbf)
1 parent 94c2056 commit 532a182

File tree

10 files changed

+75
-0
lines changed

10 files changed

+75
-0
lines changed

llvm/lib/Analysis/TargetLibraryInfo.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,7 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T,
536536
case Triple::IOS:
537537
case Triple::TvOS:
538538
case Triple::WatchOS:
539+
case Triple::XROS:
539540
TLI.setUnavailable(LibFunc_exp10l);
540541
if (!T.isWatchOS() &&
541542
(T.isOSVersionLT(7, 0) || (T.isOSVersionLT(9, 0) && T.isX86()))) {
@@ -571,6 +572,7 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T,
571572
case Triple::IOS:
572573
case Triple::TvOS:
573574
case Triple::WatchOS:
575+
case Triple::XROS:
574576
case Triple::FreeBSD:
575577
case Triple::Linux:
576578
break;
@@ -587,6 +589,7 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T,
587589
case Triple::IOS:
588590
case Triple::TvOS:
589591
case Triple::WatchOS:
592+
case Triple::XROS:
590593
case Triple::FreeBSD:
591594
case Triple::Linux:
592595
break;

llvm/lib/MC/MCObjectFileInfo.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ static bool useCompactUnwind(const Triple &T) {
5252
if (T.isSimulatorEnvironment())
5353
return true;
5454

55+
// XROS always has it.
56+
if (T.isXROS())
57+
return true;
58+
5559
return false;
5660
}
5761

llvm/lib/MC/MCParser/DarwinAsmParser.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -1154,13 +1154,15 @@ static Triple::OSType getOSTypeFromPlatform(MachO::PlatformType Type) {
11541154
case MachO::PLATFORM_IOS: return Triple::IOS;
11551155
case MachO::PLATFORM_TVOS: return Triple::TvOS;
11561156
case MachO::PLATFORM_WATCHOS: return Triple::WatchOS;
1157+
case MachO::PLATFORM_XROS: return Triple::XROS;
11571158
case MachO::PLATFORM_BRIDGEOS: /* silence warning */ break;
11581159
case MachO::PLATFORM_DRIVERKIT:
11591160
return Triple::DriverKit;
11601161
case MachO::PLATFORM_MACCATALYST: return Triple::IOS;
11611162
case MachO::PLATFORM_IOSSIMULATOR: /* silence warning */ break;
11621163
case MachO::PLATFORM_TVOSSIMULATOR: /* silence warning */ break;
11631164
case MachO::PLATFORM_WATCHOSSIMULATOR: /* silence warning */ break;
1165+
case MachO::PLATFORM_XROS_SIMULATOR: /* silence warning */ break;
11641166
}
11651167
llvm_unreachable("Invalid mach-o platform type");
11661168
}

llvm/lib/MC/MCStreamer.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -1316,6 +1316,9 @@ static VersionTuple getMachoBuildVersionSupportedOS(const Triple &Target) {
13161316
case Triple::DriverKit:
13171317
// DriverKit always uses the build version load command.
13181318
return VersionTuple();
1319+
case Triple::XROS:
1320+
// XROS always uses the build version load command.
1321+
return VersionTuple();
13191322
default:
13201323
break;
13211324
}
@@ -1342,6 +1345,9 @@ getMachoBuildVersionPlatformType(const Triple &Target) {
13421345
: MachO::PLATFORM_WATCHOS;
13431346
case Triple::DriverKit:
13441347
return MachO::PLATFORM_DRIVERKIT;
1348+
case Triple::XROS:
1349+
return Target.isSimulatorEnvironment() ? MachO::PLATFORM_XROS_SIMULATOR
1350+
: MachO::PLATFORM_XROS;
13451351
default:
13461352
break;
13471353
}
@@ -1374,6 +1380,9 @@ void MCStreamer::emitVersionForTarget(
13741380
case Triple::DriverKit:
13751381
Version = Target.getDriverKitVersion();
13761382
break;
1383+
case Triple::XROS:
1384+
Version = Target.getOSVersion();
1385+
break;
13771386
default:
13781387
llvm_unreachable("unexpected OS type");
13791388
}

llvm/lib/TargetParser/ARMTargetParser.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,7 @@ StringRef ARM::getARMCPUForArch(const llvm::Triple &Triple, StringRef MArch) {
555555
case llvm::Triple::TvOS:
556556
case llvm::Triple::WatchOS:
557557
case llvm::Triple::DriverKit:
558+
case llvm::Triple::XROS:
558559
if (MArch == "v7k")
559560
return "cortex-a7";
560561
break;

llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -2045,6 +2045,8 @@ bool ModuleAddressSanitizer::ShouldUseMachOGlobalsSection() const {
20452045
return true;
20462046
if (TargetTriple.isDriverKit())
20472047
return true;
2048+
if (TargetTriple.isXROS())
2049+
return true;
20482050

20492051
return false;
20502052
}

llvm/test/MC/MachO/AArch64/arm-darwin-version-min-load-command.s

+19
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
// RUN: llvm-mc -triple arm64e-apple-driverkit19.0 %s -filetype=obj -o - | llvm-objdump --macho --private-headers - | FileCheck %s --check-prefix=CHECK-DRIVERKIT-ARM64
2323
// RUN: llvm-mc -triple arm64-apple-driverkit20.1 %s -filetype=obj -o - | llvm-objdump --macho --private-headers - | FileCheck %s --check-prefix=CHECK-DRIVERKIT-ARM64_1
2424

25+
// RUN: llvm-mc -triple arm64-apple-xros1 %s -filetype=obj -o - | llvm-objdump --macho --private-headers - | FileCheck --check-prefix=CHECK-XROS-ARM64 %s
26+
// RUN: llvm-mc -triple arm64-apple-xros1-simulator %s -filetype=obj -o - | llvm-objdump --macho --private-headers - | FileCheck --check-prefix=CHECK-XROS-SIM %s
27+
2528
// CHECK-BUILD-IOS-ARM64E: cmd LC_BUILD_VERSION
2629
// CHECK-BUILD-IOS-ARM64E-NEXT: cmdsize 24
2730
// CHECK-BUILD-IOS-ARM64E-NEXT: platform ios
@@ -38,6 +41,14 @@
3841
// CHECK-BUILD-IOS-ARM64E3-NEXT: ntools 0
3942
// CHECK-BUILD-IOS-ARM64E3-NOT: LC_VERSION_MIN
4043

44+
// CHECK-XROS-ARM64: cmd LC_BUILD_VERSION
45+
// CHECK-XROS-ARM64-NEXT: cmdsize 24
46+
// CHECK-XROS-ARM64-NEXT: platform xros
47+
// CHECK-XROS-ARM64-NEXT: sdk n/a
48+
// CHECK-XROS-ARM64-NEXT: minos 1.0
49+
// CHECK-XROS-ARM64-NEXT: ntools 0
50+
// CHECK-XROS-ARM64-NOT: LC_VERSION_MIN
51+
4152
// CHECK-BUILD-IOSSIM2: cmd LC_BUILD_VERSION
4253
// CHECK-BUILD-IOSSIM2-NEXT: cmdsize 24
4354
// CHECK-BUILD-IOSSIM2-NEXT: platform iossim
@@ -70,6 +81,14 @@
7081
// CHECK-BUILD-WATCHOSSIM2-NEXT: ntools 0
7182
// CHECK-BUILD-WATCHOSSIM2-NOT: LC_VERSION_MIN
7283

84+
// CHECK-XROS-SIM: cmd LC_BUILD_VERSION
85+
// CHECK-XROS-SIM-NEXT: cmdsize 24
86+
// CHECK-XROS-SIM-NEXT: platform xrsimulator
87+
// CHECK-XROS-SIM-NEXT: sdk n/a
88+
// CHECK-XROS-SIM-NEXT: minos 1.0
89+
// CHECK-XROS-SIM-NEXT: ntools 0
90+
// CHECK-XROS-SIM-NOT: LC_VERSION_MIN
91+
7392
// CHECK-BUILD-MACOS-ARM64: cmd LC_BUILD_VERSION
7493
// CHECK-BUILD-MACOS-ARM64-NEXT: cmdsize 24
7594
// CHECK-BUILD-MACOS-ARM64-NEXT: platform macos

llvm/test/MC/MachO/ARM/build-version-sdk-version.s

+3
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,6 @@
1111

1212
.build_version watchos,10,11 sdk_version 10,11
1313
// CHECK: .build_version watchos, 10, 11 sdk_version 10, 11
14+
15+
.build_version xros,1, 0 sdk_version 1,0
16+
// CHECK: .build_version xros, 1, 0 sdk_version 1, 0

llvm/test/MC/MachO/ARM/build-version.s

+3
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,6 @@
1717

1818
.build_version watchos,10,11
1919
// CHECK: .build_version watchos, 10, 11
20+
21+
.build_version xros,1, 0
22+
// CHECK: .build_version xros, 1, 0

llvm/unittests/TextAPI/TextStubV4Tests.cpp

+29
Original file line numberDiff line numberDiff line change
@@ -735,6 +735,35 @@ TEST(TBDv4, Target_i386_driverkit) {
735735
stripWhitespace(Buffer.c_str()));
736736
}
737737

738+
TEST(TBDv4, Target_arm64_xros) {
739+
static const char TBDv4ArchArm64e[] =
740+
"--- !tapi-tbd\n"
741+
"tbd-version: 4\n"
742+
"targets: [ arm64e-xros, arm64e-xros-simulator ]\n"
743+
"install-name: Test.dylib\n"
744+
"...\n";
745+
746+
auto Result =
747+
TextAPIReader::get(MemoryBufferRef(TBDv4ArchArm64e, "Test.tbd"));
748+
EXPECT_TRUE(!!Result);
749+
auto File = std::move(Result.get());
750+
EXPECT_EQ(FileType::TBD_V4, File->getFileType());
751+
PlatformSet ExpectedSet;
752+
ExpectedSet.insert(PLATFORM_XROS);
753+
ExpectedSet.insert(PLATFORM_XROS_SIMULATOR);
754+
EXPECT_EQ(File->getPlatforms().size(), 2U);
755+
for (auto Platform : File->getPlatforms())
756+
EXPECT_EQ(ExpectedSet.count(Platform), 1U);
757+
758+
EXPECT_EQ(ArchitectureSet(AK_arm64e), File->getArchitectures());
759+
760+
SmallString<4096> Buffer;
761+
raw_svector_ostream OS(Buffer);
762+
auto WriteResult = TextAPIWriter::writeToStream(OS, *File);
763+
EXPECT_TRUE(!WriteResult);
764+
EXPECT_EQ(stripWhitespace(TBDv4ArchArm64e), stripWhitespace(Buffer.c_str()));
765+
}
766+
738767
TEST(TBDv4, Swift_1) {
739768
static const char TBDv4SwiftVersion1[] = "--- !tapi-tbd\n"
740769
"tbd-version: 4\n"

0 commit comments

Comments
 (0)