// The purpose of this test is to see if the COFF object writer is emitting the // proper relocations for multiple pieces of data in a single data fragment. // RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | llvm-readobj -h -s -sr -sd -t | FileCheck %s .def _main; .scl 2; .type 32; .endef .text .globl _main .align 16, 0x90 _main: # @main # BB#0: # %entry subl $4, %esp movl $L_.str0, (%esp) calll _printf movl $L_.str1, (%esp) calll _puts movl $L_.str2, (%esp) calll _puts xorl %eax, %eax addl $4, %esp ret .data L_.str0: # @.str0 .asciz "Hello " L_.str1: # @.str1 .asciz "World!" .align 16 # @.str2 L_.str2: .asciz "I'm The Last Line." // CHECK: { // CHECK: Machine: IMAGE_FILE_MACHINE_I386 (0x14C) // CHECK: SectionCount: 2 // CHECK: TimeDateStamp: {{[0-9]+}} // CHECK: PointerToSymbolTable: 0x{{[0-9A-F]+}} // CHECK: SymbolCount: 7 // CHECK: OptionalHeaderSize: 0 // CHECK: Characteristics [ (0x0) // CHECK: ] // CHECK: } // CHECK: Sections [ // CHECK: Section { // CHECK: Number: 1 // CHECK: Name: .text // CHECK: VirtualSize: 0 // CHECK: VirtualAddress: 0 // CHECK: RawDataSize: {{[0-9]+}} // CHECK: PointerToRawData: 0x{{[0-9A-F]+}} // CHECK: PointerToRelocations: 0x{{[0-9A-F]+}} // CHECK: PointerToLineNumbers: 0x0 // CHECK: RelocationCount: 6 // CHECK: LineNumberCount: 0 // CHECK: Characteristics [ (0x60500020) // CHECK: IMAGE_SCN_ALIGN_16BYTES // CHECK: IMAGE_SCN_CNT_CODE // CHECK: IMAGE_SCN_MEM_EXECUTE // CHECK: IMAGE_SCN_MEM_READ // CHECK: ] // CHECK: Relocations [ // CHECK: 0x6 IMAGE_REL_I386_DIR32 .data // CHECK: 0xB IMAGE_REL_I386_REL32 _printf // CHECK: 0x12 IMAGE_REL_I386_DIR32 .data // CHECK: 0x17 IMAGE_REL_I386_REL32 _puts // CHECK: 0x1E IMAGE_REL_I386_DIR32 .data // CHECK: 0x23 IMAGE_REL_I386_REL32 _puts // CHECK: ] // CHECK: SectionData ( // CHECK: 0000: 83EC04C7 04240000 0000E800 000000C7 |.....$..........| // CHECK: 0010: 04240700 0000E800 000000C7 04241000 |.$...........$..| // CHECK: 0020: 0000E800 00000031 C083C404 C3 |.......1.....| // CHECK: ) // CHECK: } // CHECK: Section { // CHECK: Number: 2 // CHECK: Name: .data // CHECK: VirtualSize: 0 // CHECK: VirtualAddress: 0 // CHECK: RawDataSize: {{[0-9]+}} // CHECK: PointerToRawData: 0x{{[0-9A-F]+}} // CHECK: PointerToRelocations: 0x0 // CHECK: PointerToLineNumbers: 0x0 // CHECK: RelocationCount: 0 // CHECK: LineNumberCount: 0 // CHECK: Characteristics [ (0xC0500040) // CHECK: IMAGE_SCN_ALIGN_16BYTES // CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA // CHECK: IMAGE_SCN_MEM_READ // CHECK: IMAGE_SCN_MEM_WRITE // CHECK: Relocations [ // CHECK: ] // CHECK: SectionData ( // CHECK: 0000: 48656C6C 6F200057 6F726C64 21000000 |Hello .World!...| // CHECK: 0010: 49276D20 54686520 4C617374 204C696E |I'm The Last Lin| // CHECK: 0020: 652E00 |e..| // CHECK: ) // CHECK: } // CHECK: ] // CHECK: Symbols [ // CHECK: Symbol { // CHECK: Name: .text // CHECK: Value: 0 // CHECK: Section: .text // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: Static // CHECK: AuxSymbolCount: 1 // CHECK: AuxSectionDef { // CHECK: Length: 45 // CHECK: RelocationCount: 6 // CHECK: LineNumberCount: 0 // CHECK: Checksum: 0x0 // CHECK: Number: 1 // CHECK: Selection: 0x0 // CHECK: Unused: (00 00 00) // CHECK: } // CHECK: } // CHECK: Symbol { // CHECK: Name: .data // CHECK: Value: 0 // CHECK: Section: .data // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: Static // CHECK: AuxSymbolCount: 1 // CHECK: AuxSectionDef { // CHECK: Length: 35 // CHECK: RelocationCount: 0 // CHECK: LineNumberCount: 0 // CHECK: Checksum: 0x0 // CHECK: Number: 2 // CHECK: Selection: 0x0 // CHECK: Unused: (00 00 00) // CHECK: } // CHECK: } // CHECK: Symbol { // CHECK: Name: _main // CHECK: Value: 0 // CHECK: Section: .text // CHECK: BaseType: Null // CHECK: ComplexType: Function // CHECK: StorageClass: External // CHECK: AuxSymbolCount: 0 // CHECK: } // CHECK: Symbol { // CHECK: Name: _printf // CHECK: Value: 0 // CHECK: Section: (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External // CHECK: AuxSymbolCount: 0 // CHECK: } // CHECK: Symbol { // CHECK: Name: _puts // CHECK: Value: 0 // CHECK: Section: (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External // CHECK: AuxSymbolCount: 0 // CHECK: } // CHECK: ]