arm64e-hack.patch (1861B)
1 Add hackish support for arm64e to LLD 2 3 The current lld output is known as arm64e.old. This hack adds the right flag to 4 make it appear as arm64e. 5 6 An upstreamable solution would be more involved. 7 8 diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp 9 index 14c111ce9685..45fa7c59c420 100644 10 --- a/lld/MachO/Driver.cpp 11 +++ b/lld/MachO/Driver.cpp 12 @@ -773,8 +773,13 @@ static TargetInfo *createTargetInfo(InputArgList &args) { 13 switch (cpuType) { 14 case CPU_TYPE_X86_64: 15 return createX86_64TargetInfo(); 16 - case CPU_TYPE_ARM64: 17 - return createARM64TargetInfo(); 18 + case CPU_TYPE_ARM64: { 19 + auto target = createARM64TargetInfo(); 20 + if (cpuSubtype == CPU_SUBTYPE_ARM64E) { 21 + target->cpuSubtype = CPU_SUBTYPE_ARM64E | CPU_SUBTYPE_PTRAUTH_ABI; 22 + } 23 + return target; 24 + } 25 case CPU_TYPE_ARM64_32: 26 return createARM64_32TargetInfo(); 27 default: 28 diff --git a/lldb/include/lldb/Host/SafeMachO.h b/lldb/include/lldb/Host/SafeMachO.h 29 index 0540383b8c52..a7650f760305 100644 30 --- a/lldb/include/lldb/Host/SafeMachO.h 31 +++ b/lldb/include/lldb/Host/SafeMachO.h 32 @@ -115,6 +115,8 @@ 33 #undef CPU_SUBTYPE_MC980000_ALL 34 #undef CPU_SUBTYPE_MC98601 35 36 +#undef CPU_SUBTYPE_PTRAUTH_ABI 37 + 38 #undef VM_PROT_READ 39 #undef VM_PROT_WRITE 40 #undef VM_PROT_EXECUTE 41 diff --git a/llvm/include/llvm/BinaryFormat/MachO.h b/llvm/include/llvm/BinaryFormat/MachO.h 42 index bef70f869520..7dfe5d031381 100644 43 --- a/llvm/include/llvm/BinaryFormat/MachO.h 44 +++ b/llvm/include/llvm/BinaryFormat/MachO.h 45 @@ -1578,6 +1578,7 @@ enum : uint32_t { 46 // Capability bits used in the definition of cpusubtype. 47 CPU_SUBTYPE_MASK = 0xff000000, // Mask for architecture bits 48 CPU_SUBTYPE_LIB64 = 0x80000000, // 64 bit libraries 49 + CPU_SUBTYPE_PTRAUTH_ABI = 0x80000000, // pointer authentication with versioned ABI 50 51 // Special CPU subtype constants. 52 CPU_SUBTYPE_MULTIPLE = ~0u