-
Notifications
You must be signed in to change notification settings - Fork 13.6k
[PAC][CodeGen][ELF][AArch64] Support signed GOT with tiny code model #114525
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,182 @@ | ||
; RUN: llc -verify-machineinstrs -mtriple=aarch64 -mattr=+pauth -mattr=+fpac -code-model=tiny \ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Perhaps combine pic and static .ll tests and just use update_llc_test_checks.py There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
While we can do this, I'm not sure if it would give that much value: RUN lines are different (
I was unable to make update_llc_test_checks.py produce nice output which shows that there are common CHECK lines and different TRAP and NOTRAP lines for Please let me know if I miss smth and update_llc_test_checks.py is capable of generating such outputs (and I'm just missing smth) |
||
; RUN: -relocation-model=pic < %s | FileCheck --check-prefixes=CHECK,NOTRAP %s | ||
; RUN: llc -verify-machineinstrs -mtriple=aarch64 -mattr=+pauth -code-model=tiny \ | ||
; RUN: -relocation-model=pic < %s | FileCheck --check-prefixes=CHECK,TRAP %s | ||
|
||
; RUN: llc -verify-machineinstrs -mtriple=aarch64 -mattr=+pauth -mattr=+fpac -code-model=tiny \ | ||
; RUN: -relocation-model=pic -fast-isel < %s | FileCheck --check-prefixes=CHECK,NOTRAP %s | ||
; RUN: llc -verify-machineinstrs -mtriple=aarch64 -mattr=+pauth -code-model=tiny \ | ||
; RUN: -relocation-model=pic -fast-isel < %s | FileCheck --check-prefixes=CHECK,TRAP %s | ||
|
||
; RUN: llc -verify-machineinstrs -mtriple=aarch64 -mattr=+pauth -mattr=+fpac -code-model=tiny \ | ||
; RUN: -relocation-model=pic -global-isel -global-isel-abort=1 < %s | FileCheck --check-prefixes=CHECK,NOTRAP %s | ||
; RUN: llc -verify-machineinstrs -mtriple=aarch64 -mattr=+pauth -code-model=tiny \ | ||
; RUN: -relocation-model=pic -global-isel -global-isel-abort=1 < %s | FileCheck --check-prefixes=CHECK,TRAP %s | ||
|
||
; Note: fast-isel tests here will fall back to isel | ||
|
||
@src = external local_unnamed_addr global [65536 x i8], align 1 | ||
@dst = external global [65536 x i8], align 1 | ||
@ptr = external local_unnamed_addr global ptr, align 8 | ||
|
||
define dso_preemptable void @foo1() { | ||
; CHECK-LABEL: foo1: | ||
; CHECK: // %bb.0: // %entry | ||
; CHECK-NEXT: adr x17, :got_auth:src | ||
; NOTRAP-NEXT: ldr x8, [x17] | ||
; NOTRAP-NEXT: autda x8, x17 | ||
; TRAP-NEXT: ldr x16, [x17] | ||
; TRAP-NEXT: autda x16, x17 | ||
; TRAP-NEXT: mov x17, x16 | ||
; TRAP-NEXT: xpacd x17 | ||
; TRAP-NEXT: cmp x16, x17 | ||
; TRAP-NEXT: b.eq .Lauth_success_0 | ||
; TRAP-NEXT: brk #0xc472 | ||
; TRAP-NEXT: .Lauth_success_0: | ||
; TRAP-NEXT: mov x8, x16 | ||
; CHECK-NEXT: ldrb w8, [x8] | ||
; CHECK-NEXT: adr x17, :got_auth:dst | ||
; NOTRAP-NEXT: ldr x9, [x17] | ||
; NOTRAP-NEXT: autda x9, x17 | ||
; TRAP-NEXT: ldr x16, [x17] | ||
; TRAP-NEXT: autda x16, x17 | ||
; TRAP-NEXT: mov x17, x16 | ||
; TRAP-NEXT: xpacd x17 | ||
; TRAP-NEXT: cmp x16, x17 | ||
; TRAP-NEXT: b.eq .Lauth_success_1 | ||
; TRAP-NEXT: brk #0xc472 | ||
; TRAP-NEXT: .Lauth_success_1: | ||
; TRAP-NEXT: mov x9, x16 | ||
; CHECK-NEXT: strb w8, [x9] | ||
; CHECK-NEXT: ret | ||
|
||
entry: | ||
%0 = load i8, ptr @src, align 1 | ||
store i8 %0, ptr @dst, align 1 | ||
ret void | ||
} | ||
|
||
define dso_preemptable void @foo2() { | ||
; CHECK-LABEL: foo2: | ||
; CHECK: // %bb.0: // %entry | ||
; CHECK-NEXT: adr x17, :got_auth:ptr | ||
; NOTRAP-NEXT: ldr x8, [x17] | ||
; NOTRAP-NEXT: autda x8, x17 | ||
; TRAP-NEXT: ldr x16, [x17] | ||
; TRAP-NEXT: autda x16, x17 | ||
; TRAP-NEXT: mov x17, x16 | ||
; TRAP-NEXT: xpacd x17 | ||
; TRAP-NEXT: cmp x16, x17 | ||
; TRAP-NEXT: b.eq .Lauth_success_2 | ||
; TRAP-NEXT: brk #0xc472 | ||
; TRAP-NEXT: .Lauth_success_2: | ||
; TRAP-NEXT: mov x8, x16 | ||
; CHECK-NEXT: adr x17, :got_auth:dst | ||
; NOTRAP-NEXT: ldr x9, [x17] | ||
; NOTRAP-NEXT: autda x9, x17 | ||
; TRAP-NEXT: ldr x16, [x17] | ||
; TRAP-NEXT: autda x16, x17 | ||
; TRAP-NEXT: mov x17, x16 | ||
; TRAP-NEXT: xpacd x17 | ||
; TRAP-NEXT: cmp x16, x17 | ||
; TRAP-NEXT: b.eq .Lauth_success_3 | ||
; TRAP-NEXT: brk #0xc472 | ||
; TRAP-NEXT: .Lauth_success_3: | ||
; TRAP-NEXT: mov x9, x16 | ||
; CHECK-NEXT: str x9, [x8] | ||
; CHECK-NEXT: ret | ||
|
||
entry: | ||
store ptr @dst, ptr @ptr, align 8 | ||
ret void | ||
} | ||
|
||
define dso_preemptable void @foo3() { | ||
; CHECK-LABEL: foo3: | ||
; CHECK: // %bb.0: // %entry | ||
; CHECK-NEXT: adr x17, :got_auth:src | ||
; NOTRAP-NEXT: ldr x8, [x17] | ||
; NOTRAP-NEXT: autda x8, x17 | ||
; TRAP-NEXT: ldr x16, [x17] | ||
; TRAP-NEXT: autda x16, x17 | ||
; TRAP-NEXT: mov x17, x16 | ||
; TRAP-NEXT: xpacd x17 | ||
; TRAP-NEXT: cmp x16, x17 | ||
; TRAP-NEXT: b.eq .Lauth_success_4 | ||
; TRAP-NEXT: brk #0xc472 | ||
; TRAP-NEXT: .Lauth_success_4: | ||
; TRAP-NEXT: mov x8, x16 | ||
; CHECK-NEXT: ldrb w8, [x8] | ||
; CHECK-NEXT: adr x17, :got_auth:ptr | ||
; NOTRAP-NEXT: ldr x9, [x17] | ||
; NOTRAP-NEXT: autda x9, x17 | ||
; TRAP-NEXT: ldr x16, [x17] | ||
; TRAP-NEXT: autda x16, x17 | ||
; TRAP-NEXT: mov x17, x16 | ||
; TRAP-NEXT: xpacd x17 | ||
; TRAP-NEXT: cmp x16, x17 | ||
; TRAP-NEXT: b.eq .Lauth_success_5 | ||
; TRAP-NEXT: brk #0xc472 | ||
; TRAP-NEXT: .Lauth_success_5: | ||
; TRAP-NEXT: mov x9, x16 | ||
; CHECK-NEXT: ldr x9, [x9] | ||
; CHECK-NEXT: strb w8, [x9] | ||
; CHECK-NEXT: ret | ||
|
||
entry: | ||
%0 = load i8, ptr @src, align 1 | ||
%1 = load ptr, ptr @ptr, align 8 | ||
store i8 %0, ptr %1, align 1 | ||
ret void | ||
} | ||
|
||
@lsrc = internal global i8 0, align 4 | ||
@ldst = internal global i8 0, align 4 | ||
@lptr = internal global ptr null, align 8 | ||
|
||
declare void @func(...) | ||
|
||
define dso_preemptable ptr @externfuncaddr() { | ||
; CHECK-LABEL: externfuncaddr: | ||
; CHECK: // %bb.0: // %entry | ||
; CHECK-NEXT: adr x17, :got_auth:func | ||
; NOTRAP-NEXT: ldr x0, [x17] | ||
; NOTRAP-NEXT: autia x0, x17 | ||
; TRAP-NEXT: ldr x16, [x17] | ||
; TRAP-NEXT: autia x16, x17 | ||
; TRAP-NEXT: mov x17, x16 | ||
; TRAP-NEXT: xpaci x17 | ||
; TRAP-NEXT: cmp x16, x17 | ||
; TRAP-NEXT: b.eq .Lauth_success_6 | ||
; TRAP-NEXT: brk #0xc470 | ||
; TRAP-NEXT: .Lauth_success_6: | ||
; TRAP-NEXT: mov x0, x16 | ||
; CHECK-NEXT: ret | ||
|
||
entry: | ||
ret ptr @func | ||
} | ||
|
||
define dso_preemptable ptr @localfuncaddr() { | ||
; CHECK-LABEL: localfuncaddr: | ||
; CHECK: // %bb.0: // %entry | ||
; CHECK-NEXT: adr x17, :got_auth:externfuncaddr | ||
; NOTRAP-NEXT: ldr x0, [x17] | ||
; NOTRAP-NEXT: autia x0, x17 | ||
; TRAP-NEXT: ldr x16, [x17] | ||
; TRAP-NEXT: autia x16, x17 | ||
; TRAP-NEXT: mov x17, x16 | ||
; TRAP-NEXT: xpaci x17 | ||
; TRAP-NEXT: cmp x16, x17 | ||
; TRAP-NEXT: b.eq .Lauth_success_7 | ||
; TRAP-NEXT: brk #0xc470 | ||
; TRAP-NEXT: .Lauth_success_7: | ||
; TRAP-NEXT: mov x0, x16 | ||
; CHECK-NEXT: ret | ||
|
||
entry: | ||
ret ptr @externfuncaddr | ||
} | ||
|
||
!llvm.module.flags = !{!0} | ||
!0 = !{i32 8, !"ptrauth-elf-got", i32 1} |
Uh oh!
There was an error while loading. Please reload this page.