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