Home | History | Annotate | Download | only in MachO
      1 // RUN: llvm-mc -triple i386-apple-darwin9 %s -filetype=obj -o - | llvm-readobj -file-headers -s -sd -r -t -macho-segment -macho-dysymtab -macho-indirect-symbols | FileCheck %s
      2 
      3 # 1 byte nop test
      4         .align 4, 0 # start with 16 byte alignment filled with zeros
      5         ret
      6         # nop
      7         # 0x90
      8         .align 1, 0x90
      9         ret
     10 # 2 byte nop test
     11         .align 4, 0 # start with 16 byte alignment filled with zeros
     12         ret
     13         ret
     14         # xchg %ax,%ax
     15         # 0x66, 0x90
     16         .align 2, 0x90
     17         ret
     18 # 3 byte nop test
     19         .align 4, 0 # start with 16 byte alignment filled with zeros
     20         ret
     21         # nopl (%[re]ax)
     22         # 0x0f, 0x1f, 0x00
     23         .align 2, 0x90
     24         ret
     25 # 4 byte nop test
     26         .align 4, 0 # start with 16 byte alignment filled with zeros
     27         ret
     28         ret
     29         ret
     30         ret
     31         # nopl 0(%[re]ax)
     32         # 0x0f, 0x1f, 0x40, 0x00
     33         .align 3, 0x90
     34         ret
     35 # 5 byte nop test
     36         .align 4, 0 # start with 16 byte alignment filled with zeros
     37         ret
     38         ret
     39         ret
     40         # nopl 0(%[re]ax,%[re]ax,1)
     41         # 0x0f, 0x1f, 0x44, 0x00, 0x00
     42         .align 3, 0x90
     43         ret
     44 # 6 byte nop test
     45         .align 4, 0 # start with 16 byte alignment filled with zeros
     46         ret
     47         ret
     48         # nopw 0(%[re]ax,%[re]ax,1)
     49         # 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00
     50         .align 3, 0x90
     51         ret
     52 # 7 byte nop test
     53         .align 4, 0 # start with 16 byte alignment filled with zeros
     54         ret
     55         # nopl 0L(%[re]ax)
     56         # 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00
     57         .align 3, 0x90
     58         ret
     59 # 8 byte nop test
     60         .align 4, 0 # start with 16 byte alignment filled with zeros
     61         ret
     62         ret
     63         ret
     64         ret
     65         ret
     66         ret
     67         ret
     68         ret
     69         # nopl 0L(%[re]ax,%[re]ax,1)
     70         # 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00
     71         .align 3, 0x90
     72         ret
     73 # 9 byte nop test
     74         .align 4, 0 # start with 16 byte alignment filled with zeros
     75         ret
     76         ret
     77         ret
     78         ret
     79         ret
     80         ret
     81         ret
     82         # nopw 0L(%[re]ax,%[re]ax,1)
     83         # 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00
     84         .align 4, 0x90
     85         ret
     86 # 10 byte nop test
     87         .align 4, 0 # start with 16 byte alignment filled with zeros
     88         ret
     89         ret
     90         ret
     91         ret
     92         ret
     93         ret
     94         ret
     95         # nopw %cs:0L(%[re]ax,%[re]ax,1)
     96         # 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00
     97         .align 4, 0x90
     98         ret
     99 # 11 byte nop test
    100         .align 4, 0 # start with 16 byte alignment filled with zeros
    101         ret
    102         ret
    103         ret
    104         ret
    105         ret
    106         # nopw %cs:0L(%[re]ax,%[re]ax,1)
    107         # 0x66, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00
    108         .align 4, 0x90
    109         ret
    110 # 12 byte nop test
    111         .align 4, 0 # start with 16 byte alignment filled with zeros
    112         ret
    113         ret
    114         ret
    115         ret
    116         # nopw 0(%[re]ax,%[re]ax,1)
    117         # nopw 0(%[re]ax,%[re]ax,1)
    118         # 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00,
    119         # 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00
    120         .align 4, 0x90
    121         ret
    122 # 13 byte nop test
    123         .align 4, 0 # start with 16 byte alignment filled with zeros
    124         ret
    125         ret
    126         ret
    127         # nopw 0(%[re]ax,%[re]ax,1)
    128         # nopl 0L(%[re]ax)
    129         # 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00,
    130         # 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00
    131         .align 4, 0x90
    132         ret
    133 # 14 byte nop test
    134         .align 4, 0 # start with 16 byte alignment filled with zeros
    135         ret
    136         ret
    137         # nopl 0L(%[re]ax)
    138         # nopl 0L(%[re]ax)
    139         # 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00,
    140         # 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00
    141         .align 4, 0x90
    142         ret
    143 # 15 byte nop test
    144         .align 4, 0 # start with 16 byte alignment filled with zeros
    145         ret
    146         # nopl 0L(%[re]ax)
    147         # nopl 0L(%[re]ax,%[re]ax,1)
    148         # 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00,
    149         # 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00
    150         .align 4, 0x90
    151         ret
    152 
    153         # Only the .text sections gets optimal nops.
    154 	.section	__TEXT,__const
    155 f0:
    156         .byte 0
    157 	.align	4, 0x90
    158         .long 0
    159 
    160 // CHECK: File: <stdin>
    161 // CHECK: Format: Mach-O 32-bit i386
    162 // CHECK: Arch: i386
    163 // CHECK: AddressSize: 32bit
    164 // CHECK: MachHeader {
    165 // CHECK:   Magic: Magic (0xFEEDFACE)
    166 // CHECK:   CpuType: X86 (0x7)
    167 // CHECK:   CpuSubType: CPU_SUBTYPE_I386_ALL (0x3)
    168 // CHECK:   FileType: Relocatable (0x1)
    169 // CHECK:   NumOfLoadCommands: 4
    170 // CHECK:   SizeOfLoadCommands: 312
    171 // CHECK:   Flags [ (0x0)
    172 // CHECK:   ]
    173 // CHECK: }
    174 // CHECK: Sections [
    175 // CHECK:   Section {
    176 // CHECK:     Index: 0
    177 // CHECK:     Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
    178 // CHECK:     Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
    179 // CHECK:     Address: 0x0
    180 // CHECK:     Size: 0x151
    181 // CHECK:     Offset: 340
    182 // CHECK:     Alignment: 4
    183 // CHECK:     RelocationOffset: 0x0
    184 // CHECK:     RelocationCount: 0
    185 // CHECK:     Type: 0x0
    186 // CHECK:     Attributes [ (0x800004)
    187 // CHECK:       PureInstructions (0x800000)
    188 // CHECK:       SomeInstructions (0x4)
    189 // CHECK:     ]
    190 // CHECK:     Reserved1: 0x0
    191 // CHECK:     Reserved2: 0x0
    192 // CHECK:     SectionData (
    193 // CHECK:       0000: C390C300 00000000 00000000 00000000  |................|
    194 // CHECK:       0010: C3C36690 C3000000 00000000 00000000  |..f.............|
    195 // CHECK:       0020: C30F1F00 C3000000 00000000 00000000  |................|
    196 // CHECK:       0030: C3C3C3C3 0F1F4000 C3000000 00000000  |...... (at) .........|
    197 // CHECK:       0040: C3C3C30F 1F440000 C3000000 00000000  |.....D..........|
    198 // CHECK:       0050: C3C3660F 1F440000 C3000000 00000000  |..f..D..........|
    199 // CHECK:       0060: C30F1F80 00000000 C3000000 00000000  |................|
    200 // CHECK:       0070: C3C3C3C3 C3C3C3C3 C3000000 00000000  |................|
    201 // CHECK:       0080: C3C3C3C3 C3C3C366 0F1F8400 00000000  |.......f........|
    202 // CHECK:       0090: C3000000 00000000 00000000 00000000  |................|
    203 // CHECK:       00A0: C3C3C3C3 C3C3C366 0F1F8400 00000000  |.......f........|
    204 // CHECK:       00B0: C3000000 00000000 00000000 00000000  |................|
    205 // CHECK:       00C0: C3C3C3C3 C366662E 0F1F8400 00000000  |.....ff.........|
    206 // CHECK:       00D0: C3000000 00000000 00000000 00000000  |................|
    207 // CHECK:       00E0: C3C3C3C3 6666662E 0F1F8400 00000000  |....fff.........|
    208 // CHECK:       00F0: C3000000 00000000 00000000 00000000  |................|
    209 // CHECK:       0100: C3C3C366 6666662E 0F1F8400 00000000  |...ffff.........|
    210 // CHECK:       0110: C3000000 00000000 00000000 00000000  |................|
    211 // CHECK:       0120: C3C36666 6666662E 0F1F8400 00000000  |..fffff.........|
    212 // CHECK:       0130: C3000000 00000000 00000000 00000000  |................|
    213 // CHECK:       0140: C3666666 6666662E 0F1F8400 00000000  |.ffffff.........|
    214 // CHECK:       0150: C3                                   |.|
    215 // CHECK:     )
    216 // CHECK:   }
    217 // CHECK:   Section {
    218 // CHECK:     Index: 1
    219 // CHECK:     Name: __const (5F 5F 63 6F 6E 73 74 00 00 00 00 00 00 00 00 00)
    220 // CHECK:     Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
    221 // CHECK:     Address: 0x160
    222 // CHECK:     Size: 0x14
    223 // CHECK:     Offset: 692
    224 // CHECK:     Alignment: 4
    225 // CHECK:     RelocationOffset: 0x0
    226 // CHECK:     RelocationCount: 0
    227 // CHECK:     Type: 0x0
    228 // CHECK:     Attributes [ (0x0)
    229 // CHECK:     ]
    230 // CHECK:     Reserved1: 0x0
    231 // CHECK:     Reserved2: 0x0
    232 // CHECK:     SectionData (
    233 // CHECK:       0000: 00909090 90909090 90909090 90909090  |................|
    234 // CHECK:       0010: 00000000                             |....|
    235 // CHECK:     )
    236 // CHECK:   }
    237 // CHECK: ]
    238 // CHECK: Relocations [
    239 // CHECK: ]
    240 // CHECK: Symbols [
    241 // CHECK:   Symbol {
    242 // CHECK:     Name: f0 (1)
    243 // CHECK:     Type: Section (0xE)
    244 // CHECK:     Section: __const (0x2)
    245 // CHECK:     RefType: UndefinedNonLazy (0x0)
    246 // CHECK:     Flags [ (0x0)
    247 // CHECK:     ]
    248 // CHECK:     Value: 0x160
    249 // CHECK:   }
    250 // CHECK: ]
    251 // CHECK: Indirect Symbols {
    252 // CHECK:   Number: 0
    253 // CHECK:   Symbols [
    254 // CHECK:   ]
    255 // CHECK: }
    256 // CHECK: Segment {
    257 // CHECK:   Cmd: LC_SEGMENT
    258 // CHECK:   Name:
    259 // CHECK:   Size: 192
    260 // CHECK:   vmaddr: 0x0
    261 // CHECK:   vmsize: 0x174
    262 // CHECK:   fileoff: 340
    263 // CHECK:   filesize: 372
    264 // CHECK:   maxprot: rwx
    265 // CHECK:   initprot: rwx
    266 // CHECK:   nsects: 2
    267 // CHECK:   flags: 0x0
    268 // CHECK: }
    269 // CHECK: Dysymtab {
    270 // CHECK:   ilocalsym: 0
    271 // CHECK:   nlocalsym: 1
    272 // CHECK:   iextdefsym: 1
    273 // CHECK:   nextdefsym: 0
    274 // CHECK:   iundefsym: 1
    275 // CHECK:   nundefsym: 0
    276 // CHECK:   tocoff: 0
    277 // CHECK:   ntoc: 0
    278 // CHECK:   modtaboff: 0
    279 // CHECK:   nmodtab: 0
    280 // CHECK:   extrefsymoff: 0
    281 // CHECK:   nextrefsyms: 0
    282 // CHECK:   indirectsymoff: 0
    283 // CHECK:   nindirectsyms: 0
    284 // CHECK:   extreloff: 0
    285 // CHECK:   nextrel: 0
    286 // CHECK:   locreloff: 0
    287 // CHECK:   nlocrel: 0
    288 // CHECK: }
    289