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