| ; RUN: llc -mtriple aarch64-elf --relocation-model=static -mattr=+pauth < %s | FileCheck %s |
| ; RUN: llc -mtriple aarch64-elf --relocation-model=dynamic-no-pic -mattr=+pauth < %s | FileCheck %s |
| |
| ;; A constant value, use .rodata |
| ; CHECK: .section .rodata,"a",@progbits |
| ; CHECK: .globl Const |
| ; CHECK: Const: |
| ; CHECK: .xword 37 |
| |
| ;; An AUTH reloc is needed, use .data.rel.ro |
| ; CHECK: .section .data.rel.ro,"aw",@progbits |
| ; CHECK: .globl PtrAuthExtern |
| ; CHECK: PtrAuthExtern: |
| ; CHECK: .xword ConstExtern@AUTH(da,0) |
| |
| ; CHECK-NOT: .section |
| ; CHECK: .globl PtrAuth |
| ; CHECK: PtrAuth: |
| ; CHECK: .xword Const@AUTH(da,0) |
| |
| ; CHECK-NOT: .section |
| ; CHECK: .globl PtrAuthExternNested1 |
| ; CHECK: PtrAuthExternNested1: |
| ; CHECK: .xword ConstExtern@AUTH(da,0) |
| |
| ;; The address could be filled statically, use .rodata |
| ; CHECK: .section .rodata,"a",@progbits |
| ; CHECK: .globl PtrAuthExternNested2 |
| ; CHECK: PtrAuthExternNested2: |
| ; CHECK: .xword PtrAuthExtern |
| |
| ;; An AUTH reloc is needed, use .data.rel.ro |
| ; CHECK: .section .data.rel.ro,"aw",@progbits |
| ; CHECK: .globl PtrAuthNested1 |
| ; CHECK: PtrAuthNested1: |
| ; CHECK: .xword Const@AUTH(da,0) |
| |
| ;; The address could be filled statically, use .rodata |
| ; CHECK: .section .rodata,"a",@progbits |
| ; CHECK: .globl PtrAuthNested2 |
| ; CHECK: PtrAuthNested2: |
| ; CHECK: .xword PtrAuth |
| |
| @ConstExtern = external global i64 |
| @Const = constant i64 37 |
| |
| @PtrAuthExtern = constant ptr ptrauth (ptr @ConstExtern, i32 2) |
| @PtrAuth = constant ptr ptrauth (ptr @Const, i32 2) |
| |
| @PtrAuthExternNested1 = constant { ptr } { ptr ptrauth (ptr @ConstExtern, i32 2) } |
| @PtrAuthExternNested2 = constant { ptr } { ptr @PtrAuthExtern } |
| @PtrAuthNested1 = constant { ptr } { ptr ptrauth (ptr @Const, i32 2) } |
| @PtrAuthNested2 = constant { ptr } { ptr @PtrAuth } |