1 // The purpose of this test is to see if the COFF object writer is emitting the 2 // proper relocations for multiple pieces of data in a single data fragment. 3 4 // RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | coff-dump.py | FileCheck %s 5 // I WOULD RUN, BUT THIS FAILS: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s 6 7 .def _main; 8 .scl 2; 9 .type 32; 10 .endef 11 .text 12 .globl _main 13 .align 16, 0x90 14 _main: # @main 15 # BB#0: # %entry 16 subl $4, %esp 17 movl $L_.str0, (%esp) 18 calll _printf 19 movl $L_.str1, (%esp) 20 calll _puts 21 movl $L_.str2, (%esp) 22 calll _puts 23 xorl %eax, %eax 24 addl $4, %esp 25 ret 26 27 .data 28 L_.str0: # @.str0 29 .asciz "Hello " 30 31 L_.str1: # @.str1 32 .asciz "World!" 33 34 .align 16 # @.str2 35 L_.str2: 36 .asciz "I'm The Last Line." 37 38 // CHECK: { 39 // CHECK: MachineType = IMAGE_FILE_MACHINE_I386 (0x14C) 40 // CHECK: NumberOfSections = 2 41 // CHECK: TimeDateStamp = {{[0-9]+}} 42 // CHECK: PointerToSymbolTable = 0x{{[0-9A-F]+}} 43 // CHECK: NumberOfSymbols = 7 44 // CHECK: SizeOfOptionalHeader = 0 45 // CHECK: Characteristics = 0x0 46 // CHECK: Sections = [ 47 // CHECK: 1 = { 48 // CHECK: Name = .text 49 // CHECK: VirtualSize = 0 50 // CHECK: VirtualAddress = 0 51 // CHECK: SizeOfRawData = {{[0-9]+}} 52 // CHECK: PointerToRawData = 0x{{[0-9A-F]+}} 53 // CHECK: PointerToRelocations = 0x{{[0-9A-F]+}} 54 // CHECK: PointerToLineNumbers = 0x0 55 // CHECK: NumberOfRelocations = 6 56 // CHECK: NumberOfLineNumbers = 0 57 // CHECK: Charateristics = 0x60500020 58 // CHECK: IMAGE_SCN_CNT_CODE 59 // CHECK: IMAGE_SCN_ALIGN_16BYTES 60 // CHECK: IMAGE_SCN_MEM_EXECUTE 61 // CHECK: IMAGE_SCN_MEM_READ 62 // CHECK: SectionData = 63 // CHECK: 83 EC 04 C7 04 24 00 00 - 00 00 E8 00 00 00 00 C7 |.....$..........| 64 // CHECK: 04 24 07 00 00 00 E8 00 - 00 00 00 C7 04 24 10 00 |.$...........$..| 65 // CHECK: 00 00 E8 00 00 00 00 31 - C0 83 C4 04 C3 |.......1.....| 66 // CHECK: Relocations = [ 67 // CHECK: 0 = { 68 // CHECK: VirtualAddress = 0x6 69 // CHECK: SymbolTableIndex = 2 70 // CHECK: Type = IMAGE_REL_I386_DIR32 (6) 71 // CHECK: SymbolName = .data 72 // CHECK: } 73 // CHECK: 1 = { 74 // CHECK: VirtualAddress = 0xB 75 // CHECK: SymbolTableIndex = 5 76 // CHECK: Type = IMAGE_REL_I386_REL32 (20) 77 // CHECK: SymbolName = _printf 78 // CHECK: } 79 // CHECK: 2 = { 80 // CHECK: VirtualAddress = 0x12 81 // CHECK: SymbolTableIndex = 2 82 // CHECK: Type = IMAGE_REL_I386_DIR32 (6) 83 // CHECK: SymbolName = .data 84 // CHECK: } 85 // CHECK: 3 = { 86 // CHECK: VirtualAddress = 0x17 87 // CHECK: SymbolTableIndex = 6 88 // CHECK: Type = IMAGE_REL_I386_REL32 (20) 89 // CHECK: SymbolName = _puts 90 // CHECK: } 91 // CHECK: 4 = { 92 // CHECK: VirtualAddress = 0x1E 93 // CHECK: SymbolTableIndex = 2 94 // CHECK: Type = IMAGE_REL_I386_DIR32 (6) 95 // CHECK: SymbolName = .data 96 // CHECK: } 97 // CHECK: 5 = { 98 // CHECK: VirtualAddress = 0x23 99 // CHECK: SymbolTableIndex = 6 100 // CHECK: Type = IMAGE_REL_I386_REL32 (20) 101 // CHECK: SymbolName = _puts 102 // CHECK: } 103 // CHECK: ] 104 // CHECK: } 105 // CHECK: 2 = { 106 // CHECK: Name = .data 107 // CHECK: VirtualSize = 0 108 // CHECK: VirtualAddress = 0 109 // CHECK: SizeOfRawData = {{[0-9]+}} 110 // CHECK: PointerToRawData = 0x{{[0-9A-F]+}} 111 // CHECK: PointerToRelocations = 0x0 112 // CHECK: PointerToLineNumbers = 0x0 113 // CHECK: NumberOfRelocations = 0 114 // CHECK: NumberOfLineNumbers = 0 115 // CHECK: Charateristics = 0xC0500040 116 // CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA 117 // CHECK: IMAGE_SCN_ALIGN_16BYTES 118 // CHECK: IMAGE_SCN_MEM_READ 119 // CHECK: IMAGE_SCN_MEM_WRITE 120 // CHECK: SectionData = 121 // CHECK: 48 65 6C 6C 6F 20 00 57 - 6F 72 6C 64 21 00 00 00 |Hello .World!...| 122 // CHECK: 49 27 6D 20 54 68 65 20 - 4C 61 73 74 20 4C 69 6E |I'm The Last Lin| 123 // CHECK: 65 2E 00 |e..| 124 // CHECK: Relocations = None 125 // CHECK: } 126 // CHECK: ] 127 // CHECK: Symbols = [ 128 // CHECK: 0 = { 129 // CHECK: Name = .text 130 // CHECK: Value = 0 131 // CHECK: SectionNumber = 1 132 // CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0) 133 // CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0) 134 // CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3) 135 // CHECK: NumberOfAuxSymbols = 1 136 // CHECK: AuxillaryData = 137 // CHECK: 2D 00 00 00 06 00 00 00 - 00 00 00 00 01 00 00 00 |-...............| 138 // CHECK: 00 00 |..| 139 140 // CHECK: } 141 // CHECK: 2 = { 142 // CHECK: Name = .data 143 // CHECK: Value = 0 144 // CHECK: SectionNumber = 2 145 // CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0) 146 // CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0) 147 // CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3) 148 // CHECK: NumberOfAuxSymbols = 1 149 // CHECK: AuxillaryData = 150 // CHECK: 23 00 00 00 00 00 00 00 - 00 00 00 00 02 00 00 00 |#...............| 151 // CHECK: 00 00 |..| 152 153 // CHECK: } 154 // CHECK: 4 = { 155 // CHECK: Name = _main 156 // CHECK: Value = 0 157 // CHECK: SectionNumber = 1 158 // CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0) 159 // CHECK: ComplexType = IMAGE_SYM_DTYPE_FUNCTION (2) 160 // CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2) 161 // CHECK: NumberOfAuxSymbols = 0 162 // CHECK: AuxillaryData = 163 164 // CHECK: 5 = { 165 // CHECK: Name = _printf 166 // CHECK: Value = 0 167 // CHECK: SectionNumber = 0 168 // CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0) 169 // CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0) 170 // CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2) 171 // CHECK: NumberOfAuxSymbols = 0 172 // CHECK: AuxillaryData = 173 174 // CHECK: } 175 // CHECK: 6 = { 176 // CHECK: Name = _puts 177 // CHECK: Value = 0 178 // CHECK: SectionNumber = 0 179 // CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0) 180 // CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0) 181 // CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2) 182 // CHECK: NumberOfAuxSymbols = 0 183 // CHECK: AuxillaryData = 184 185 // CHECK: } 186 // CHECK: ] 187 // CHECK: } 188