[all-commits] [llvm/llvm-project] fd4f95: [AArch64][MachO] Add ptrauth ABI version to arm64e...
Ahmed Bougacha via All-commits
all-commits at lists.llvm.org
Tue Aug 20 11:37:34 PDT 2024
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: fd4f9520a6a08c3dcf15622e3b887d8f3624fc42
https://github.com/llvm/llvm-project/commit/fd4f9520a6a08c3dcf15622e3b887d8f3624fc42
Author: Ahmed Bougacha <ahmed at bougacha.org>
Date: 2024-08-20 (Tue, 20 Aug 2024)
Changed paths:
M llvm/include/llvm/BinaryFormat/MachO.h
M llvm/lib/BinaryFormat/MachO.cpp
M llvm/lib/MC/MachObjectWriter.cpp
M llvm/lib/Object/MachOObjectFile.cpp
M llvm/test/MC/AArch64/arm64e-subtype.s
A llvm/test/tools/llvm-objdump/AArch64/Inputs/fat.macho-arm64e-kernel-ptrauth-abi
A llvm/test/tools/llvm-objdump/AArch64/Inputs/fat.macho-arm64e-ptrauth-abi
A llvm/test/tools/llvm-objdump/AArch64/macho-universal-arm64e-kernel-ptrauth-abi.test
A llvm/test/tools/llvm-objdump/AArch64/macho-universal-arm64e-ptrauth-abi.test
A llvm/test/tools/llvm-objdump/macho-ptrauth-cpusubtype.test
M llvm/tools/dsymutil/MachOUtils.cpp
M llvm/tools/llvm-objdump/MachODump.cpp
M llvm/unittests/BinaryFormat/MachOTest.cpp
Log Message:
-----------
[AArch64][MachO] Add ptrauth ABI version to arm64e cpusubtype. (#104650)
In a mach_header, the cpusubtype is a 32-bit field, but it's split in 2
subfields:
- the low 24 bits containing the cpu subtype proper, (e.g.,
CPU_SUBTYPE_ARM64E 2)
- the high 8 bits containing a capability field used for additional
feature flags.
Notably, it's only the subtype subfield that participates in fat file
slice discrimination: the caps are ignored.
arm64e uses the caps subfield to encode a ptrauth ABI version:
- 0x80 (CPU_SUBTYPE_PTRAUTH_ABI) denotes a versioned binary
- 0x40 denotes a kernel-ABI binary
- 0x00-0x0F holds the ptrauth ABI version
This teaches the basic obj tools to decode that (or ignore it when
unneeded).
It also teaches the MachO writer to default to emitting versioned
binaries, but with a version of 0 (and without the kernel ABI flag).
Modern arm64e requires versioned binaries: a binary with 0x00 caps in
cpusubtype is now rejected by the linker and everything after. We can
live without the sophistication of specifying the version and kernel ABI
for now.
Co-authored-by: Francis Visoiu Mistrih <francisvm at apple.com>
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list