1*9880d681SAndroid Build Coastguard Worker// The purpose of this test is to see if the COFF object writer is emitting the 2*9880d681SAndroid Build Coastguard Worker// proper relocations for multiple pieces of data in a single data fragment. 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | llvm-readobj -h -s -sr -sd -t | FileCheck %s 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker.def _main; 7*9880d681SAndroid Build Coastguard Worker .scl 2; 8*9880d681SAndroid Build Coastguard Worker .type 32; 9*9880d681SAndroid Build Coastguard Worker .endef 10*9880d681SAndroid Build Coastguard Worker .text 11*9880d681SAndroid Build Coastguard Worker .globl _main 12*9880d681SAndroid Build Coastguard Worker .align 16, 0x90 13*9880d681SAndroid Build Coastguard Worker_main: # @main 14*9880d681SAndroid Build Coastguard Worker# BB#0: # %entry 15*9880d681SAndroid Build Coastguard Worker subl $4, %esp 16*9880d681SAndroid Build Coastguard Worker movl $L_.str0, (%esp) 17*9880d681SAndroid Build Coastguard Worker calll _printf 18*9880d681SAndroid Build Coastguard Worker movl $L_.str1, (%esp) 19*9880d681SAndroid Build Coastguard Worker calll _puts 20*9880d681SAndroid Build Coastguard Worker movl $L_.str2, (%esp) 21*9880d681SAndroid Build Coastguard Worker calll _puts 22*9880d681SAndroid Build Coastguard Worker xorl %eax, %eax 23*9880d681SAndroid Build Coastguard Worker addl $4, %esp 24*9880d681SAndroid Build Coastguard Worker ret 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker .data 27*9880d681SAndroid Build Coastguard WorkerL_.str0: # @.str0 28*9880d681SAndroid Build Coastguard Worker .asciz "Hello " 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard WorkerL_.str1: # @.str1 31*9880d681SAndroid Build Coastguard Worker .asciz "World!" 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker .align 16 # @.str2 34*9880d681SAndroid Build Coastguard WorkerL_.str2: 35*9880d681SAndroid Build Coastguard Worker .asciz "I'm The Last Line." 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker// CHECK: { 38*9880d681SAndroid Build Coastguard Worker// CHECK: Machine: IMAGE_FILE_MACHINE_I386 (0x14C) 39*9880d681SAndroid Build Coastguard Worker// CHECK: SectionCount: 3 40*9880d681SAndroid Build Coastguard Worker// CHECK: TimeDateStamp: {{[0-9]+}} 41*9880d681SAndroid Build Coastguard Worker// CHECK: PointerToSymbolTable: 0x{{[0-9A-F]+}} 42*9880d681SAndroid Build Coastguard Worker// CHECK: SymbolCount: 9 43*9880d681SAndroid Build Coastguard Worker// CHECK: OptionalHeaderSize: 0 44*9880d681SAndroid Build Coastguard Worker// CHECK: Characteristics [ (0x0) 45*9880d681SAndroid Build Coastguard Worker// CHECK: ] 46*9880d681SAndroid Build Coastguard Worker// CHECK: } 47*9880d681SAndroid Build Coastguard Worker// CHECK: Sections [ 48*9880d681SAndroid Build Coastguard Worker// CHECK: Section { 49*9880d681SAndroid Build Coastguard Worker// CHECK: Number: 1 50*9880d681SAndroid Build Coastguard Worker// CHECK: Name: .text 51*9880d681SAndroid Build Coastguard Worker// CHECK: VirtualSize: 0 52*9880d681SAndroid Build Coastguard Worker// CHECK: VirtualAddress: 0 53*9880d681SAndroid Build Coastguard Worker// CHECK: RawDataSize: {{[0-9]+}} 54*9880d681SAndroid Build Coastguard Worker// CHECK: PointerToRawData: 0x{{[0-9A-F]+}} 55*9880d681SAndroid Build Coastguard Worker// CHECK: PointerToRelocations: 0x{{[0-9A-F]+}} 56*9880d681SAndroid Build Coastguard Worker// CHECK: PointerToLineNumbers: 0x0 57*9880d681SAndroid Build Coastguard Worker// CHECK: RelocationCount: 6 58*9880d681SAndroid Build Coastguard Worker// CHECK: LineNumberCount: 0 59*9880d681SAndroid Build Coastguard Worker// CHECK: Characteristics [ (0x60500020) 60*9880d681SAndroid Build Coastguard Worker// CHECK: IMAGE_SCN_ALIGN_16BYTES 61*9880d681SAndroid Build Coastguard Worker// CHECK: IMAGE_SCN_CNT_CODE 62*9880d681SAndroid Build Coastguard Worker// CHECK: IMAGE_SCN_MEM_EXECUTE 63*9880d681SAndroid Build Coastguard Worker// CHECK: IMAGE_SCN_MEM_READ 64*9880d681SAndroid Build Coastguard Worker// CHECK: ] 65*9880d681SAndroid Build Coastguard Worker// CHECK: Relocations [ 66*9880d681SAndroid Build Coastguard Worker// CHECK: 0x6 IMAGE_REL_I386_DIR32 .data 67*9880d681SAndroid Build Coastguard Worker// CHECK: 0xB IMAGE_REL_I386_REL32 _printf 68*9880d681SAndroid Build Coastguard Worker// CHECK: 0x12 IMAGE_REL_I386_DIR32 .data 69*9880d681SAndroid Build Coastguard Worker// CHECK: 0x17 IMAGE_REL_I386_REL32 _puts 70*9880d681SAndroid Build Coastguard Worker// CHECK: 0x1E IMAGE_REL_I386_DIR32 .data 71*9880d681SAndroid Build Coastguard Worker// CHECK: 0x23 IMAGE_REL_I386_REL32 _puts 72*9880d681SAndroid Build Coastguard Worker// CHECK: ] 73*9880d681SAndroid Build Coastguard Worker// CHECK: SectionData ( 74*9880d681SAndroid Build Coastguard Worker// CHECK: 0000: 83EC04C7 04240000 0000E800 000000C7 |.....$..........| 75*9880d681SAndroid Build Coastguard Worker// CHECK: 0010: 04240700 0000E800 000000C7 04241000 |.$...........$..| 76*9880d681SAndroid Build Coastguard Worker// CHECK: 0020: 0000E800 00000031 C083C404 C3 |.......1.....| 77*9880d681SAndroid Build Coastguard Worker// CHECK: ) 78*9880d681SAndroid Build Coastguard Worker// CHECK: } 79*9880d681SAndroid Build Coastguard Worker// CHECK: Section { 80*9880d681SAndroid Build Coastguard Worker// CHECK: Number: 2 81*9880d681SAndroid Build Coastguard Worker// CHECK: Name: .data 82*9880d681SAndroid Build Coastguard Worker// CHECK: VirtualSize: 0 83*9880d681SAndroid Build Coastguard Worker// CHECK: VirtualAddress: 0 84*9880d681SAndroid Build Coastguard Worker// CHECK: RawDataSize: {{[0-9]+}} 85*9880d681SAndroid Build Coastguard Worker// CHECK: PointerToRawData: 0x{{[0-9A-F]+}} 86*9880d681SAndroid Build Coastguard Worker// CHECK: PointerToRelocations: 0x0 87*9880d681SAndroid Build Coastguard Worker// CHECK: PointerToLineNumbers: 0x0 88*9880d681SAndroid Build Coastguard Worker// CHECK: RelocationCount: 0 89*9880d681SAndroid Build Coastguard Worker// CHECK: LineNumberCount: 0 90*9880d681SAndroid Build Coastguard Worker// CHECK: Characteristics [ (0xC0500040) 91*9880d681SAndroid Build Coastguard Worker// CHECK: IMAGE_SCN_ALIGN_16BYTES 92*9880d681SAndroid Build Coastguard Worker// CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA 93*9880d681SAndroid Build Coastguard Worker// CHECK: IMAGE_SCN_MEM_READ 94*9880d681SAndroid Build Coastguard Worker// CHECK: IMAGE_SCN_MEM_WRITE 95*9880d681SAndroid Build Coastguard Worker// CHECK: Relocations [ 96*9880d681SAndroid Build Coastguard Worker// CHECK: ] 97*9880d681SAndroid Build Coastguard Worker// CHECK: SectionData ( 98*9880d681SAndroid Build Coastguard Worker// CHECK: 0000: 48656C6C 6F200057 6F726C64 21000000 |Hello .World!...| 99*9880d681SAndroid Build Coastguard Worker// CHECK: 0010: 49276D20 54686520 4C617374 204C696E |I'm The Last Lin| 100*9880d681SAndroid Build Coastguard Worker// CHECK: 0020: 652E00 |e..| 101*9880d681SAndroid Build Coastguard Worker// CHECK: ) 102*9880d681SAndroid Build Coastguard Worker// CHECK: } 103*9880d681SAndroid Build Coastguard Worker// CHECK: ] 104*9880d681SAndroid Build Coastguard Worker// CHECK: Symbols [ 105*9880d681SAndroid Build Coastguard Worker// CHECK: Symbol { 106*9880d681SAndroid Build Coastguard Worker// CHECK: Name: .text 107*9880d681SAndroid Build Coastguard Worker// CHECK: Value: 0 108*9880d681SAndroid Build Coastguard Worker// CHECK: Section: .text 109*9880d681SAndroid Build Coastguard Worker// CHECK: BaseType: Null 110*9880d681SAndroid Build Coastguard Worker// CHECK: ComplexType: Null 111*9880d681SAndroid Build Coastguard Worker// CHECK: StorageClass: Static 112*9880d681SAndroid Build Coastguard Worker// CHECK: AuxSymbolCount: 1 113*9880d681SAndroid Build Coastguard Worker// CHECK: AuxSectionDef { 114*9880d681SAndroid Build Coastguard Worker// CHECK: Length: 45 115*9880d681SAndroid Build Coastguard Worker// CHECK: RelocationCount: 6 116*9880d681SAndroid Build Coastguard Worker// CHECK: LineNumberCount: 0 117*9880d681SAndroid Build Coastguard Worker// CHECK: Checksum: 0xDED1DC2 118*9880d681SAndroid Build Coastguard Worker// CHECK: Number: 1 119*9880d681SAndroid Build Coastguard Worker// CHECK: Selection: 0x0 120*9880d681SAndroid Build Coastguard Worker// CHECK: } 121*9880d681SAndroid Build Coastguard Worker// CHECK: } 122*9880d681SAndroid Build Coastguard Worker// CHECK: Symbol { 123*9880d681SAndroid Build Coastguard Worker// CHECK: Name: .data 124*9880d681SAndroid Build Coastguard Worker// CHECK: Value: 0 125*9880d681SAndroid Build Coastguard Worker// CHECK: Section: .data 126*9880d681SAndroid Build Coastguard Worker// CHECK: BaseType: Null 127*9880d681SAndroid Build Coastguard Worker// CHECK: ComplexType: Null 128*9880d681SAndroid Build Coastguard Worker// CHECK: StorageClass: Static 129*9880d681SAndroid Build Coastguard Worker// CHECK: AuxSymbolCount: 1 130*9880d681SAndroid Build Coastguard Worker// CHECK: AuxSectionDef { 131*9880d681SAndroid Build Coastguard Worker// CHECK: Length: 35 132*9880d681SAndroid Build Coastguard Worker// CHECK: RelocationCount: 0 133*9880d681SAndroid Build Coastguard Worker// CHECK: LineNumberCount: 0 134*9880d681SAndroid Build Coastguard Worker// CHECK: Checksum: 0xB0A4C21 135*9880d681SAndroid Build Coastguard Worker// CHECK: Number: 2 136*9880d681SAndroid Build Coastguard Worker// CHECK: Selection: 0x0 137*9880d681SAndroid Build Coastguard Worker// CHECK: } 138*9880d681SAndroid Build Coastguard Worker// CHECK: } 139*9880d681SAndroid Build Coastguard Worker// CHECK: Symbol { 140*9880d681SAndroid Build Coastguard Worker// CHECK: Name: _main 141*9880d681SAndroid Build Coastguard Worker// CHECK: Value: 0 142*9880d681SAndroid Build Coastguard Worker// CHECK: Section: .text 143*9880d681SAndroid Build Coastguard Worker// CHECK: BaseType: Null 144*9880d681SAndroid Build Coastguard Worker// CHECK: ComplexType: Function 145*9880d681SAndroid Build Coastguard Worker// CHECK: StorageClass: External 146*9880d681SAndroid Build Coastguard Worker// CHECK: AuxSymbolCount: 0 147*9880d681SAndroid Build Coastguard Worker// CHECK: } 148*9880d681SAndroid Build Coastguard Worker// CHECK: Symbol { 149*9880d681SAndroid Build Coastguard Worker// CHECK: Name: _printf 150*9880d681SAndroid Build Coastguard Worker// CHECK: Value: 0 151*9880d681SAndroid Build Coastguard Worker// CHECK: Section: IMAGE_SYM_UNDEFINED (0) 152*9880d681SAndroid Build Coastguard Worker// CHECK: BaseType: Null 153*9880d681SAndroid Build Coastguard Worker// CHECK: ComplexType: Null 154*9880d681SAndroid Build Coastguard Worker// CHECK: StorageClass: External 155*9880d681SAndroid Build Coastguard Worker// CHECK: AuxSymbolCount: 0 156*9880d681SAndroid Build Coastguard Worker// CHECK: } 157*9880d681SAndroid Build Coastguard Worker// CHECK: Symbol { 158*9880d681SAndroid Build Coastguard Worker// CHECK: Name: _puts 159*9880d681SAndroid Build Coastguard Worker// CHECK: Value: 0 160*9880d681SAndroid Build Coastguard Worker// CHECK: Section: IMAGE_SYM_UNDEFINED (0) 161*9880d681SAndroid Build Coastguard Worker// CHECK: BaseType: Null 162*9880d681SAndroid Build Coastguard Worker// CHECK: ComplexType: Null 163*9880d681SAndroid Build Coastguard Worker// CHECK: StorageClass: External 164*9880d681SAndroid Build Coastguard Worker// CHECK: AuxSymbolCount: 0 165*9880d681SAndroid Build Coastguard Worker// CHECK: } 166*9880d681SAndroid Build Coastguard Worker// CHECK: ] 167