Home | History | Annotate | Download | only in MachO
      1 // RUN: llvm-mc -n -triple x86_64-apple-darwin9 %s -filetype=obj -o - | llvm-readobj -r --expand-relocs | 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:      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
     98 // CHECK-NEXT:     }
     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
    105 // CHECK-NEXT:     }
    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
    112 // CHECK-NEXT:     }
    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
    119 // CHECK-NEXT:     }
    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
    126 // CHECK-NEXT:     }
    127 // CHECK-NEXT:   }
    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
    135 // CHECK-NEXT:     }
    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
    142 // CHECK-NEXT:     }
    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
    149 // CHECK-NEXT:     }
    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
    156 // CHECK-NEXT:     }
    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
    163 // CHECK-NEXT:     }
    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
    170 // CHECK-NEXT:     }
    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
    177 // CHECK-NEXT:     }
    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
    184 // CHECK-NEXT:     }
    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
    191 // CHECK-NEXT:     }
    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
    198 // CHECK-NEXT:     }
    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
    205 // CHECK-NEXT:     }
    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
    212 // CHECK-NEXT:     }
    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
    219 // CHECK-NEXT:     }
    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
    226 // CHECK-NEXT:     }
    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
    233 // CHECK-NEXT:     }
    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
    240 // CHECK-NEXT:     }
    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
    247 // CHECK-NEXT:     }
    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
    254 // CHECK-NEXT:     }
    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
    261 // CHECK-NEXT:     }
    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
    268 // CHECK-NEXT:     }
    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
    275 // CHECK-NEXT:     }
    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
    282 // CHECK-NEXT:     }
    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
    289 // CHECK-NEXT:     }
    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
    296 // CHECK-NEXT:     }
    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
    303 // CHECK-NEXT:     }
    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
    310 // CHECK-NEXT:     }
    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
    317 // CHECK-NEXT:     }
    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
    324 // CHECK-NEXT:     }
    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
    331 // CHECK-NEXT:     }
    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
    338 // CHECK-NEXT:     }
    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
    345 // CHECK-NEXT:     }
    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
    352 // CHECK-NEXT:     }
    353 // CHECK-NEXT:   }
    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
    361 // CHECK-NEXT:     }
    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
    368 // CHECK-NEXT:     }
    369 // CHECK-NEXT:   }
    370 // CHECK-NEXT: ]
    371