1 ; The purpose of this test is to see if the COFF object writer is emitting the
\r
2 ; proper relocations for multiple pieces of data in a single data fragment.
\r
4 ; RUN: llc -filetype=obj -mtriple i686-pc-win32 %s -o %t
\r
5 ; RUN: coff-dump.py %abs_tmp | FileCheck %s
\r
6 ; RUN: llc -filetype=obj -mtriple x86_64-pc-win32 %s -o %t
\r
8 @.str = private constant [7 x i8] c"Hello \00" ; <[7 x i8]*> [#uses=1]
\r
9 @str = internal constant [7 x i8] c"World!\00" ; <[7 x i8]*> [#uses=1]
\r
11 define i32 @main() nounwind {
\r
13 %call = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([7 x i8]* @.str, i32 0, i32 0)) nounwind ; <i32> [#uses=0]
\r
14 %puts = tail call i32 @puts(i8* getelementptr inbounds ([7 x i8]* @str, i32 0, i32 0)) ; <i32> [#uses=0]
\r
18 declare i32 @printf(i8* nocapture, ...) nounwind
\r
20 declare i32 @puts(i8* nocapture) nounwind
\r
23 ; CHECK: MachineType = IMAGE_FILE_MACHINE_I386 (0x14C)
\r
24 ; CHECK: NumberOfSections = 2
\r
25 ; CHECK: TimeDateStamp = {{[0-9]+}}
\r
26 ; CHECK: PointerToSymbolTable = 0xBB
\r
27 ; CHECK: NumberOfSymbols = 9
\r
28 ; CHECK: SizeOfOptionalHeader = 0
\r
29 ; CHECK: Characteristics = 0x0
\r
30 ; CHECK: Sections = [
\r
32 ; CHECK: Name = .text
\r
33 ; CHECK: VirtualSize = 0
\r
34 ; CHECK: VirtualAddress = 0
\r
35 ; CHECK: SizeOfRawData = 33
\r
36 ; CHECK: PointerToRawData = 0x64
\r
37 ; CHECK: PointerToRelocations = 0x85
\r
38 ; CHECK: PointerToLineNumbers = 0x0
\r
39 ; CHECK: NumberOfRelocations = 4
\r
40 ; CHECK: NumberOfLineNumbers = 0
\r
41 ; CHECK: Charateristics = 0x60500020
\r
42 ; CHECK: IMAGE_SCN_CNT_CODE
\r
43 ; CHECK: IMAGE_SCN_ALIGN_16BYTES
\r
44 ; CHECK: IMAGE_SCN_MEM_EXECUTE
\r
45 ; CHECK: IMAGE_SCN_MEM_READ
\r
46 ; CHECK: SectionData =
\r
47 ; CHECK: 83 EC 04 C7 04 24 00 00 - 00 00 E8 00 00 00 00 C7 |.....$..........|
\r
48 ; CHECK: 04 24 00 00 00 00 E8 00 - 00 00 00 31 C0 83 C4 04 |.$.........1....|
\r
51 ; CHECK: Relocations = [
\r
53 ; CHECK: VirtualAddress = 0x6
\r
54 ; CHECK: SymbolTableIndex = 5
\r
55 ; CHECK: Type = IMAGE_REL_I386_DIR32 (6)
\r
56 ; CHECK: SymbolName = _main
\r
59 ; CHECK: VirtualAddress = 0xB
\r
60 ; CHECK: SymbolTableIndex = 6
\r
61 ; CHECK: Type = IMAGE_REL_I386_REL32 (20)
\r
62 ; CHECK: SymbolName = L_.str
\r
65 ; CHECK: VirtualAddress = 0x12
\r
66 ; CHECK: SymbolTableIndex = 7
\r
67 ; CHECK: Type = IMAGE_REL_I386_DIR32 (6)
\r
68 ; CHECK: SymbolName = _printf
\r
71 ; CHECK: VirtualAddress = 0x17
\r
72 ; CHECK: SymbolTableIndex = 8
\r
73 ; CHECK: Type = IMAGE_REL_I386_REL32 (20)
\r
74 ; CHECK: SymbolName = _str
\r
79 ; CHECK: Name = .data
\r
80 ; CHECK: VirtualSize = 0
\r
81 ; CHECK: VirtualAddress = 0
\r
82 ; CHECK: SizeOfRawData = 14
\r
83 ; CHECK: PointerToRawData = 0xAD
\r
84 ; CHECK: PointerToRelocations = 0x0
\r
85 ; CHECK: PointerToLineNumbers = 0x0
\r
86 ; CHECK: NumberOfRelocations = 0
\r
87 ; CHECK: NumberOfLineNumbers = 0
\r
88 ; CHECK: Charateristics = 0xC0100040
\r
89 ; CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA
\r
90 ; CHECK: IMAGE_SCN_ALIGN_1BYTES
\r
91 ; CHECK: IMAGE_SCN_MEM_READ
\r
92 ; CHECK: IMAGE_SCN_MEM_WRITE
\r
93 ; CHECK: SectionData =
\r
94 ; CHECK: 48 65 6C 6C 6F 20 00 57 - 6F 72 6C 64 21 00 |Hello .World!.|
\r
96 ; CHECK: Relocations = None
\r
99 ; CHECK: Symbols = [
\r
101 ; CHECK: Name = .text
\r
103 ; CHECK: SectionNumber = 1
\r
104 ; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
\r
105 ; CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
\r
106 ; CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3)
\r
107 ; CHECK: NumberOfAuxSymbols = 1
\r
108 ; CHECK: AuxillaryData =
\r
109 ; CHECK: 21 00 00 00 04 00 00 00 - 00 00 00 00 01 00 00 00 |!...............|
\r
110 ; CHECK: 00 00 |..|
\r
114 ; CHECK: Name = .data
\r
116 ; CHECK: SectionNumber = 2
\r
117 ; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
\r
118 ; CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
\r
119 ; CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3)
\r
120 ; CHECK: NumberOfAuxSymbols = 1
\r
121 ; CHECK: AuxillaryData =
\r
122 ; CHECK: 0E 00 00 00 00 00 00 00 - 00 00 00 00 02 00 00 00 |................|
\r
123 ; CHECK: 00 00 |..|
\r
127 ; CHECK: Name = _main
\r
129 ; CHECK: SectionNumber = 1
\r
130 ; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
\r
131 ; CHECK: ComplexType = IMAGE_SYM_DTYPE_FUNCTION (2)
\r
132 ; CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2)
\r
133 ; CHECK: NumberOfAuxSymbols = 0
\r
134 ; CHECK: AuxillaryData =
\r
138 ; CHECK: Name = L_.str
\r
140 ; CHECK: SectionNumber = 2
\r
141 ; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
\r
142 ; CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
\r
143 ; CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3)
\r
144 ; CHECK: NumberOfAuxSymbols = 0
\r
145 ; CHECK: AuxillaryData =
\r
149 ; CHECK: Name = _printf
\r
151 ; CHECK: SectionNumber = 0
\r
152 ; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
\r
153 ; CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
\r
154 ; CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2)
\r
155 ; CHECK: NumberOfAuxSymbols = 0
\r
156 ; CHECK: AuxillaryData =
\r
160 ; CHECK: Name = _str
\r
162 ; CHECK: SectionNumber = 2
\r
163 ; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
\r
164 ; CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
\r
165 ; CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3)
\r
166 ; CHECK: NumberOfAuxSymbols = 0
\r
167 ; CHECK: AuxillaryData =
\r
171 ; CHECK: Name = _puts
\r
173 ; CHECK: SectionNumber = 0
\r
174 ; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
\r
175 ; CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
\r
176 ; CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2)
\r
177 ; CHECK: NumberOfAuxSymbols = 0
\r
178 ; CHECK: AuxillaryData =
\r