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
: 0x95
180 // CHECK-NEXT
: PCRel
: 0
181 // CHECK-NEXT
: Length
: 3
182 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
183 // CHECK-NEXT
: Symbol
: _prev
185 // CHECK-NEXT
: Relocation
{
186 // CHECK-NEXT
: Offset
: 0x8D
187 // CHECK-NEXT
: PCRel
: 0
188 // CHECK-NEXT
: Length
: 3
189 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
190 // CHECK-NEXT
: Symbol
: _prev
192 // CHECK-NEXT
: Relocation
{
193 // CHECK-NEXT
: Offset
: 0x79
194 // CHECK-NEXT
: PCRel
: 1
195 // CHECK-NEXT
: Length
: 2
196 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED_4
(8)
197 // CHECK-NEXT
: Symbol
: _prev
199 // CHECK-NEXT
: Relocation
{
200 // CHECK-NEXT
: Offset
: 0x71
201 // CHECK-NEXT
: PCRel
: 1
202 // CHECK-NEXT
: Length
: 2
203 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED_2
(7)
204 // CHECK-NEXT
: Symbol
: _prev
206 // CHECK-NEXT
: Relocation
{
207 // CHECK-NEXT
: Offset
: 0x69
208 // CHECK-NEXT
: PCRel
: 1
209 // CHECK-NEXT
: Length
: 2
210 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED_1
(6)
211 // CHECK-NEXT
: Symbol
: _prev
213 // CHECK-NEXT
: Relocation
{
214 // CHECK-NEXT
: Offset
: 0x63
215 // CHECK-NEXT
: PCRel
: 1
216 // CHECK-NEXT
: Length
: 2
217 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED
(1)
218 // CHECK-NEXT
: Symbol
: _prev
220 // CHECK-NEXT
: Relocation
{
221 // CHECK-NEXT
: Offset
: 0x5C
222 // CHECK-NEXT
: PCRel
: 1
223 // CHECK-NEXT
: Length
: 2
224 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED
(1)
225 // CHECK-NEXT
: Symbol
: _prev
227 // CHECK-NEXT
: Relocation
{
228 // CHECK-NEXT
: Offset
: 0x3D
229 // CHECK-NEXT
: PCRel
: 0
230 // CHECK-NEXT
: Length
: 3
231 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
232 // CHECK-NEXT
: Symbol
: _foo
234 // CHECK-NEXT
: Relocation
{
235 // CHECK-NEXT
: Offset
: 0x35
236 // CHECK-NEXT
: PCRel
: 0
237 // CHECK-NEXT
: Length
: 3
238 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
239 // CHECK-NEXT
: Symbol
: _foo
241 // CHECK-NEXT
: Relocation
{
242 // CHECK-NEXT
: Offset
: 0x2D
243 // CHECK-NEXT
: PCRel
: 1
244 // CHECK-NEXT
: Length
: 2
245 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED_4
(8)
246 // CHECK-NEXT
: Symbol
: _foo
248 // CHECK-NEXT
: Relocation
{
249 // CHECK-NEXT
: Offset
: 0x26
250 // CHECK-NEXT
: PCRel
: 1
251 // CHECK-NEXT
: Length
: 2
252 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED_1
(6)
253 // CHECK-NEXT
: Symbol
: _foo
255 // CHECK-NEXT
: Relocation
{
256 // CHECK-NEXT
: Offset
: 0x20
257 // CHECK-NEXT
: PCRel
: 1
258 // CHECK-NEXT
: Length
: 2
259 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED
(1)
260 // CHECK-NEXT
: Symbol
: _foo
262 // CHECK-NEXT
: Relocation
{
263 // CHECK-NEXT
: Offset
: 0x1A
264 // CHECK-NEXT
: PCRel
: 1
265 // CHECK-NEXT
: Length
: 2
266 // CHECK-NEXT
: Type
: X86_64_RELOC_SIGNED
(1)
267 // CHECK-NEXT
: Symbol
: _foo
269 // CHECK-NEXT
: Relocation
{
270 // CHECK-NEXT
: Offset
: 0x14
271 // CHECK-NEXT
: PCRel
: 1
272 // CHECK-NEXT
: Length
: 2
273 // CHECK-NEXT
: Type
: X86_64_RELOC_GOT
(4)
274 // CHECK-NEXT
: Symbol
: _foo
276 // CHECK-NEXT
: Relocation
{
277 // CHECK-NEXT
: Offset
: 0xE
278 // CHECK-NEXT
: PCRel
: 1
279 // CHECK-NEXT
: Length
: 2
280 // CHECK-NEXT
: Type
: X86_64_RELOC_GOT_LOAD
(3)
281 // CHECK-NEXT
: Symbol
: _foo
283 // CHECK-NEXT
: Relocation
{
284 // CHECK-NEXT
: Offset
: 0x7
285 // CHECK-NEXT
: PCRel
: 1
286 // CHECK-NEXT
: Length
: 2
287 // CHECK-NEXT
: Type
: X86_64_RELOC_BRANCH
(2)
288 // CHECK-NEXT
: Symbol
: _foo
290 // CHECK-NEXT
: Relocation
{
291 // CHECK-NEXT
: Offset
: 0x2
292 // CHECK-NEXT
: PCRel
: 1
293 // CHECK-NEXT
: Length
: 2
294 // CHECK-NEXT
: Type
: X86_64_RELOC_BRANCH
(2)
295 // CHECK-NEXT
: Symbol
: _foo
298 // CHECK-NEXT
: Section __debug_frame
{
299 // CHECK-NEXT
: Relocation
{
300 // CHECK-NEXT
: Offset
: 0x8
301 // CHECK-NEXT
: PCRel
: 0
302 // CHECK-NEXT
: Length
: 3
303 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
304 // CHECK-NEXT
: Symbol
: _ext_foo
306 // CHECK-NEXT
: Relocation
{
307 // CHECK-NEXT
: Offset
: 0x0
308 // CHECK-NEXT
: PCRel
: 0
309 // CHECK-NEXT
: Length
: 3
310 // CHECK-NEXT
: Type
: X86_64_RELOC_UNSIGNED
(0)
311 // CHECK-NEXT
: Section
: __text