[MC] Convert all the remaining tests from macho-dump to llvm-readobj.
[oota-llvm.git] / test / MC / MachO / darwin-x86_64-reloc-offsets.s
1 // RUN: llvm-mc -triple x86_64-apple-darwin10 %s -filetype=obj -o - | llvm-readobj -file-headers -s -sd -r -t -macho-segment -macho-dysymtab -macho-indirect-symbols | FileCheck %s
2
3         .data
4
5         .org 0x10
6 L0:
7         .long 0
8         .long 0
9         .long 0
10         .long 0
11
12 _d:
13         .long 0
14 L1:
15         .long 0
16
17         .text
18
19 // These generate normal x86_64 (external) relocations. They could all use
20 // SIGNED, but don't for pedantic compatibility with Darwin 'as'.
21
22         // SIGNED1
23         movb  $0x12, _d(%rip)
24
25         // SIGNED
26         movb  $0x12, _d + 1(%rip)
27
28         // SIGNED4
29         movl  $0x12345678, _d(%rip)
30
31         // SIGNED
32         movl  $0x12345678, _d + 1(%rip)
33
34         // SIGNED2
35         movl  $0x12345678, _d + 2(%rip)
36
37         // SIGNED1
38         movl  $0x12345678, _d + 3(%rip)
39
40         // SIGNED
41         movl  $0x12345678, _d + 4(%rip)
42
43         movb  %al, _d(%rip)
44         movb  %al, _d + 1(%rip)
45         movl  %eax, _d(%rip)
46         movl  %eax, _d + 1(%rip)
47         movl  %eax, _d + 2(%rip)
48         movl  %eax, _d + 3(%rip)
49         movl  %eax, _d + 4(%rip)
50
51 // These have to use local relocations. Since that uses an offset into the
52 // section in x86_64 (as opposed to a scattered relocation), and since the
53 // linker can only decode this to an atom + offset by scanning the section,
54 // it is not possible to correctly encode these without SIGNED<N>. This is
55 // ultimately due to a design flaw in the x86_64 relocation format, it is
56 // not possible to encode an address (L<foo> + <constant>) which is outside the
57 // atom containing L<foo>.
58
59         // SIGNED1
60         movb  $0x12, L0(%rip)
61
62         // SIGNED
63         movb  $0x12, L0 + 1(%rip)
64
65         // SIGNED4
66         movl  $0x12345678, L0(%rip)
67
68         // SIGNED
69         movl  $0x12345678, L0 + 1(%rip)
70
71         // SIGNED2
72         movl  $0x12345678, L0 + 2(%rip)
73
74         // SIGNED1
75         movl  $0x12345678, L0 + 3(%rip)
76
77         // SIGNED
78         movl  $0x12345678, L0 + 4(%rip)
79
80         movb  %al, L0(%rip)
81         movb  %al, L0 + 1(%rip)
82         movl  %eax, L0(%rip)
83         movl  %eax, L0 + 1(%rip)
84         movl  %eax, L0 + 2(%rip)
85         movl  %eax, L0 + 3(%rip)
86         movl  %eax, L0 + 4(%rip)
87
88         // SIGNED1
89         movb  $0x12, L1(%rip)
90
91         // SIGNED
92         movb  $0x12, L1 + 1(%rip)
93
94         // SIGNED4
95         movl  $0x12345678, L1(%rip)
96
97         // SIGNED
98         movl  $0x12345678, L1 + 1(%rip)
99
100         // SIGNED2
101         movl  $0x12345678, L1 + 2(%rip)
102
103         // SIGNED1
104         movl  $0x12345678, L1 + 3(%rip)
105
106         // SIGNED
107         movl  $0x12345678, L1 + 4(%rip)
108
109         movb  %al, L1(%rip)
110         movb  %al, L1 + 1(%rip)
111         movl  %eax, L1(%rip)
112         movl  %eax, L1 + 1(%rip)
113         movl  %eax, L1 + 2(%rip)
114         movl  %eax, L1 + 3(%rip)
115         movl  %eax, L1 + 4(%rip)
116
117 // CHECK: File: <stdin>
118 // CHECK: Format: Mach-O 64-bit x86-64
119 // CHECK: Arch: x86_64
120 // CHECK: AddressSize: 64bit
121 // CHECK: MachHeader {
122 // CHECK:   Magic: Magic64 (0xFEEDFACF)
123 // CHECK:   CpuType: X86-64 (0x1000007)
124 // CHECK:   CpuSubType: CPU_SUBTYPE_X86_64_ALL (0x3)
125 // CHECK:   FileType: Relocatable (0x1)
126 // CHECK:   NumOfLoadCommands: 4
127 // CHECK:   SizeOfLoadCommands: 352
128 // CHECK:   Flags [ (0x0)
129 // CHECK:   ]
130 // CHECK:   Reserved: 0x0
131 // CHECK: }
132 // CHECK: Sections [
133 // CHECK:   Section {
134 // CHECK:     Index: 0
135 // CHECK:     Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
136 // CHECK:     Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
137 // CHECK:     Address: 0x0
138 // CHECK:     Size: 0x13E
139 // CHECK:     Offset: 384
140 // CHECK:     Alignment: 0
141 // CHECK:     RelocationOffset: 0x2E8
142 // CHECK:     RelocationCount: 42
143 // CHECK:     Type: 0x0
144 // CHECK:     Attributes [ (0x800004)
145 // CHECK:       PureInstructions (0x800000)
146 // CHECK:       SomeInstructions (0x4)
147 // CHECK:     ]
148 // CHECK:     Reserved1: 0x0
149 // CHECK:     Reserved2: 0x0
150 // CHECK:     Reserved3: 0x0
151 // CHECK:     SectionData (
152 // CHECK:       0000: C605FFFF FFFF12C6 05000000 0012C705  |................|
153 // CHECK:       0010: FCFFFFFF 78563412 C705FDFF FFFF7856  |....xV4.......xV|
154 // CHECK:       0020: 3412C705 FEFFFFFF 78563412 C705FFFF  |4.......xV4.....|
155 // CHECK:       0030: FFFF7856 3412C705 00000000 78563412  |..xV4.......xV4.|
156 // CHECK:       0040: 88050000 00008805 01000000 89050000  |................|
157 // CHECK:       0050: 00008905 01000000 89050200 00008905  |................|
158 // CHECK:       0060: 03000000 89050400 0000C605 DD000000  |................|
159 // CHECK:       0070: 12C605D7 00000012 C705CC00 00007856  |..............xV|
160 // CHECK:       0080: 3412C705 C3000000 78563412 C705BA00  |4.......xV4.....|
161 // CHECK:       0090: 00007856 3412C705 B1000000 78563412  |..xV4.......xV4.|
162 // CHECK:       00A0: C705A800 00007856 34128805 9E000000  |......xV4.......|
163 // CHECK:       00B0: 88059900 00008905 92000000 89058D00  |................|
164 // CHECK:       00C0: 00008905 88000000 89058300 00008905  |................|
165 // CHECK:       00D0: 7E000000 C6050300 000012C6 05040000  |~...............|
166 // CHECK:       00E0: 0012C705 00000000 78563412 C7050100  |........xV4.....|
167 // CHECK:       00F0: 00007856 3412C705 02000000 78563412  |..xV4.......xV4.|
168 // CHECK:       0100: C7050300 00007856 3412C705 04000000  |......xV4.......|
169 // CHECK:       0110: 78563412 88050400 00008805 05000000  |xV4.............|
170 // CHECK:       0120: 89050400 00008905 05000000 89050600  |................|
171 // CHECK:       0130: 00008905 07000000 89050800 0000      |..............|
172 // CHECK:     )
173 // CHECK:   }
174 // CHECK:   Section {
175 // CHECK:     Index: 1
176 // CHECK:     Name: __data (5F 5F 64 61 74 61 00 00 00 00 00 00 00 00 00 00)
177 // CHECK:     Segment: __DATA (5F 5F 44 41 54 41 00 00 00 00 00 00 00 00 00 00)
178 // CHECK:     Address: 0x13E
179 // CHECK:     Size: 0x28
180 // CHECK:     Offset: 702
181 // CHECK:     Alignment: 0
182 // CHECK:     RelocationOffset: 0x0
183 // CHECK:     RelocationCount: 0
184 // CHECK:     Type: 0x0
185 // CHECK:     Attributes [ (0x0)
186 // CHECK:     ]
187 // CHECK:     Reserved1: 0x0
188 // CHECK:     Reserved2: 0x0
189 // CHECK:     Reserved3: 0x0
190 // CHECK:     SectionData (
191 // CHECK:       0000: 00000000 00000000 00000000 00000000  |................|
192 // CHECK:       0010: 00000000 00000000 00000000 00000000  |................|
193 // CHECK:       0020: 00000000 00000000                    |........|
194 // CHECK:     )
195 // CHECK:   }
196 // CHECK: ]
197 // CHECK: Relocations [
198 // CHECK:   Section __text {
199 // CHECK:     0x13A 1 2 1 X86_64_RELOC_SIGNED 0 _d
200 // CHECK:     0x134 1 2 1 X86_64_RELOC_SIGNED 0 _d
201 // CHECK:     0x12E 1 2 1 X86_64_RELOC_SIGNED 0 _d
202 // CHECK:     0x128 1 2 1 X86_64_RELOC_SIGNED 0 _d
203 // CHECK:     0x122 1 2 1 X86_64_RELOC_SIGNED 0 _d
204 // CHECK:     0x11C 1 2 1 X86_64_RELOC_SIGNED 0 _d
205 // CHECK:     0x116 1 2 1 X86_64_RELOC_SIGNED 0 _d
206 // CHECK:     0x10C 1 2 1 X86_64_RELOC_SIGNED 0 _d
207 // CHECK:     0x102 1 2 1 X86_64_RELOC_SIGNED_1 0 _d
208 // CHECK:     0xF8 1 2 1 X86_64_RELOC_SIGNED_2 0 _d
209 // CHECK:     0xEE 1 2 1 X86_64_RELOC_SIGNED 0 _d
210 // CHECK:     0xE4 1 2 1 X86_64_RELOC_SIGNED_4 0 _d
211 // CHECK:     0xDD 1 2 1 X86_64_RELOC_SIGNED 0 _d
212 // CHECK:     0xD6 1 2 1 X86_64_RELOC_SIGNED_1 0 _d
213 // CHECK:     0xD0 1 2 0 X86_64_RELOC_SIGNED 0 __data
214 // CHECK:     0xCA 1 2 0 X86_64_RELOC_SIGNED 0 __data
215 // CHECK:     0xC4 1 2 0 X86_64_RELOC_SIGNED 0 __data
216 // CHECK:     0xBE 1 2 0 X86_64_RELOC_SIGNED 0 __data
217 // CHECK:     0xB8 1 2 0 X86_64_RELOC_SIGNED 0 __data
218 // CHECK:     0xB2 1 2 0 X86_64_RELOC_SIGNED 0 __data
219 // CHECK:     0xAC 1 2 0 X86_64_RELOC_SIGNED 0 __data
220 // CHECK:     0xA2 1 2 0 X86_64_RELOC_SIGNED 0 __data
221 // CHECK:     0x98 1 2 0 X86_64_RELOC_SIGNED_1 0 __data
222 // CHECK:     0x8E 1 2 0 X86_64_RELOC_SIGNED_2 0 __data
223 // CHECK:     0x84 1 2 0 X86_64_RELOC_SIGNED 0 __data
224 // CHECK:     0x7A 1 2 0 X86_64_RELOC_SIGNED_4 0 __data
225 // CHECK:     0x73 1 2 0 X86_64_RELOC_SIGNED 0 __data
226 // CHECK:     0x6C 1 2 0 X86_64_RELOC_SIGNED_1 0 __data
227 // CHECK:     0x66 1 2 1 X86_64_RELOC_SIGNED 0 _d
228 // CHECK:     0x60 1 2 1 X86_64_RELOC_SIGNED 0 _d
229 // CHECK:     0x5A 1 2 1 X86_64_RELOC_SIGNED 0 _d
230 // CHECK:     0x54 1 2 1 X86_64_RELOC_SIGNED 0 _d
231 // CHECK:     0x4E 1 2 1 X86_64_RELOC_SIGNED 0 _d
232 // CHECK:     0x48 1 2 1 X86_64_RELOC_SIGNED 0 _d
233 // CHECK:     0x42 1 2 1 X86_64_RELOC_SIGNED 0 _d
234 // CHECK:     0x38 1 2 1 X86_64_RELOC_SIGNED 0 _d
235 // CHECK:     0x2E 1 2 1 X86_64_RELOC_SIGNED_1 0 _d
236 // CHECK:     0x24 1 2 1 X86_64_RELOC_SIGNED_2 0 _d
237 // CHECK:     0x1A 1 2 1 X86_64_RELOC_SIGNED 0 _d
238 // CHECK:     0x10 1 2 1 X86_64_RELOC_SIGNED_4 0 _d
239 // CHECK:     0x9 1 2 1 X86_64_RELOC_SIGNED 0 _d
240 // CHECK:     0x2 1 2 1 X86_64_RELOC_SIGNED_1 0 _d
241 // CHECK:   }
242 // CHECK: ]
243 // CHECK: Symbols [
244 // CHECK:   Symbol {
245 // CHECK:     Name: _d (1)
246 // CHECK:     Type: Section (0xE)
247 // CHECK:     Section: __data (0x2)
248 // CHECK:     RefType: UndefinedNonLazy (0x0)
249 // CHECK:     Flags [ (0x0)
250 // CHECK:     ]
251 // CHECK:     Value: 0x15E
252 // CHECK:   }
253 // CHECK: ]
254 // CHECK: Indirect Symbols {
255 // CHECK:   Number: 0
256 // CHECK:   Symbols [
257 // CHECK:   ]
258 // CHECK: }
259 // CHECK: Segment {
260 // CHECK:   Cmd: LC_SEGMENT_64
261 // CHECK:   Name: 
262 // CHECK:   Size: 232
263 // CHECK:   vmaddr: 0x0
264 // CHECK:   vmsize: 0x166
265 // CHECK:   fileoff: 384
266 // CHECK:   filesize: 358
267 // CHECK:   maxprot: rwx
268 // CHECK:   initprot: rwx
269 // CHECK:   nsects: 2
270 // CHECK:   flags: 0x0
271 // CHECK: }
272 // CHECK: Dysymtab {
273 // CHECK:   ilocalsym: 0
274 // CHECK:   nlocalsym: 1
275 // CHECK:   iextdefsym: 1
276 // CHECK:   nextdefsym: 0
277 // CHECK:   iundefsym: 1
278 // CHECK:   nundefsym: 0
279 // CHECK:   tocoff: 0
280 // CHECK:   ntoc: 0
281 // CHECK:   modtaboff: 0
282 // CHECK:   nmodtab: 0
283 // CHECK:   extrefsymoff: 0
284 // CHECK:   nextrefsyms: 0
285 // CHECK:   indirectsymoff: 0
286 // CHECK:   nindirectsyms: 0
287 // CHECK:   extreloff: 0
288 // CHECK:   nextrel: 0
289 // CHECK:   locreloff: 0
290 // CHECK:   nlocrel: 0
291 // CHECK: }