cranelift: Implement TLS on aarch64 Mach-O (Apple Silicon) (#5434)
* Implement TLS on Aarch64 Mach-O * Add aarch64 macho TLS filetest * Address review comments - `Aarch64` instead of `AArch64` in comments - Remove unnecessary guard in tls_value lowering - Remove unnecessary regalloc metadata in emission * Use x1 as temporary register in emission - Instead of passing in a temporary register to use when emitting the TLS code, just use `x1`, as it's already in the clobber set. This also keeps the size of `aarch64::inst::Inst` at 32 bytes. - Update filetest accordingly * Update aarch64 mach-o TLS filetest
This commit is contained in:
@@ -56,12 +56,20 @@ pub enum Reloc {
|
||||
/// Mach-O x86_64 32 bit signed PC relative offset to a `__thread_vars` entry.
|
||||
MachOX86_64Tlv,
|
||||
|
||||
/// AArch64 TLS GD
|
||||
/// Mach-O Aarch64 TLS
|
||||
/// PC-relative distance to the page of the TLVP slot.
|
||||
MachOAarch64TlsAdrPage21,
|
||||
|
||||
/// Mach-O Aarch64 TLS
|
||||
/// Offset within page of TLVP slot.
|
||||
MachOAarch64TlsAdrPageOff12,
|
||||
|
||||
/// Aarch64 TLS GD
|
||||
/// Set an ADRP immediate field to the top 21 bits of the final address. Checks for overflow.
|
||||
/// This is equivalent to `R_AARCH64_TLSGD_ADR_PAGE21` in the [aaelf64](https://github.com/ARM-software/abi-aa/blob/2bcab1e3b22d55170c563c3c7940134089176746/aaelf64/aaelf64.rst#relocations-for-thread-local-storage)
|
||||
Aarch64TlsGdAdrPage21,
|
||||
|
||||
/// AArch64 TLS GD
|
||||
/// Aarch64 TLS GD
|
||||
/// Set the add immediate field to the low 12 bits of the final address. Does not check for overflow.
|
||||
/// This is equivalent to `R_AARCH64_TLSGD_ADD_LO12_NC` in the [aaelf64](https://github.com/ARM-software/abi-aa/blob/2bcab1e3b22d55170c563c3c7940134089176746/aaelf64/aaelf64.rst#relocations-for-thread-local-storage)
|
||||
Aarch64TlsGdAddLo12Nc,
|
||||
@@ -109,6 +117,8 @@ impl fmt::Display for Reloc {
|
||||
|
||||
Self::ElfX86_64TlsGd => write!(f, "ElfX86_64TlsGd"),
|
||||
Self::MachOX86_64Tlv => write!(f, "MachOX86_64Tlv"),
|
||||
Self::MachOAarch64TlsAdrPage21 => write!(f, "MachOAarch64TlsAdrPage21"),
|
||||
Self::MachOAarch64TlsAdrPageOff12 => write!(f, "MachOAarch64TlsAdrPageOff12"),
|
||||
Self::Aarch64TlsGdAdrPage21 => write!(f, "Aarch64TlsGdAdrPage21"),
|
||||
Self::Aarch64TlsGdAddLo12Nc => write!(f, "Aarch64TlsGdAddLo12Nc"),
|
||||
Self::Aarch64AdrGotPage21 => write!(f, "Aarch64AdrGotPage21"),
|
||||
|
||||
Reference in New Issue
Block a user