1 // RUN
: llvm-mc
-n
-triple x86_64-apple-darwin9
%s
-filetype
=obj
-o
- | llvm-readobj
-r
--expand-relocs | FileCheck
%s
3 // These examples are taken from
<mach-o
/x86_64
/reloc.h
>.
15 movq _foo@GOTPCREL
(%rip
), %rax
16 pushq _foo@GOTPCREL
(%rip
)
18 movl _foo+
4(%rip
), %eax
19 movb $
0x12, _foo
(%rip
)
20 movl $
0x12345678, _foo
(%rip
)
45 .long _foobar@GOTPCREL+4
48 .section __DWARF,__debug_frame,regular,debug
52 // Make sure local label which overlaps with non-local one is assigned to the
60 addl L2_1
- L2_0
, %eax
68 .section __TEXT,__literal8,8byte_literals
88 cmpq $
0, _foo@GOTPCREL
(%rip
)
90 // CHECK
: Relocations
[
91 // CHECK-NEXT
: Section __data
{
92 // CHECK-NEXT
: Relocation
{
93 // CHECK-NEXT
: Offset
: 0x20
94 // CHECK-NEXT
: PCRel
: 0
95 // CHECK-NEXT
: Length
: 3
96 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
97 // CHECK-NEXT
: Section
: __literal8
99 // CHECK-NEXT
: Relocation
{
100 // CHECK-NEXT
: Offset
: 0x18
101 // CHECK-NEXT
: PCRel
: 0
102 // CHECK-NEXT
: Length
: 3
103 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
104 // CHECK-NEXT
: Symbol
: f6
106 // CHECK-NEXT
: Relocation
{
107 // CHECK-NEXT
: Offset
: 0x10
108 // CHECK-NEXT
: PCRel
: 0
109 // CHECK-NEXT
: Length
: 3
110 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
111 // CHECK-NEXT
: Section
: __literal8
113 // CHECK-NEXT
: Relocation
{
114 // CHECK-NEXT
: Offset
: 0x8
115 // CHECK-NEXT
: PCRel
: 1
116 // CHECK-NEXT
: Length
: 2
117 // CHECK-NEXT
: Type
: X86_64_RELOC_GOT
(4)
118 // CHECK-NEXT
: Symbol
: _foo
120 // CHECK-NEXT
: Relocation
{
121 // CHECK-NEXT
: Offset
: 0x4
122 // CHECK-NEXT
: PCRel
: 1
123 // CHECK-NEXT
: Length
: 2
124 // CHECK-NEXT
: Type
: X86_64_RELOC_GOT
(4)
125 // CHECK-NEXT
: Symbol
: _foobar
128 // CHECK-NEXT
: Section __text
{
129 // CHECK-NEXT
: Relocation
{
130 // CHECK-NEXT
: Offset
: 0xDA
131 // CHECK-NEXT
: PCRel
: 1
132 // CHECK-NEXT
: Length
: 2
133 // CHECK-NEXT
: Type
: X86_64_RELOC_GOT
(4)
134 // CHECK-NEXT
: Symbol
: _foo
136 // CHECK-NEXT
: Relocation
{
137 // CHECK-NEXT
: Offset
: 0xD3
138 // CHECK-NEXT
: PCRel
: 1
139 // CHECK-NEXT
: Length
: 2
140 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED
(1)
141 // CHECK-NEXT
: Section
: __literal8
143 // CHECK-NEXT
: Relocation
{
144 // CHECK-NEXT
: Offset
: 0xCD
145 // CHECK-NEXT
: PCRel
: 1
146 // CHECK-NEXT
: Length
: 2
147 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED
(1)
148 // CHECK-NEXT
: Symbol
: f6
150 // CHECK-NEXT
: Relocation
{
151 // CHECK-NEXT
: Offset
: 0xC7
152 // CHECK-NEXT
: PCRel
: 1
153 // CHECK-NEXT
: Length
: 2
154 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED
(1)
155 // CHECK-NEXT
: Section
: __literal8
157 // CHECK-NEXT
: Relocation
{
158 // CHECK-NEXT
: Offset
: 0xC1
159 // CHECK-NEXT
: PCRel
: 1
160 // CHECK-NEXT
: Length
: 2
161 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED
(1)
162 // CHECK-NEXT
: Section
: __data
164 // CHECK-NEXT
: Relocation
{
165 // CHECK-NEXT
: Offset
: 0xA5
166 // CHECK-NEXT
: PCRel
: 0
167 // CHECK-NEXT
: Length
: 3
168 // CHECK-NEXT
: Type
: X86_64_RELOC_SUBTRACTOR
(5)
169 // CHECK-NEXT
: Symbol
: _prev
171 // CHECK-NEXT
: Relocation
{
172 // CHECK-NEXT
: Offset
: 0xA5
173 // CHECK-NEXT
: PCRel
: 0
174 // CHECK-NEXT
: Length
: 3
175 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
176 // CHECK-NEXT
: Symbol
: _foo
178 // CHECK-NEXT
: Relocation
{
179 // CHECK-NEXT
: Offset
: 0x9D
180 // CHECK-NEXT
: PCRel
: 0
181 // CHECK-NEXT
: Length
: 3
182 // CHECK-NEXT
: Type
: X86_64_RELOC_SUBTRACTOR
(5)
183 // CHECK-NEXT
: Symbol
: _prev
185 // CHECK-NEXT
: Relocation
{
186 // CHECK-NEXT
: Offset
: 0x9D
187 // CHECK-NEXT
: PCRel
: 0
188 // CHECK-NEXT
: Length
: 3
189 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
190 // CHECK-NEXT
: Symbol
: _foo
192 // CHECK-NEXT
: Relocation
{
193 // CHECK-NEXT
: Offset
: 0x95
194 // CHECK-NEXT
: PCRel
: 0
195 // CHECK-NEXT
: Length
: 3
196 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
197 // CHECK-NEXT
: Symbol
: _prev
199 // CHECK-NEXT
: Relocation
{
200 // CHECK-NEXT
: Offset
: 0x8D
201 // CHECK-NEXT
: PCRel
: 0
202 // CHECK-NEXT
: Length
: 3
203 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
204 // CHECK-NEXT
: Symbol
: _prev
206 // CHECK-NEXT
: Relocation
{
207 // CHECK-NEXT
: Offset
: 0x79
208 // CHECK-NEXT
: PCRel
: 1
209 // CHECK-NEXT
: Length
: 2
210 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED_4
(8)
211 // CHECK-NEXT
: Symbol
: _prev
213 // CHECK-NEXT
: Relocation
{
214 // CHECK-NEXT
: Offset
: 0x71
215 // CHECK-NEXT
: PCRel
: 1
216 // CHECK-NEXT
: Length
: 2
217 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED_2
(7)
218 // CHECK-NEXT
: Symbol
: _prev
220 // CHECK-NEXT
: Relocation
{
221 // CHECK-NEXT
: Offset
: 0x69
222 // CHECK-NEXT
: PCRel
: 1
223 // CHECK-NEXT
: Length
: 2
224 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED_1
(6)
225 // CHECK-NEXT
: Symbol
: _prev
227 // CHECK-NEXT
: Relocation
{
228 // CHECK-NEXT
: Offset
: 0x63
229 // CHECK-NEXT
: PCRel
: 1
230 // CHECK-NEXT
: Length
: 2
231 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED
(1)
232 // CHECK-NEXT
: Symbol
: _prev
234 // CHECK-NEXT
: Relocation
{
235 // CHECK-NEXT
: Offset
: 0x5C
236 // CHECK-NEXT
: PCRel
: 1
237 // CHECK-NEXT
: Length
: 2
238 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED
(1)
239 // CHECK-NEXT
: Symbol
: _prev
241 // CHECK-NEXT
: Relocation
{
242 // CHECK-NEXT
: Offset
: 0x55
243 // CHECK-NEXT
: PCRel
: 0
244 // CHECK-NEXT
: Length
: 2
245 // CHECK-NEXT
: Type
: X86_64_RELOC_SUBTRACTOR
(5)
246 // CHECK-NEXT
: Symbol
: _bar
248 // CHECK-NEXT
: Relocation
{
249 // CHECK-NEXT
: Offset
: 0x55
250 // CHECK-NEXT
: PCRel
: 0
251 // CHECK-NEXT
: Length
: 2
252 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
253 // CHECK-NEXT
: Symbol
: _foo
255 // CHECK-NEXT
: Relocation
{
256 // CHECK-NEXT
: Offset
: 0x4D
257 // CHECK-NEXT
: PCRel
: 0
258 // CHECK-NEXT
: Length
: 3
259 // CHECK-NEXT
: Type
: X86_64_RELOC_SUBTRACTOR
(5)
260 // CHECK-NEXT
: Symbol
: _bar
262 // CHECK-NEXT
: Relocation
{
263 // CHECK-NEXT
: Offset
: 0x4D
264 // CHECK-NEXT
: PCRel
: 0
265 // CHECK-NEXT
: Length
: 3
266 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
267 // CHECK-NEXT
: Symbol
: _foo
269 // CHECK-NEXT
: Relocation
{
270 // CHECK-NEXT
: Offset
: 0x45
271 // CHECK-NEXT
: PCRel
: 0
272 // CHECK-NEXT
: Length
: 3
273 // CHECK-NEXT
: Type
: X86_64_RELOC_SUBTRACTOR
(5)
274 // CHECK-NEXT
: Symbol
: _bar
276 // CHECK-NEXT
: Relocation
{
277 // CHECK-NEXT
: Offset
: 0x45
278 // CHECK-NEXT
: PCRel
: 0
279 // CHECK-NEXT
: Length
: 3
280 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
281 // CHECK-NEXT
: Symbol
: _foo
283 // CHECK-NEXT
: Relocation
{
284 // CHECK-NEXT
: Offset
: 0x3D
285 // CHECK-NEXT
: PCRel
: 0
286 // CHECK-NEXT
: Length
: 3
287 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
288 // CHECK-NEXT
: Symbol
: _foo
290 // CHECK-NEXT
: Relocation
{
291 // CHECK-NEXT
: Offset
: 0x35
292 // CHECK-NEXT
: PCRel
: 0
293 // CHECK-NEXT
: Length
: 3
294 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
295 // CHECK-NEXT
: Symbol
: _foo
297 // CHECK-NEXT
: Relocation
{
298 // CHECK-NEXT
: Offset
: 0x2D
299 // CHECK-NEXT
: PCRel
: 1
300 // CHECK-NEXT
: Length
: 2
301 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED_4
(8)
302 // CHECK-NEXT
: Symbol
: _foo
304 // CHECK-NEXT
: Relocation
{
305 // CHECK-NEXT
: Offset
: 0x26
306 // CHECK-NEXT
: PCRel
: 1
307 // CHECK-NEXT
: Length
: 2
308 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED_1
(6)
309 // CHECK-NEXT
: Symbol
: _foo
311 // CHECK-NEXT
: Relocation
{
312 // CHECK-NEXT
: Offset
: 0x20
313 // CHECK-NEXT
: PCRel
: 1
314 // CHECK-NEXT
: Length
: 2
315 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED
(1)
316 // CHECK-NEXT
: Symbol
: _foo
318 // CHECK-NEXT
: Relocation
{
319 // CHECK-NEXT
: Offset
: 0x1A
320 // CHECK-NEXT
: PCRel
: 1
321 // CHECK-NEXT
: Length
: 2
322 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED
(1)
323 // CHECK-NEXT
: Symbol
: _foo
325 // CHECK-NEXT
: Relocation
{
326 // CHECK-NEXT
: Offset
: 0x14
327 // CHECK-NEXT
: PCRel
: 1
328 // CHECK-NEXT
: Length
: 2
329 // CHECK-NEXT
: Type
: X86_64_RELOC_GOT
(4)
330 // CHECK-NEXT
: Symbol
: _foo
332 // CHECK-NEXT
: Relocation
{
333 // CHECK-NEXT
: Offset
: 0xE
334 // CHECK-NEXT
: PCRel
: 1
335 // CHECK-NEXT
: Length
: 2
336 // CHECK-NEXT
: Type
: X86_64_RELOC_GOT_LOAD
(3)
337 // CHECK-NEXT
: Symbol
: _foo
339 // CHECK-NEXT
: Relocation
{
340 // CHECK-NEXT
: Offset
: 0x7
341 // CHECK-NEXT
: PCRel
: 1
342 // CHECK-NEXT
: Length
: 2
343 // CHECK-NEXT
: Type
: X86_64_RELOC_BRANCH
(2)
344 // CHECK-NEXT
: Symbol
: _foo
346 // CHECK-NEXT
: Relocation
{
347 // CHECK-NEXT
: Offset
: 0x2
348 // CHECK-NEXT
: PCRel
: 1
349 // CHECK-NEXT
: Length
: 2
350 // CHECK-NEXT
: Type
: X86_64_RELOC_BRANCH
(2)
351 // CHECK-NEXT
: Symbol
: _foo
354 // CHECK-NEXT
: Section __debug_frame
{
355 // CHECK-NEXT
: Relocation
{
356 // CHECK-NEXT
: Offset
: 0x8
357 // CHECK-NEXT
: PCRel
: 0
358 // CHECK-NEXT
: Length
: 3
359 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
360 // CHECK-NEXT
: Symbol
: _ext_foo
362 // CHECK-NEXT
: Relocation
{
363 // CHECK-NEXT
: Offset
: 0x0
364 // CHECK-NEXT
: PCRel
: 0
365 // CHECK-NEXT
: Length
: 3
366 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
367 // CHECK-NEXT
: Section
: __text