blob: 77250a25f3f7c14d55c3e5b6ff088119d215224b [file]
; 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 }