diff options
Diffstat (limited to 'llvm/lib/MC/MachObjectWriter.cpp')
| -rw-r--r-- | llvm/lib/MC/MachObjectWriter.cpp | 13 |
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); |
