Home | History | Annotate | Download | only in MachO
      1 // RUN: llvm-mc -n -triple x86_64-apple-darwin9 %s -filetype=obj -o - | macho-dump --dump-section-data | FileCheck %s
      2 
      3 // These examples are taken from <mach-o/x86_64/reloc.h>.
      4 
      5         .data
      6         .long 0
      7 
      8         .text
      9 _foo:
     10         ret
     11 
     12 _baz:
     13         call _foo
     14  	call _foo+4
     15  	movq _foo@GOTPCREL(%rip), %rax
     16  	pushq _foo@GOTPCREL(%rip)
     17  	movl _foo(%rip), %eax
     18  	movl _foo+4(%rip), %eax
     19  	movb  $0x12, _foo(%rip)
     20  	movl  $0x12345678, _foo(%rip)
     21  	.quad _foo
     22 _bar:
     23  	.quad _foo+4
     24  	.quad _foo - _bar
     25  	.quad _foo - _bar + 4
     26  	.long _foo - _bar
     27  	leaq L1(%rip), %rax
     28  	leaq L0(%rip), %rax
     29         addl $6,L0(%rip)
     30         addw $500,L0(%rip)
     31         addl $500,L0(%rip)
     32 
     33 _prev:
     34         .space 12,0x90
     35  	.quad L1
     36 L0:
     37         .quad L0
     38 L_pc:
     39  	.quad _foo - L_pc
     40  	.quad _foo - L1
     41 L1:
     42  	.quad L1 - _prev
     43 
     44         .data
     45 .long	_foobar@GOTPCREL+4
     46 .long	_foo@GOTPCREL+4
     47 
     48         .section	__DWARF,__debug_frame,regular,debug
     49         .quad L1
     50         .quad _ext_foo
     51 
     52 // Make sure local label which overlaps with non-local one is assigned to the
     53 // right atom.
     54         .text
     55 _f2:
     56 L2_0:
     57         addl $0, %eax
     58 L2_1:
     59 _f3:
     60         addl L2_1 - L2_0, %eax
     61 
     62         .data
     63 L4:
     64         .long 0
     65         .text
     66         movl L4(%rip), %eax
     67 
     68         .section __TEXT,__literal8,8byte_literals
     69 	.quad 0
     70 L5:
     71 	.quad 0
     72 f6:
     73         .quad 0
     74 L6:
     75         .quad 0
     76 
     77         .text
     78 	movl L5(%rip), %eax
     79 	movl f6(%rip), %eax
     80 	movl L6(%rip), %eax
     81 
     82         .data
     83         .quad L5
     84         .quad f6
     85 	.quad L6
     86 
     87         .text
     88         cmpq $0, _foo@GOTPCREL(%rip)
     89 
     90 // CHECK: ('cputype', 16777223)
     91 // CHECK: ('cpusubtype', 3)
     92 // CHECK: ('filetype', 1)
     93 // CHECK: ('num_load_commands', 3)
     94 // CHECK: ('load_commands_size', 496)
     95 // CHECK: ('flag', 0)
     96 // CHECK: ('reserved', 0)
     97 // CHECK: ('load_commands', [
     98 // CHECK:   # Load Command 0
     99 // CHECK:  (('command', 25)
    100 // CHECK:   ('size', 392)
    101 // CHECK:   ('segment_name', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
    102 // CHECK:   ('vm_addr', 0)
    103 // CHECK:   ('vm_size', 311)
    104 // CHECK:   ('file_offset', 528)
    105 // CHECK:   ('file_size', 311)
    106 // CHECK:   ('maxprot', 7)
    107 // CHECK:   ('initprot', 7)
    108 // CHECK:   ('num_sections', 4)
    109 // CHECK:   ('flags', 0)
    110 // CHECK:   ('sections', [
    111 // CHECK:     # Section 0
    112 // CHECK:    (('section_name', '__data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
    113 // CHECK:     ('segment_name', '__DATA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
    114 // CHECK:     ('address', 0)
    115 // CHECK:     ('size', 40)
    116 // CHECK:     ('offset', 528)
    117 // CHECK:     ('alignment', 0)
    118 // CHECK:     ('reloc_offset', 840)
    119 // CHECK:     ('num_reloc', 5)
    120 // CHECK:     ('flags', 0x0)
    121 // CHECK:     ('reserved1', 0)
    122 // CHECK:     ('reserved2', 0)
    123 // CHECK:     ('reserved3', 0)
    124 // CHECK:    ),
    125 // CHECK:   ('_relocations', [
    126 // CHECK:     # Relocation 0
    127 // CHECK:     (('word-0', 0x20),
    128 // CHECK:      ('word-1', 0x6000004)),
    129 // CHECK:     # Relocation 1
    130 // CHECK:     (('word-0', 0x18),
    131 // CHECK:      ('word-1', 0xe000006)),
    132 // CHECK:     # Relocation 2
    133 // CHECK:     (('word-0', 0x10),
    134 // CHECK:      ('word-1', 0x6000004)),
    135 // CHECK:     # Relocation 3
    136 // CHECK:     (('word-0', 0x8),
    137 // CHECK:      ('word-1', 0x4d000000)),
    138 // CHECK:     # Relocation 4
    139 // CHECK:     (('word-0', 0x4),
    140 // CHECK:      ('word-1', 0x4d000008)),
    141 // CHECK:   ])
    142 // CHECK:   ('_section_data', '00000000 04000000 04000000 00000000 1f010000 00000000 00000000 00000000 2f010000 00000000')
    143 // CHECK:     # Section 1
    144 // CHECK:    (('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
    145 // CHECK:     ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
    146 // CHECK:     ('address', 40)
    147 // CHECK:     ('size', 223)
    148 // CHECK:     ('offset', 568)
    149 // CHECK:     ('alignment', 0)
    150 // CHECK:     ('reloc_offset', 880)
    151 // CHECK:     ('num_reloc', 32)
    152 // CHECK:     ('flags', 0x80000400)
    153 // CHECK:     ('reserved1', 0)
    154 // CHECK:     ('reserved2', 0)
    155 // CHECK:     ('reserved3', 0)
    156 // CHECK:    ),
    157 // CHECK:   ('_relocations', [
    158 // CHECK:     # Relocation 0
    159 // CHECK:     (('word-0', 0xda),
    160 // CHECK:      ('word-1', 0x4d000000)),
    161 // CHECK:     # Relocation 1
    162 // CHECK:     (('word-0', 0xd3),
    163 // CHECK:      ('word-1', 0x15000004)),
    164 // CHECK:     # Relocation 2
    165 // CHECK:     (('word-0', 0xcd),
    166 // CHECK:      ('word-1', 0x1d000006)),
    167 // CHECK:     # Relocation 3
    168 // CHECK:     (('word-0', 0xc7),
    169 // CHECK:      ('word-1', 0x15000004)),
    170 // CHECK:     # Relocation 4
    171 // CHECK:     (('word-0', 0xc1),
    172 // CHECK:      ('word-1', 0x15000001)),
    173 // CHECK:     # Relocation 5
    174 // CHECK:     (('word-0', 0xa5),
    175 // CHECK:      ('word-1', 0x5e000003)),
    176 // CHECK:     # Relocation 6
    177 // CHECK:     (('word-0', 0xa5),
    178 // CHECK:      ('word-1', 0xe000000)),
    179 // CHECK:     # Relocation 7
    180 // CHECK:     (('word-0', 0x9d),
    181 // CHECK:      ('word-1', 0x5e000003)),
    182 // CHECK:     # Relocation 8
    183 // CHECK:     (('word-0', 0x9d),
    184 // CHECK:      ('word-1', 0xe000000)),
    185 // CHECK:     # Relocation 9
    186 // CHECK:     (('word-0', 0x95),
    187 // CHECK:      ('word-1', 0xe000003)),
    188 // CHECK:     # Relocation 10
    189 // CHECK:     (('word-0', 0x8d),
    190 // CHECK:      ('word-1', 0xe000003)),
    191 // CHECK:     # Relocation 11
    192 // CHECK:     (('word-0', 0x79),
    193 // CHECK:      ('word-1', 0x8d000003)),
    194 // CHECK:     # Relocation 12
    195 // CHECK:     (('word-0', 0x71),
    196 // CHECK:      ('word-1', 0x7d000003)),
    197 // CHECK:     # Relocation 13
    198 // CHECK:     (('word-0', 0x69),
    199 // CHECK:      ('word-1', 0x6d000003)),
    200 // CHECK:     # Relocation 14
    201 // CHECK:     (('word-0', 0x63),
    202 // CHECK:      ('word-1', 0x1d000003)),
    203 // CHECK:     # Relocation 15
    204 // CHECK:     (('word-0', 0x5c),
    205 // CHECK:      ('word-1', 0x1d000003)),
    206 // CHECK:     # Relocation 16
    207 // CHECK:     (('word-0', 0x55),
    208 // CHECK:      ('word-1', 0x5c000002)),
    209 // CHECK:     # Relocation 17
    210 // CHECK:     (('word-0', 0x55),
    211 // CHECK:      ('word-1', 0xc000000)),
    212 // CHECK:     # Relocation 18
    213 // CHECK:     (('word-0', 0x4d),
    214 // CHECK:      ('word-1', 0x5e000002)),
    215 // CHECK:     # Relocation 19
    216 // CHECK:     (('word-0', 0x4d),
    217 // CHECK:      ('word-1', 0xe000000)),
    218 // CHECK:     # Relocation 20
    219 // CHECK:     (('word-0', 0x45),
    220 // CHECK:      ('word-1', 0x5e000002)),
    221 // CHECK:     # Relocation 21
    222 // CHECK:     (('word-0', 0x45),
    223 // CHECK:      ('word-1', 0xe000000)),
    224 // CHECK:     # Relocation 22
    225 // CHECK:     (('word-0', 0x3d),
    226 // CHECK:      ('word-1', 0xe000000)),
    227 // CHECK:     # Relocation 23
    228 // CHECK:     (('word-0', 0x35),
    229 // CHECK:      ('word-1', 0xe000000)),
    230 // CHECK:     # Relocation 24
    231 // CHECK:     (('word-0', 0x2d),
    232 // CHECK:      ('word-1', 0x8d000000)),
    233 // CHECK:     # Relocation 25
    234 // CHECK:     (('word-0', 0x26),
    235 // CHECK:      ('word-1', 0x6d000000)),
    236 // CHECK:     # Relocation 26
    237 // CHECK:     (('word-0', 0x20),
    238 // CHECK:      ('word-1', 0x1d000000)),
    239 // CHECK:     # Relocation 27
    240 // CHECK:     (('word-0', 0x1a),
    241 // CHECK:      ('word-1', 0x1d000000)),
    242 // CHECK:     # Relocation 28
    243 // CHECK:     (('word-0', 0x14),
    244 // CHECK:      ('word-1', 0x4d000000)),
    245 // CHECK:     # Relocation 29
    246 // CHECK:     (('word-0', 0xe),
    247 // CHECK:      ('word-1', 0x3d000000)),
    248 // CHECK:     # Relocation 30
    249 // CHECK:     (('word-0', 0x7),
    250 // CHECK:      ('word-1', 0x2d000000)),
    251 // CHECK:     # Relocation 31
    252 // CHECK:     (('word-0', 0x2),
    253 // CHECK:      ('word-1', 0x2d000000)),
    254 // CHECK:   ])
    255 // CHECK:   ('_section_data', 'c3e80000 0000e804 00000048 8b050000 0000ff35 00000000 8b050000 00008b05 04000000 c605ffff ffff12c7 05fcffff ff785634 12000000 00000000 00040000 00000000 00000000 00000000 00040000 00000000 00000000 00488d05 2c000000 488d0514 00000083 05130000 00066681 05120000 00f40181 05100000 00f40100 00909090 90909090 90909090 902c0000 00000000 00140000 00000000 00e4ffff ffffffff ffd4ffff ffffffff ff2c0000 00000000 0083c000 03042503 0000008b 051fffff ff8b052c 0000008b 05000000 008b0530 00000048 833dffff ffff00')
    256 // CHECK:     # Section 2
    257 // CHECK:    (('section_name', '__debug_frame\x00\x00\x00')
    258 // CHECK:     ('segment_name', '__DWARF\x00\x00\x00\x00\x00\x00\x00\x00\x00')
    259 // CHECK:     ('address', 263)
    260 // CHECK:     ('size', 16)
    261 // CHECK:     ('offset', 791)
    262 // CHECK:     ('alignment', 0)
    263 // CHECK:     ('reloc_offset', 1136)
    264 // CHECK:     ('num_reloc', 2)
    265 // CHECK:     ('flags', 0x2000000)
    266 // CHECK:     ('reserved1', 0)
    267 // CHECK:     ('reserved2', 0)
    268 // CHECK:     ('reserved3', 0)
    269 // CHECK:    ),
    270 // CHECK:   ('_relocations', [
    271 // CHECK:     # Relocation 0
    272 // CHECK:     (('word-0', 0x8),
    273 // CHECK:      ('word-1', 0xe000007)),
    274 // CHECK:     # Relocation 1
    275 // CHECK:     (('word-0', 0x0),
    276 // CHECK:      ('word-1', 0x6000002)),
    277 // CHECK:   ])
    278 // CHECK:   ('_section_data', 'd5000000 00000000 00000000 00000000')
    279 // CHECK:     # Section 3
    280 // CHECK:    (('section_name', '__literal8\x00\x00\x00\x00\x00\x00')
    281 // CHECK:     ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
    282 // CHECK:     ('address', 279)
    283 // CHECK:     ('size', 32)
    284 // CHECK:     ('offset', 807)
    285 // CHECK:     ('alignment', 0)
    286 // CHECK:     ('reloc_offset', 0)
    287 // CHECK:     ('num_reloc', 0)
    288 // CHECK:     ('flags', 0x4)
    289 // CHECK:     ('reserved1', 0)
    290 // CHECK:     ('reserved2', 0)
    291 // CHECK:     ('reserved3', 0)
    292 // CHECK:    ),
    293 // CHECK:   ('_relocations', [
    294 // CHECK:   ])
    295 // CHECK:   ('_section_data', '00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000')
    296 // CHECK:   ])
    297 // CHECK:  ),
    298 // CHECK:   # Load Command 1
    299 // CHECK:  (('command', 2)
    300 // CHECK:   ('size', 24)
    301 // CHECK:   ('symoff', 1152)
    302 // CHECK:   ('nsyms', 9)
    303 // CHECK:   ('stroff', 1296)
    304 // CHECK:   ('strsize', 52)
    305 // CHECK:   ('_string_data', '\x00_foobar\x00_ext_foo\x00_foo\x00_baz\x00_bar\x00_prev\x00_f2\x00_f3\x00f6\x00\x00\x00')
    306 // CHECK:   ('_symbols', [
    307 // CHECK:     # Symbol 0
    308 // CHECK:    (('n_strx', 18)
    309 // CHECK:     ('n_type', 0xe)
    310 // CHECK:     ('n_sect', 2)
    311 // CHECK:     ('n_desc', 0)
    312 // CHECK:     ('n_value', 40)
    313 // CHECK:     ('_string', '_foo')
    314 // CHECK:    ),
    315 // CHECK:     # Symbol 1
    316 // CHECK:    (('n_strx', 23)
    317 // CHECK:     ('n_type', 0xe)
    318 // CHECK:     ('n_sect', 2)
    319 // CHECK:     ('n_desc', 0)
    320 // CHECK:     ('n_value', 41)
    321 // CHECK:     ('_string', '_baz')
    322 // CHECK:    ),
    323 // CHECK:     # Symbol 2
    324 // CHECK:    (('n_strx', 28)
    325 // CHECK:     ('n_type', 0xe)
    326 // CHECK:     ('n_sect', 2)
    327 // CHECK:     ('n_desc', 0)
    328 // CHECK:     ('n_value', 101)
    329 // CHECK:     ('_string', '_bar')
    330 // CHECK:    ),
    331 // CHECK:     # Symbol 3
    332 // CHECK:    (('n_strx', 33)
    333 // CHECK:     ('n_type', 0xe)
    334 // CHECK:     ('n_sect', 2)
    335 // CHECK:     ('n_desc', 0)
    336 // CHECK:     ('n_value', 169)
    337 // CHECK:     ('_string', '_prev')
    338 // CHECK:    ),
    339 // CHECK:     # Symbol 4
    340 // CHECK:    (('n_strx', 39)
    341 // CHECK:     ('n_type', 0xe)
    342 // CHECK:     ('n_sect', 2)
    343 // CHECK:     ('n_desc', 0)
    344 // CHECK:     ('n_value', 221)
    345 // CHECK:     ('_string', '_f2')
    346 // CHECK:    ),
    347 // CHECK:     # Symbol 5
    348 // CHECK:    (('n_strx', 43)
    349 // CHECK:     ('n_type', 0xe)
    350 // CHECK:     ('n_sect', 2)
    351 // CHECK:     ('n_desc', 0)
    352 // CHECK:     ('n_value', 224)
    353 // CHECK:     ('_string', '_f3')
    354 // CHECK:    ),
    355 // CHECK:     # Symbol 6
    356 // CHECK:    (('n_strx', 47)
    357 // CHECK:     ('n_type', 0xe)
    358 // CHECK:     ('n_sect', 4)
    359 // CHECK:     ('n_desc', 0)
    360 // CHECK:     ('n_value', 295)
    361 // CHECK:     ('_string', 'f6')
    362 // CHECK:    ),
    363 // CHECK:     # Symbol 7
    364 // CHECK:    (('n_strx', 9)
    365 // CHECK:     ('n_type', 0x1)
    366 // CHECK:     ('n_sect', 0)
    367 // CHECK:     ('n_desc', 0)
    368 // CHECK:     ('n_value', 0)
    369 // CHECK:     ('_string', '_ext_foo')
    370 // CHECK:    ),
    371 // CHECK:     # Symbol 8
    372 // CHECK:    (('n_strx', 1)
    373 // CHECK:     ('n_type', 0x1)
    374 // CHECK:     ('n_sect', 0)
    375 // CHECK:     ('n_desc', 0)
    376 // CHECK:     ('n_value', 0)
    377 // CHECK:     ('_string', '_foobar')
    378 // CHECK:    ),
    379 // CHECK:   ])
    380 // CHECK:  ),
    381 // CHECK:   # Load Command 2
    382 // CHECK:  (('command', 11)
    383 // CHECK:   ('size', 80)
    384 // CHECK:   ('ilocalsym', 0)
    385 // CHECK:   ('nlocalsym', 7)
    386 // CHECK:   ('iextdefsym', 7)
    387 // CHECK:   ('nextdefsym', 0)
    388 // CHECK:   ('iundefsym', 7)
    389 // CHECK:   ('nundefsym', 2)
    390 // CHECK:   ('tocoff', 0)
    391 // CHECK:   ('ntoc', 0)
    392 // CHECK:   ('modtaboff', 0)
    393 // CHECK:   ('nmodtab', 0)
    394 // CHECK:   ('extrefsymoff', 0)
    395 // CHECK:   ('nextrefsyms', 0)
    396 // CHECK:   ('indirectsymoff', 0)
    397 // CHECK:   ('nindirectsyms', 0)
    398 // CHECK:   ('extreloff', 0)
    399 // CHECK:   ('nextrel', 0)
    400 // CHECK:   ('locreloff', 0)
    401 // CHECK:   ('nlocrel', 0)
    402 // CHECK:   ('_indirect_symbols', [
    403 // CHECK:   ])
    404 // CHECK:  ),
    405 // CHECK: ])
    406