File: ptrauth-reloc.ll

package info (click to toggle)
llvm-toolchain-19 1%3A19.1.7-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,998,520 kB
  • sloc: cpp: 6,951,680; ansic: 1,486,157; asm: 913,598; python: 232,024; f90: 80,126; objc: 75,281; lisp: 37,276; pascal: 16,990; sh: 10,009; ml: 5,058; perl: 4,724; awk: 3,523; makefile: 3,167; javascript: 2,504; xml: 892; fortran: 664; cs: 573
file content (176 lines) | stat: -rw-r--r-- 6,566 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
; RUN: rm -rf %t && split-file %s %t && cd %t

;--- ok.ll

; RUN: llc < ok.ll -mtriple arm64e-apple-darwin \
; RUN:   | FileCheck %s --check-prefix=CHECK-MACHO
; RUN: llc < ok.ll -mtriple aarch64-elf -mattr=+pauth \
; RUN:   | FileCheck %s --check-prefix=CHECK-ELF

; RUN: llc < ok.ll -mtriple arm64e-apple-darwin \
; RUN:   -global-isel -verify-machineinstrs -global-isel-abort=1 \
; RUN:   | FileCheck %s --check-prefix=CHECK-MACHO
; RUN: llc < ok.ll -mtriple aarch64-elf -mattr=+pauth \
; RUN:   -global-isel -verify-machineinstrs -global-isel-abort=1 \
; RUN:   | FileCheck %s --check-prefix=CHECK-ELF

@g = external global i32

@g_weak = extern_weak global i32

@g_strong_def = constant i32 42

; CHECK-ELF-LABEL:     .globl g.ref.ia.0
; CHECK-ELF-NEXT:      .p2align 4
; CHECK-ELF-NEXT:    g.ref.ia.0:
; CHECK-ELF-NEXT:      .xword 5
; CHECK-ELF-NEXT:      .xword g@AUTH(ia,0)
; CHECK-ELF-NEXT:      .xword 6

; CHECK-MACHO-LABEL:   .section __DATA,__const
; CHECK-MACHO-NEXT:    .globl _g.ref.ia.0
; CHECK-MACHO-NEXT:    .p2align 4
; CHECK-MACHO-NEXT:  _g.ref.ia.0:
; CHECK-MACHO-NEXT:    .quad 5
; CHECK-MACHO-NEXT:    .quad _g@AUTH(ia,0)
; CHECK-MACHO-NEXT:    .quad 6

@g.ref.ia.0 = constant { i64, ptr, i64 } { i64 5, ptr ptrauth (ptr @g, i32 0), i64 6 }

; CHECK-ELF-LABEL:     .globl g.ref.ia.42
; CHECK-ELF-NEXT:      .p2align 3
; CHECK-ELF-NEXT:    g.ref.ia.42:
; CHECK-ELF-NEXT:      .xword g@AUTH(ia,42)

; CHECK-MACHO-LABEL:   .globl _g.ref.ia.42
; CHECK-MACHO-NEXT:    .p2align 3
; CHECK-MACHO-NEXT:  _g.ref.ia.42:
; CHECK-MACHO-NEXT:    .quad _g@AUTH(ia,42)

@g.ref.ia.42 = constant ptr ptrauth (ptr @g, i32 0, i64 42)

; CHECK-ELF-LABEL:     .globl g.ref.ib.0
; CHECK-ELF-NEXT:      .p2align 4
; CHECK-ELF-NEXT:    g.ref.ib.0:
; CHECK-ELF-NEXT:      .xword 5
; CHECK-ELF-NEXT:      .xword g@AUTH(ib,0)
; CHECK-ELF-NEXT:      .xword 6

; CHECK-MACHO-LABEL:   .globl _g.ref.ib.0
; CHECK-MACHO-NEXT:    .p2align 4
; CHECK-MACHO-NEXT:  _g.ref.ib.0:
; CHECK-MACHO-NEXT:    .quad 5
; CHECK-MACHO-NEXT:    .quad _g@AUTH(ib,0)
; CHECK-MACHO-NEXT:    .quad 6

@g.ref.ib.0 = constant { i64, ptr, i64 } { i64 5, ptr ptrauth (ptr @g, i32 1, i64 0), i64 6 }

; CHECK-ELF-LABEL:     .globl g.ref.da.42.addr
; CHECK-ELF-NEXT:      .p2align 3
; CHECK-ELF-NEXT:    g.ref.da.42.addr:
; CHECK-ELF-NEXT:      .xword g@AUTH(da,42,addr)

; CHECK-MACHO-LABEL:   .globl _g.ref.da.42.addr
; CHECK-MACHO-NEXT:    .p2align 3
; CHECK-MACHO-NEXT:  _g.ref.da.42.addr:
; CHECK-MACHO-NEXT:    .quad _g@AUTH(da,42,addr)

@g.ref.da.42.addr = constant ptr ptrauth (ptr @g, i32 2, i64 42, ptr @g.ref.da.42.addr)

; CHECK-ELF-LABEL:     .globl g.offset.ref.da.0
; CHECK-ELF-NEXT:      .p2align 3
; CHECK-ELF-NEXT:    g.offset.ref.da.0:
; CHECK-ELF-NEXT:      .xword (g+16)@AUTH(da,0)

; CHECK-MACHO-LABEL:   .globl _g.offset.ref.da.0
; CHECK-MACHO-NEXT:    .p2align 3
; CHECK-MACHO-NEXT:  _g.offset.ref.da.0:
; CHECK-MACHO-NEXT:    .quad (_g+16)@AUTH(da,0)

@g.offset.ref.da.0 = constant ptr ptrauth (i8* getelementptr (i8, ptr @g, i64 16), i32 2)

; CHECK-ELF-LABEL:     .globl g.big_offset.ref.da.0
; CHECK-ELF-NEXT:      .p2align 3
; CHECK-ELF-NEXT:    g.big_offset.ref.da.0:
; CHECK-ELF-NEXT:      .xword (g+2147549185)@AUTH(da,0)

; CHECK-MACHO-LABEL:   .globl _g.big_offset.ref.da.0
; CHECK-MACHO-NEXT:    .p2align 3
; CHECK-MACHO-NEXT:  _g.big_offset.ref.da.0:
; CHECK-MACHO-NEXT:    .quad (_g+2147549185)@AUTH(da,0)

@g.big_offset.ref.da.0 = constant ptr ptrauth (i8* getelementptr (i8, ptr @g, i64 add (i64 2147483648, i64 65537)), i32 2)

; CHECK-ELF-LABEL:     .globl g.weird_ref.da.0
; CHECK-ELF-NEXT:      .p2align 3
; CHECK-ELF-NEXT:    g.weird_ref.da.0:
; CHECK-ELF-NEXT:      .xword (g+16)@AUTH(da,0)

; CHECK-MACHO-LABEL:   .globl _g.weird_ref.da.0
; CHECK-MACHO-NEXT:    .p2align 3
; CHECK-MACHO-NEXT:  _g.weird_ref.da.0:
; CHECK-MACHO-NEXT:    .quad (_g+16)@AUTH(da,0)

@g.weird_ref.da.0 = constant i64 ptrtoint (ptr inttoptr (i64 ptrtoint (ptr ptrauth (i8* getelementptr (i8, ptr @g, i64 16), i32 2) to i64) to ptr) to i64)

; CHECK-ELF-LABEL:     .globl g_weak.ref.ia.42
; CHECK-ELF-NEXT:      .p2align 3
; CHECK-ELF-NEXT:    g_weak.ref.ia.42:
; CHECK-ELF-NEXT:      .xword g_weak@AUTH(ia,42)

; CHECK-MACHO-LABEL:   .globl _g_weak.ref.ia.42
; CHECK-MACHO-NEXT:    .p2align 3
; CHECK-MACHO-NEXT:  _g_weak.ref.ia.42:
; CHECK-MACHO-NEXT:    .quad _g_weak@AUTH(ia,42)

@g_weak.ref.ia.42 = constant ptr ptrauth (ptr @g_weak, i32 0, i64 42)

; CHECK-ELF-LABEL:     .globl g_strong_def.ref.da.0
; CHECK-ELF-NEXT:      .p2align 3
; CHECK-ELF-NEXT:    g_strong_def.ref.da.0:
; CHECK-ELF-NEXT:      .xword g_strong_def@AUTH(da,0)

; CHECK-MACHO-LABEL:   .globl _g_strong_def.ref.da.0
; CHECK-MACHO-NEXT:    .p2align 3
; CHECK-MACHO-NEXT:  _g_strong_def.ref.da.0:
; CHECK-MACHO-NEXT:    .quad _g_strong_def@AUTH(da,0)

@g_strong_def.ref.da.0 = constant ptr ptrauth (ptr @g_strong_def, i32 2)

;--- err-key.ll

; RUN: not --crash llc < err-key.ll -mtriple arm64e-apple-darwin 2>&1 \
; RUN:   | FileCheck %s --check-prefix=CHECK-ERR-KEY
; RUN: not --crash llc < err-key.ll -mtriple aarch64-elf -mattr=+pauth 2>&1 \
; RUN:   | FileCheck %s --check-prefix=CHECK-ERR-KEY

; RUN: not --crash llc < err-key.ll -mtriple arm64e-apple-darwin \
; RUN:   -global-isel -verify-machineinstrs -global-isel-abort=1  2>&1 \
; RUN:   | FileCheck %s --check-prefix=CHECK-ERR-KEY
; RUN: not --crash llc < err-key.ll -mtriple aarch64-elf -mattr=+pauth \
; RUN:   -global-isel -verify-machineinstrs -global-isel-abort=1 2>&1 \
; RUN:   | FileCheck %s --check-prefix=CHECK-ERR-KEY

; CHECK-ERR-KEY: LLVM ERROR: AArch64 PAC Key ID '4' out of range [0, 3]

@g = external global i32
@g.ref.4.0 = constant ptr ptrauth (ptr @g, i32 4, i64 0)

;--- err-disc.ll

; RUN: not --crash llc < err-disc.ll -mtriple arm64e-apple-darwin 2>&1 \
; RUN:   | FileCheck %s --check-prefix=CHECK-ERR-DISC
; RUN: not --crash llc < err-disc.ll -mtriple aarch64-elf -mattr=+pauth 2>&1 \
; RUN:   | FileCheck %s --check-prefix=CHECK-ERR-DISC

; RUN: not --crash llc < err-disc.ll -mtriple arm64e-apple-darwin \
; RUN:   -global-isel -verify-machineinstrs -global-isel-abort=1  2>&1 \
; RUN:   | FileCheck %s --check-prefix=CHECK-ERR-DISC
; RUN: not --crash llc < err-disc.ll -mtriple aarch64-elf -mattr=+pauth \
; RUN:   -global-isel -verify-machineinstrs -global-isel-abort=1 2>&1 \
; RUN:   | FileCheck %s --check-prefix=CHECK-ERR-DISC

; CHECK-ERR-DISC: LLVM ERROR: AArch64 PAC Discriminator '65536' out of range [0, 0xFFFF]

@g = external global i32
@g.ref.ia.65536 = constant ptr ptrauth (ptr @g, i32 0, i64 65536)