summaryrefslogtreecommitdiff
path: root/llvm/lib/MC/MachObjectWriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/MC/MachObjectWriter.cpp')
-rw-r--r--llvm/lib/MC/MachObjectWriter.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/llvm/lib/MC/MachObjectWriter.cpp b/llvm/lib/MC/MachObjectWriter.cpp
index 8596f457574a..b6180fbc0370 100644
--- a/llvm/lib/MC/MachObjectWriter.cpp
+++ b/llvm/lib/MC/MachObjectWriter.cpp
@@ -191,7 +191,18 @@ void MachObjectWriter::writeHeader(MachO::HeaderFileType Type,
W.write<uint32_t>(is64Bit() ? MachO::MH_MAGIC_64 : MachO::MH_MAGIC);
W.write<uint32_t>(TargetObjectWriter->getCPUType());
- W.write<uint32_t>(TargetObjectWriter->getCPUSubtype());
+
+ uint32_t Cpusubtype = TargetObjectWriter->getCPUSubtype();
+
+ // Promote arm64e subtypes to always be ptrauth-ABI-versioned, at version 0.
+ // We never need to emit unversioned binaries.
+ // And we don't support arbitrary ABI versions (or the kernel flag) yet.
+ if (TargetObjectWriter->getCPUType() == MachO::CPU_TYPE_ARM64 &&
+ Cpusubtype == MachO::CPU_SUBTYPE_ARM64E)
+ Cpusubtype = MachO::CPU_SUBTYPE_ARM64E_WITH_PTRAUTH_VERSION(
+ /*PtrAuthABIVersion=*/0, /*PtrAuthKernelABIVersion=*/false);
+
+ W.write<uint32_t>(Cpusubtype);
W.write<uint32_t>(Type);
W.write<uint32_t>(NumLoadCommands);