annotate lld/test/ELF/aarch64-relocs.s @ 150:1d019706d866

LLVM10
author anatofuz
date Thu, 13 Feb 2020 15:10:13 +0900
parents
children 0572611fdcc8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 # REQUIRES: aarch64
anatofuz
parents:
diff changeset
2 # RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd %s -o %t
anatofuz
parents:
diff changeset
3 # RUN: echo '.globl zero; zero = 0' | llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd -o %t2.o
anatofuz
parents:
diff changeset
4 # RUN: ld.lld %t %t2.o -o %t2
anatofuz
parents:
diff changeset
5 # RUN: llvm-objdump -d %t2 | FileCheck %s
anatofuz
parents:
diff changeset
6
anatofuz
parents:
diff changeset
7 .section .R_AARCH64_ADR_PREL_LO21,"ax",@progbits
anatofuz
parents:
diff changeset
8 .globl _start
anatofuz
parents:
diff changeset
9 _start:
anatofuz
parents:
diff changeset
10 adr x1,msg
anatofuz
parents:
diff changeset
11 msg: .asciz "Hello, world\n"
anatofuz
parents:
diff changeset
12 msgend:
anatofuz
parents:
diff changeset
13
anatofuz
parents:
diff changeset
14 # CHECK: Disassembly of section .R_AARCH64_ADR_PREL_LO21:
anatofuz
parents:
diff changeset
15 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
16 # CHECK: _start:
anatofuz
parents:
diff changeset
17 # CHECK: 0: 21 00 00 10 adr x1, #4
anatofuz
parents:
diff changeset
18 # CHECK: msg:
anatofuz
parents:
diff changeset
19 # CHECK: 4:
anatofuz
parents:
diff changeset
20 # #4 is the adr immediate value.
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 .section .R_AARCH64_ADR_PREL_PG_H121,"ax",@progbits
anatofuz
parents:
diff changeset
23 adrp x1,mystr
anatofuz
parents:
diff changeset
24 mystr:
anatofuz
parents:
diff changeset
25 .asciz "blah"
anatofuz
parents:
diff changeset
26 .size mystr, 4
anatofuz
parents:
diff changeset
27
anatofuz
parents:
diff changeset
28 # PAGE(S + A) - PAGE(P) = PAGE(210136) - PAGE(0x210132) = 0
anatofuz
parents:
diff changeset
29 #
anatofuz
parents:
diff changeset
30 # CHECK: Disassembly of section .R_AARCH64_ADR_PREL_PG_H121:
anatofuz
parents:
diff changeset
31 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
32 # CHECK-NEXT: $x.2:
anatofuz
parents:
diff changeset
33 # CHECK-NEXT: 210132: 01 00 00 90 adrp x1, #0
anatofuz
parents:
diff changeset
34
anatofuz
parents:
diff changeset
35 .section .R_AARCH64_ADD_ABS_LO12_NC,"ax",@progbits
anatofuz
parents:
diff changeset
36 add x0, x0, :lo12:.L.str
anatofuz
parents:
diff changeset
37 .L.str:
anatofuz
parents:
diff changeset
38 .asciz "blah"
anatofuz
parents:
diff changeset
39 .size mystr, 4
anatofuz
parents:
diff changeset
40
anatofuz
parents:
diff changeset
41 # S = 0x21013b, A = 0x4
anatofuz
parents:
diff changeset
42 # R = (S + A) & 0xFFF = 319
anatofuz
parents:
diff changeset
43 #
anatofuz
parents:
diff changeset
44 # CHECK: Disassembly of section .R_AARCH64_ADD_ABS_LO12_NC:
anatofuz
parents:
diff changeset
45 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
46 # CHECK-NEXT: $x.4:
anatofuz
parents:
diff changeset
47 # CHECK-NEXT: 21013b: 00 fc 04 91 add x0, x0, #319
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 .section .R_AARCH64_LDST64_ABS_LO12_NC,"ax",@progbits
anatofuz
parents:
diff changeset
50 ldr x28, [x27, :lo12:foo]
anatofuz
parents:
diff changeset
51 foo:
anatofuz
parents:
diff changeset
52 .asciz "foo"
anatofuz
parents:
diff changeset
53 .size mystr, 3
anatofuz
parents:
diff changeset
54
anatofuz
parents:
diff changeset
55 # S = 0x210144, A = 0x4
anatofuz
parents:
diff changeset
56 # R = ((S + A) & 0xFFF) << 7 = 0x0000a400
anatofuz
parents:
diff changeset
57 # 0x0000a400 | 0xf940177c = 0xf940a77c
anatofuz
parents:
diff changeset
58 # CHECK: Disassembly of section .R_AARCH64_LDST64_ABS_LO12_NC:
anatofuz
parents:
diff changeset
59 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
60 # CHECK-NEXT: $x.6:
anatofuz
parents:
diff changeset
61 # CHECK-NEXT: 210144: 7c a7 40 f9 ldr x28, [x27, #328]
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 .section .SUB,"ax",@progbits
anatofuz
parents:
diff changeset
64 nop
anatofuz
parents:
diff changeset
65 sub:
anatofuz
parents:
diff changeset
66 nop
anatofuz
parents:
diff changeset
67
anatofuz
parents:
diff changeset
68 # CHECK: Disassembly of section .SUB:
anatofuz
parents:
diff changeset
69 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
70 # CHECK-NEXT: $x.8:
anatofuz
parents:
diff changeset
71 # CHECK-NEXT: 21014c: 1f 20 03 d5 nop
anatofuz
parents:
diff changeset
72 # CHECK: sub:
anatofuz
parents:
diff changeset
73 # CHECK-NEXT: 210150: 1f 20 03 d5 nop
anatofuz
parents:
diff changeset
74
anatofuz
parents:
diff changeset
75 .section .R_AARCH64_CALL26,"ax",@progbits
anatofuz
parents:
diff changeset
76 call26:
anatofuz
parents:
diff changeset
77 bl sub
anatofuz
parents:
diff changeset
78
anatofuz
parents:
diff changeset
79 # S = 0x21014c, A = 0x4, P = 0x210154
anatofuz
parents:
diff changeset
80 # R = S + A - P = -0x4 = 0xfffffffc
anatofuz
parents:
diff changeset
81 # (R & 0x0ffffffc) >> 2 = 0x03ffffff
anatofuz
parents:
diff changeset
82 # 0x94000000 | 0x03ffffff = 0x97ffffff
anatofuz
parents:
diff changeset
83 # CHECK: Disassembly of section .R_AARCH64_CALL26:
anatofuz
parents:
diff changeset
84 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
85 # CHECK-NEXT: call26:
anatofuz
parents:
diff changeset
86 # CHECK-NEXT: 210154: ff ff ff 97 bl #-4
anatofuz
parents:
diff changeset
87
anatofuz
parents:
diff changeset
88 .section .R_AARCH64_JUMP26,"ax",@progbits
anatofuz
parents:
diff changeset
89 jump26:
anatofuz
parents:
diff changeset
90 b sub
anatofuz
parents:
diff changeset
91
anatofuz
parents:
diff changeset
92 # S = 0x21014c, A = 0x4, P = 0x210158
anatofuz
parents:
diff changeset
93 # R = S + A - P = -0x8 = 0xfffffff8
anatofuz
parents:
diff changeset
94 # (R & 0x0ffffffc) >> 2 = 0x03fffffe
anatofuz
parents:
diff changeset
95 # 0x14000000 | 0x03fffffe = 0x17fffffe
anatofuz
parents:
diff changeset
96 # CHECK: Disassembly of section .R_AARCH64_JUMP26:
anatofuz
parents:
diff changeset
97 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
98 # CHECK-NEXT: jump26:
anatofuz
parents:
diff changeset
99 # CHECK-NEXT: 210158: fe ff ff 17 b #-8
anatofuz
parents:
diff changeset
100
anatofuz
parents:
diff changeset
101 .section .R_AARCH64_LDST32_ABS_LO12_NC,"ax",@progbits
anatofuz
parents:
diff changeset
102 ldst32:
anatofuz
parents:
diff changeset
103 ldr s4, [x5, :lo12:foo32]
anatofuz
parents:
diff changeset
104 foo32:
anatofuz
parents:
diff changeset
105 .asciz "foo"
anatofuz
parents:
diff changeset
106 .size mystr, 3
anatofuz
parents:
diff changeset
107
anatofuz
parents:
diff changeset
108 # S = 0x21015c, A = 0x4
anatofuz
parents:
diff changeset
109 # R = ((S + A) & 0xFFC) << 8 = 0x00016000
anatofuz
parents:
diff changeset
110 # 0x00016000 | 0xbd4000a4 = 0xbd4160a4
anatofuz
parents:
diff changeset
111 # CHECK: Disassembly of section .R_AARCH64_LDST32_ABS_LO12_NC:
anatofuz
parents:
diff changeset
112 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
113 # CHECK-NEXT: ldst32:
anatofuz
parents:
diff changeset
114 # CHECK-NEXT: 21015c: a4 60 41 bd ldr s4, [x5, #352]
anatofuz
parents:
diff changeset
115
anatofuz
parents:
diff changeset
116 .section .R_AARCH64_LDST8_ABS_LO12_NC,"ax",@progbits
anatofuz
parents:
diff changeset
117 ldst8:
anatofuz
parents:
diff changeset
118 ldrsb x11, [x13, :lo12:foo8]
anatofuz
parents:
diff changeset
119 foo8:
anatofuz
parents:
diff changeset
120 .asciz "foo"
anatofuz
parents:
diff changeset
121 .size mystr, 3
anatofuz
parents:
diff changeset
122
anatofuz
parents:
diff changeset
123 # S = 0x210164, A = 0x4
anatofuz
parents:
diff changeset
124 # R = ((S + A) & 0xFFF) << 10 = 0x0005a000
anatofuz
parents:
diff changeset
125 # 0x0005a000 | 0x398001ab = 0x3985a1ab
anatofuz
parents:
diff changeset
126 # CHECK: Disassembly of section .R_AARCH64_LDST8_ABS_LO12_NC:
anatofuz
parents:
diff changeset
127 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
128 # CHECK-NEXT: ldst8:
anatofuz
parents:
diff changeset
129 # CHECK-NEXT: 210164: ab a1 85 39 ldrsb x11, [x13, #360]
anatofuz
parents:
diff changeset
130
anatofuz
parents:
diff changeset
131 .section .R_AARCH64_LDST128_ABS_LO12_NC,"ax",@progbits
anatofuz
parents:
diff changeset
132 ldst128:
anatofuz
parents:
diff changeset
133 ldr q20, [x19, #:lo12:foo128]
anatofuz
parents:
diff changeset
134 foo128:
anatofuz
parents:
diff changeset
135 .asciz "foo"
anatofuz
parents:
diff changeset
136 .size mystr, 3
anatofuz
parents:
diff changeset
137
anatofuz
parents:
diff changeset
138 # S = 0x21016c, A = 0x4
anatofuz
parents:
diff changeset
139 # R = ((S + A) & 0xFF8) << 6 = 0x00005c00
anatofuz
parents:
diff changeset
140 # 0x00005c00 | 0x3dc00274 = 0x3dc05e74
anatofuz
parents:
diff changeset
141 # CHECK: Disassembly of section .R_AARCH64_LDST128_ABS_LO12_NC:
anatofuz
parents:
diff changeset
142 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
143 # CHECK: ldst128:
anatofuz
parents:
diff changeset
144 # CHECK: 21016c: 74 5e c0 3d ldr q20, [x19, #368]
anatofuz
parents:
diff changeset
145 #foo128:
anatofuz
parents:
diff changeset
146 # 210170: 66 6f 6f 00 .word
anatofuz
parents:
diff changeset
147
anatofuz
parents:
diff changeset
148 .section .R_AARCH64_LDST16_ABS_LO12_NC,"ax",@progbits
anatofuz
parents:
diff changeset
149 ldst16:
anatofuz
parents:
diff changeset
150 ldr h17, [x19, :lo12:foo16]
anatofuz
parents:
diff changeset
151 ldrh w1, [x19, :lo12:foo16]
anatofuz
parents:
diff changeset
152 ldrh w2, [x19, :lo12:foo16 + 2]
anatofuz
parents:
diff changeset
153 foo16:
anatofuz
parents:
diff changeset
154 .asciz "foo"
anatofuz
parents:
diff changeset
155 .size mystr, 4
anatofuz
parents:
diff changeset
156
anatofuz
parents:
diff changeset
157 # S = 0x210174, A = 0x4
anatofuz
parents:
diff changeset
158 # R = ((S + A) & 0x0FFC) << 9 = 0x2f000
anatofuz
parents:
diff changeset
159 # 0x2f000 | 0x7d400271 = 0x7d430271
anatofuz
parents:
diff changeset
160 # CHECK: Disassembly of section .R_AARCH64_LDST16_ABS_LO12_NC:
anatofuz
parents:
diff changeset
161 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
162 # CHECK-NEXT: ldst16:
anatofuz
parents:
diff changeset
163 # CHECK-NEXT: 210174: 71 02 43 7d ldr h17, [x19, #384]
anatofuz
parents:
diff changeset
164 # CHECK-NEXT: 210178: 61 02 43 79 ldrh w1, [x19, #384]
anatofuz
parents:
diff changeset
165 # CHECK-NEXT: 21017c: 62 06 43 79 ldrh w2, [x19, #386]
anatofuz
parents:
diff changeset
166
anatofuz
parents:
diff changeset
167 .section .R_AARCH64_MOVW_UABS,"ax",@progbits
anatofuz
parents:
diff changeset
168 movz1:
anatofuz
parents:
diff changeset
169 movk x12, #:abs_g0:zero+0xC
anatofuz
parents:
diff changeset
170 movk x12, #:abs_g0_nc:zero+0xF000E000D000C
anatofuz
parents:
diff changeset
171 movk x13, #:abs_g1:zero+0xD000C
anatofuz
parents:
diff changeset
172 movk x13, #:abs_g1_nc:zero+0xF000E000D000C
anatofuz
parents:
diff changeset
173 movk x14, #:abs_g2:zero+0xE000D000C
anatofuz
parents:
diff changeset
174 movk x14, #:abs_g2_nc:zero+0xF000E000D000C
anatofuz
parents:
diff changeset
175 movz x15, #:abs_g3:zero+0xF000E000D000C
anatofuz
parents:
diff changeset
176 movk x16, #:abs_g3:zero+0xF000E000D000C
anatofuz
parents:
diff changeset
177
anatofuz
parents:
diff changeset
178 ## 4222124650659840 == (0xF << 48)
anatofuz
parents:
diff changeset
179 # CHECK: Disassembly of section .R_AARCH64_MOVW_UABS:
anatofuz
parents:
diff changeset
180 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
181 # CHECK-NEXT: movz1:
anatofuz
parents:
diff changeset
182 # CHECK-NEXT: 8c 01 80 f2 movk x12, #12
anatofuz
parents:
diff changeset
183 # CHECK-NEXT: 8c 01 80 f2 movk x12, #12
anatofuz
parents:
diff changeset
184 # CHECK-NEXT: ad 01 a0 f2 movk x13, #13, lsl #16
anatofuz
parents:
diff changeset
185 # CHECK-NEXT: ad 01 a0 f2 movk x13, #13, lsl #16
anatofuz
parents:
diff changeset
186 # CHECK-NEXT: ce 01 c0 f2 movk x14, #14, lsl #32
anatofuz
parents:
diff changeset
187 # CHECK-NEXT: ce 01 c0 f2 movk x14, #14, lsl #32
anatofuz
parents:
diff changeset
188 # CHECK-NEXT: ef 01 e0 d2 mov x15, #4222124650659840
anatofuz
parents:
diff changeset
189 # CHECK-NEXT: f0 01 e0 f2 movk x16, #15, lsl #48
anatofuz
parents:
diff changeset
190
anatofuz
parents:
diff changeset
191 .section .R_AARCH64_MOVW_SABS,"ax",@progbits
anatofuz
parents:
diff changeset
192 movz x1, #:abs_g0_s:zero+1
anatofuz
parents:
diff changeset
193 movz x1, #:abs_g0_s:zero-1
anatofuz
parents:
diff changeset
194 movz x2, #:abs_g1_s:zero+0x20000
anatofuz
parents:
diff changeset
195 movz x2, #:abs_g1_s:zero-0x20000
anatofuz
parents:
diff changeset
196 movz x3, #:abs_g2_s:zero+0x300000000
anatofuz
parents:
diff changeset
197 movz x3, #:abs_g2_s:zero-0x300000000
anatofuz
parents:
diff changeset
198
anatofuz
parents:
diff changeset
199 # CHECK: Disassembly of section .R_AARCH64_MOVW_SABS:
anatofuz
parents:
diff changeset
200 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
201 # CHECK-NEXT: :
anatofuz
parents:
diff changeset
202 # CHECK-NEXT: 21 00 80 d2 mov x1, #1
anatofuz
parents:
diff changeset
203 # CHECK-NEXT: 01 00 80 92 mov x1, #-1
anatofuz
parents:
diff changeset
204 # CHECK-NEXT: 42 00 a0 d2 mov x2, #131072
anatofuz
parents:
diff changeset
205 ## -65537 = 0xfffffffffffeffff
anatofuz
parents:
diff changeset
206 # CHECK-NEXT: 22 00 a0 92 mov x2, #-65537
anatofuz
parents:
diff changeset
207 ## 12884901888 = 0x300000000
anatofuz
parents:
diff changeset
208 # CHECK-NEXT: 63 00 c0 d2 mov x3, #12884901888
anatofuz
parents:
diff changeset
209 ## -8589934593 = #0xfffffffdffffffff
anatofuz
parents:
diff changeset
210 # CHECK-NEXT: 43 00 c0 92 mov x3, #-8589934593
anatofuz
parents:
diff changeset
211
anatofuz
parents:
diff changeset
212 .section .R_AARCH64_MOVW_PREL,"ax",@progbits
anatofuz
parents:
diff changeset
213 movz x1, #:prel_g0:.+1
anatofuz
parents:
diff changeset
214 movz x1, #:prel_g0_nc:.-1
anatofuz
parents:
diff changeset
215 movk x1, #:prel_g0:.+1
anatofuz
parents:
diff changeset
216 movk x1, #:prel_g0_nc:.-1
anatofuz
parents:
diff changeset
217 movz x2, #:prel_g1:.+0x20000
anatofuz
parents:
diff changeset
218 movz x2, #:prel_g1_nc:.-0x20000
anatofuz
parents:
diff changeset
219 movk x2, #:prel_g1:.+0x20000
anatofuz
parents:
diff changeset
220 movk x2, #:prel_g1_nc:.-0x20000
anatofuz
parents:
diff changeset
221 movz x3, #:prel_g2:.+0x300000000
anatofuz
parents:
diff changeset
222 movz x3, #:prel_g2_nc:.-0x300000000
anatofuz
parents:
diff changeset
223 movk x3, #:prel_g2:.+0x300000000
anatofuz
parents:
diff changeset
224 movk x3, #:prel_g2_nc:.-0x300000000
anatofuz
parents:
diff changeset
225 movz x3, #:prel_g2:.+0x300000000
anatofuz
parents:
diff changeset
226 movz x4, #:prel_g3:.+0x4000000000000
anatofuz
parents:
diff changeset
227 movz x4, #:prel_g3:.-0x4000000000000
anatofuz
parents:
diff changeset
228 movk x4, #:prel_g3:.+0x4000000000000
anatofuz
parents:
diff changeset
229 movk x4, #:prel_g3:.-0x4000000000000
anatofuz
parents:
diff changeset
230
anatofuz
parents:
diff changeset
231 # CHECK: Disassembly of section .R_AARCH64_MOVW_PREL:
anatofuz
parents:
diff changeset
232 # CHECK-EMPTY:
anatofuz
parents:
diff changeset
233 # CHECK-NEXT: :
anatofuz
parents:
diff changeset
234 # CHECK-NEXT: 2101bc: 21 00 80 d2 mov x1, #1
anatofuz
parents:
diff changeset
235 # CHECK-NEXT: 2101c0: 01 00 80 92 mov x1, #-1
anatofuz
parents:
diff changeset
236 # CHECK-NEXT: 2101c4: 21 00 80 f2 movk x1, #1
anatofuz
parents:
diff changeset
237 # CHECK-NEXT: 2101c8: e1 ff 9f f2 movk x1, #65535
anatofuz
parents:
diff changeset
238 # CHECK-NEXT: 2101cc: 42 00 a0 d2 mov x2, #131072
anatofuz
parents:
diff changeset
239 ## -65537 = 0xfffffffffffeffff
anatofuz
parents:
diff changeset
240 # CHECK-NEXT: 2101d0: 22 00 a0 92 mov x2, #-65537
anatofuz
parents:
diff changeset
241 # CHECK-NEXT: 2101d4: 42 00 a0 f2 movk x2, #2, lsl #16
anatofuz
parents:
diff changeset
242 # CHECK-NEXT: 2101d8: c2 ff bf f2 movk x2, #65534, lsl #16
anatofuz
parents:
diff changeset
243 ## 12884901888 = 0x300000000
anatofuz
parents:
diff changeset
244 # CHECK-NEXT: 2101dc: 63 00 c0 d2 mov x3, #12884901888
anatofuz
parents:
diff changeset
245 ## -8589934593 = #0xfffffffdffffffff
anatofuz
parents:
diff changeset
246 # CHECK-NEXT: 2101e0: 43 00 c0 92 mov x3, #-8589934593
anatofuz
parents:
diff changeset
247 # CHECK-NEXT: 2101e4: 63 00 c0 f2 movk x3, #3, lsl #32
anatofuz
parents:
diff changeset
248 # CHECK-NEXT: 2101e8: a3 ff df f2 movk x3, #65533, lsl #32
anatofuz
parents:
diff changeset
249 # CHECK-NEXT: 2101ec: 63 00 c0 d2 mov x3, #12884901888
anatofuz
parents:
diff changeset
250 ## 1125899906842624 = 0x4000000000000
anatofuz
parents:
diff changeset
251 # CHECK-NEXT: 2101f0: 84 00 e0 d2 mov x4, #1125899906842624
anatofuz
parents:
diff changeset
252 # CHECK-NEXT: 2101f4: 84 ff ff d2 mov x4, #-1125899906842624
anatofuz
parents:
diff changeset
253 # CHECK-NEXT: 2101f8: 84 00 e0 f2 movk x4, #4, lsl #48
anatofuz
parents:
diff changeset
254 # CHECK-NEXT: 2101fc: 84 ff ff f2 movk x4, #65532, lsl #48