Skip to content

Commit 735adbf

Browse files
authored
[llvm] Teach MachO about XROS (llvm#78373)
Add support for XROS to encode in Mach-O file formats.
1 parent c99da46 commit 735adbf

File tree

10 files changed

+74
-1
lines changed

10 files changed

+74
-1
lines changed

llvm/lib/Analysis/TargetLibraryInfo.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,7 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T,
546546
case Triple::IOS:
547547
case Triple::TvOS:
548548
case Triple::WatchOS:
549+
case Triple::XROS:
549550
TLI.setUnavailable(LibFunc_exp10l);
550551
if (!T.isWatchOS() &&
551552
(T.isOSVersionLT(7, 0) || (T.isOSVersionLT(9, 0) && T.isX86()))) {
@@ -581,6 +582,7 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T,
581582
case Triple::IOS:
582583
case Triple::TvOS:
583584
case Triple::WatchOS:
585+
case Triple::XROS:
584586
case Triple::FreeBSD:
585587
case Triple::Linux:
586588
break;
@@ -597,6 +599,7 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T,
597599
case Triple::IOS:
598600
case Triple::TvOS:
599601
case Triple::WatchOS:
602+
case Triple::XROS:
600603
case Triple::FreeBSD:
601604
case Triple::Linux:
602605
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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1147,14 +1147,14 @@ static Triple::OSType getOSTypeFromPlatform(MachO::PlatformType Type) {
11471147
case MachO::PLATFORM_IOS: return Triple::IOS;
11481148
case MachO::PLATFORM_TVOS: return Triple::TvOS;
11491149
case MachO::PLATFORM_WATCHOS: return Triple::WatchOS;
1150+
case MachO::PLATFORM_XROS: return Triple::XROS;
11501151
case MachO::PLATFORM_BRIDGEOS: /* silence warning */ break;
11511152
case MachO::PLATFORM_DRIVERKIT:
11521153
return Triple::DriverKit;
11531154
case MachO::PLATFORM_MACCATALYST: return Triple::IOS;
11541155
case MachO::PLATFORM_IOSSIMULATOR: /* silence warning */ break;
11551156
case MachO::PLATFORM_TVOSSIMULATOR: /* silence warning */ break;
11561157
case MachO::PLATFORM_WATCHOSSIMULATOR: /* silence warning */ break;
1157-
case MachO::PLATFORM_XROS: /* silence warning */ break;
11581158
case MachO::PLATFORM_XROS_SIMULATOR: /* silence warning */ break;
11591159
}
11601160
llvm_unreachable("Invalid mach-o platform type");

llvm/lib/MC/MCStreamer.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -1313,6 +1313,9 @@ static VersionTuple getMachoBuildVersionSupportedOS(const Triple &Target) {
13131313
case Triple::DriverKit:
13141314
// DriverKit always uses the build version load command.
13151315
return VersionTuple();
1316+
case Triple::XROS:
1317+
// XROS always uses the build version load command.
1318+
return VersionTuple();
13161319
default:
13171320
break;
13181321
}
@@ -1339,6 +1342,9 @@ getMachoBuildVersionPlatformType(const Triple &Target) {
13391342
: MachO::PLATFORM_WATCHOS;
13401343
case Triple::DriverKit:
13411344
return MachO::PLATFORM_DRIVERKIT;
1345+
case Triple::XROS:
1346+
return Target.isSimulatorEnvironment() ? MachO::PLATFORM_XROS_SIMULATOR
1347+
: MachO::PLATFORM_XROS;
13421348
default:
13431349
break;
13441350
}
@@ -1371,6 +1377,9 @@ void MCStreamer::emitVersionForTarget(
13711377
case Triple::DriverKit:
13721378
Version = Target.getDriverKitVersion();
13731379
break;
1380+
case Triple::XROS:
1381+
Version = Target.getOSVersion();
1382+
break;
13741383
default:
13751384
llvm_unreachable("unexpected OS type");
13761385
}

llvm/lib/TargetParser/ARMTargetParser.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,7 @@ StringRef ARM::getARMCPUForArch(const llvm::Triple &Triple, StringRef MArch) {
596596
case llvm::Triple::TvOS:
597597
case llvm::Triple::WatchOS:
598598
case llvm::Triple::DriverKit:
599+
case llvm::Triple::XROS:
599600
if (MArch == "v7k")
600601
return "cortex-a7";
601602
break;

llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -2078,6 +2078,8 @@ bool ModuleAddressSanitizer::ShouldUseMachOGlobalsSection() const {
20782078
return true;
20792079
if (TargetTriple.isDriverKit())
20802080
return true;
2081+
if (TargetTriple.isXROS())
2082+
return true;
20812083

20822084
return false;
20832085
}

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
@@ -751,6 +751,35 @@ TEST(TBDv4, Target_i386_driverkit) {
751751
stripWhitespace(Buffer.c_str()));
752752
}
753753

754+
TEST(TBDv4, Target_arm64_xros) {
755+
static const char TBDv4ArchArm64e[] =
756+
"--- !tapi-tbd\n"
757+
"tbd-version: 4\n"
758+
"targets: [ arm64e-xros, arm64e-xros-simulator ]\n"
759+
"install-name: Test.dylib\n"
760+
"...\n";
761+
762+
auto Result =
763+
TextAPIReader::get(MemoryBufferRef(TBDv4ArchArm64e, "Test.tbd"));
764+
EXPECT_TRUE(!!Result);
765+
auto File = std::move(Result.get());
766+
EXPECT_EQ(FileType::TBD_V4, File->getFileType());
767+
PlatformSet ExpectedSet;
768+
ExpectedSet.insert(PLATFORM_XROS);
769+
ExpectedSet.insert(PLATFORM_XROS_SIMULATOR);
770+
EXPECT_EQ(File->getPlatforms().size(), 2U);
771+
for (auto Platform : File->getPlatforms())
772+
EXPECT_EQ(ExpectedSet.count(Platform), 1U);
773+
774+
EXPECT_EQ(ArchitectureSet(AK_arm64e), File->getArchitectures());
775+
776+
SmallString<4096> Buffer;
777+
raw_svector_ostream OS(Buffer);
778+
auto WriteResult = TextAPIWriter::writeToStream(OS, *File);
779+
EXPECT_TRUE(!WriteResult);
780+
EXPECT_EQ(stripWhitespace(TBDv4ArchArm64e), stripWhitespace(Buffer.c_str()));
781+
}
782+
754783
TEST(TBDv4, Swift_1) {
755784
static const char TBDv4SwiftVersion1[] = "--- !tapi-tbd\n"
756785
"tbd-version: 4\n"

0 commit comments

Comments
 (0)