Home | History | Annotate | Download | only in MachO
      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: }
    292