-
Notifications
You must be signed in to change notification settings - Fork 11k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[AArch64][PAC] Emit auth call for Darwin tlv access thunk. (#97658)
With ptrauth-calls, function pointers are supposed to be signed. On Darwin that includes the TLS indirection accessor (`_tlv_get_addr`). We simply sign it with the plain function-pointer schema (IA,0), which lets us do a `blraaz` when calling it. Note that this doesn't have any kind of diversity, even when function pointer diversity is enabled in the frontend. On arm64e this accessor is never signed that way, but the obvious alternative where this (or another backend-generated) function pointer needs to be diversified would need more than the "ptrauth-calls" attribute as it exists today.
- Loading branch information
1 parent
7b135f7
commit ee4661e
Showing
3 changed files
with
54 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 | ||
; RUN: llc -mtriple=arm64e-apple-darwin %s -o - \ | ||
; RUN: -aarch64-enable-collect-loh=0 | FileCheck %s | ||
|
||
; RUN: llc -mtriple=arm64e-apple-darwin %s -o - \ | ||
; RUN: -global-isel -global-isel-abort=1 -verify-machineinstrs \ | ||
; RUN: -aarch64-enable-collect-loh=0 | FileCheck %s | ||
|
||
@var = thread_local global i8 0 | ||
|
||
define i8 @get_var() #0 { | ||
; CHECK-LABEL: get_var: | ||
; CHECK: ; %bb.0: | ||
; CHECK-NEXT: stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill | ||
; CHECK-NEXT: adrp x0, _var@TLVPPAGE | ||
; CHECK-NEXT: ldr x0, [x0, _var@TLVPPAGEOFF] | ||
; CHECK-NEXT: ldr x8, [x0] | ||
; CHECK-NEXT: blraaz x8 | ||
; CHECK-NEXT: ldrb w0, [x0] | ||
; CHECK-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload | ||
; CHECK-NEXT: ret | ||
|
||
%val = load i8, ptr @var, align 1 | ||
ret i8 %val | ||
} | ||
|
||
attributes #0 = { nounwind "ptrauth-calls" } |