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 x86_64-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	callq	_printf
18	movl	$.L_.str1, (%esp)
19	callq	_puts
20	movl	$.L_.str2, (%esp)
21	callq	_puts
22	xorl	%eax, %eax
23	addl	$4, %esp
24	ret
25
26	.data
27.L_.str0:                                # @.str0
28	.asciz	 "Hello "
29
30.L_.str1:                                # @.str1
31	.asciz	 "World!"
32
33	.align	16                      # @.str2
34.L_.str2:
35	.asciz	 "I'm The Last Line."
36
37// CHECK: {
38// CHECK:   Machine:                   IMAGE_FILE_MACHINE_AMD64
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:       0x7  IMAGE_REL_AMD64_ADDR32 .data
67// CHECK:       0xC  IMAGE_REL_AMD64_REL32 _printf
68// CHECK:       0x14 IMAGE_REL_AMD64_ADDR32 .data
69// CHECK:       0x19 IMAGE_REL_AMD64_REL32 _puts
70// CHECK:       0x21 IMAGE_REL_AMD64_ADDR32 .data
71// CHECK:       0x26 IMAGE_REL_AMD64_REL32 _puts
72// CHECK:     ]
73// CHECK:     SectionData (
74// CHECK:       0000: 83EC0467 C7042400 000000E8 00000000
75// CHECK:       0010: 67C70424 07000000 E8000000 0067C704
76// CHECK:       0020: 24100000 00E80000 000031C0 83C404C3
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: 48
115// CHECK:       RelocationCount: 6
116// CHECK:       LineNumberCount: 0
117// CHECK:       Checksum: 0x0
118// CHECK:       Number: 1
119// CHECK:       Selection: 0x0
120// CHECK:     }
121// CHECK:   }
122// CHECK:   Symbol {
123// CHECK:     Name:                      .data
124// CHECK:     Value:                     0
125// CHECK:     Section:                   .data
126// CHECK:     BaseType:                  Null
127// CHECK:     ComplexType:               Null
128// CHECK:     StorageClass:              Static
129// CHECK:     AuxSymbolCount:            1
130// CHECK:     AuxSectionDef {
131// CHECK:       Length: 35
132// CHECK:       RelocationCount: 0
133// CHECK:       LineNumberCount: 0
134// CHECK:       Checksum: 0x0
135// CHECK:       Number: 2
136// CHECK:       Selection: 0x0
137// CHECK:     }
138// CHECK:   }
139// CHECK:   Symbol {
140// CHECK:     Name:                      _main
141// CHECK:     Value:                     0
142// CHECK:     Section:                   .text
143// CHECK:     BaseType:                  Null
144// CHECK:     ComplexType:               Function
145// CHECK:     StorageClass:              External
146// CHECK:     AuxSymbolCount:            0
147// CHECK:   }
148// CHECK:   Symbol {
149// CHECK:     Name:                      _printf
150// CHECK:     Value:                     0
151// CHECK:     Section:                   IMAGE_SYM_UNDEFINED (0)
152// CHECK:     BaseType:                  Null
153// CHECK:     ComplexType:               Null
154// CHECK:     StorageClass:              External
155// CHECK:     AuxSymbolCount:            0
156// CHECK:   }
157// CHECK:   Symbol {
158// CHECK:     Name:                      _puts
159// CHECK:     Value:                     0
160// CHECK:     Section:                   IMAGE_SYM_UNDEFINED (0)
161// CHECK:     BaseType:                  Null
162// CHECK:     ComplexType:               Null
163// CHECK:     StorageClass:              External
164// CHECK:     AuxSymbolCount:            0
165// CHECK:   }
166// CHECK: ]
167