1// This test checks that the COFF object emitter works for the most basic
2// programs.
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_.str, (%esp)
17	call	_printf
18	xorl	%eax, %eax
19	addl	$4, %esp
20	ret
21
22	.data
23.L_.str:                                # @.str
24	.asciz	"Hello World"
25
26// CHECK: ImageFileHeader {
27// CHECK:   Machine: IMAGE_FILE_MACHINE_AMD64
28// CHECK:   SectionCount: 3
29// CHECK:   TimeDateStamp: {{[0-9]+}}
30// CHECK:   PointerToSymbolTable: 0x{{[0-9A-F]+}}
31// CHECK:   SymbolCount: 8
32// CHECK:   OptionalHeaderSize: 0
33// CHECK:   Characteristics [ (0x0)
34// CHECK:   ]
35// CHECK: }
36// CHECK: Sections [
37// CHECK:   Section {
38// CHECK:     Number:               [[TextNum:[0-9]+]]
39// CHECK:     Name:                 .text
40// CHECK:     VirtualSize:          0
41// CHECK:     VirtualAddress:       0
42// CHECK:     RawDataSize:          [[TextSize:[0-9]+]]
43// CHECK:     PointerToRawData:     0x{{[0-9A-F]+}}
44// CHECK:     PointerToRelocations: 0x{{[0-9A-F]+}}
45// CHECK:     PointerToLineNumbers: 0x0
46// CHECK:     RelocationCount:      2
47// CHECK:     LineNumberCount:      0
48// CHECK:     Characteristics [ (0x60500020)
49// CHECK:       IMAGE_SCN_ALIGN_16BYTES
50// CHECK:       IMAGE_SCN_CNT_CODE
51// CHECK:       IMAGE_SCN_MEM_EXECUTE
52// CHECK:       IMAGE_SCN_MEM_READ
53// CHECK:     ]
54// CHECK:     Relocations [
55// CHECK:       0x{{[0-9A-F]+}} IMAGE_REL_AMD64_ADDR32 .data
56// CHECK:       0x{{[0-9A-F]+}} IMAGE_REL_AMD64_REL32 _printf
57// CHECK:     ]
58// CHECK:   }
59// CHECK:   Section {
60// CHECK:     Number:               [[DataNum:[0-9]+]]
61// CHECK:     Name:                 .data
62// CHECK:     VirtualSize:          0
63// CHECK:     VirtualAddress:       0
64// CHECK:     RawDataSize:          [[DataSize:[0-9]+]]
65// CHECK:     PointerToRawData:     0x{{[0-9A-F]+}}
66// CHECK:     PointerToRelocations: 0x0
67// CHECK:     PointerToLineNumbers: 0x0
68// CHECK:     RelocationCount:      0
69// CHECK:     LineNumberCount:      0
70// CHECK:     Characteristics [ (0xC0300040)
71// CHECK:       IMAGE_SCN_ALIGN_4BYTES
72// CHECK:       IMAGE_SCN_CNT_INITIALIZED_DATA
73// CHECK:       IMAGE_SCN_MEM_READ
74// CHECK:       IMAGE_SCN_MEM_WRITE
75// CHECK:     ]
76// CHECK:     Relocations [
77// CHECK:     ]
78// CHECK:     SectionData (
79// CHECK:       0000: 48656C6C 6F20576F 726C6400             |Hello World.|
80// CHECK:     )
81// CHECK:   }
82// CHECK: ]
83// CHECK: Symbols [
84// CHECK:   Symbol {
85// CHECK:     Name:           .text
86// CHECK:     Value:          0
87// CHECK:     Section:        .text
88// CHECK:     BaseType:       Null
89// CHECK:     ComplexType:    Null
90// CHECK:     StorageClass:   Static
91// CHECK:     AuxSymbolCount: 1
92// CHECK:     AuxSectionDef {
93// CHECK:       Length: [[TextSize]]
94// CHECK:       RelocationCount: 2
95// CHECK:       LineNumberCount: 0
96// CHECK:       Checksum: 0x0
97// CHECK:       Number: [[TextNum]]
98// CHECK:       Selection: 0x0
99// CHECK:     }
100// CHECK:   }
101// CHECK:   Symbol {
102// CHECK:     Name:           .data
103// CHECK:     Value:          0
104// CHECK:     Section:        .data
105// CHECK:     BaseType:       Null
106// CHECK:     ComplexType:    Null
107// CHECK:     StorageClass:   Static
108// CHECK:     AuxSymbolCount: 1
109// CHECK:     AuxSectionDef {
110// CHECK:       Length: [[DataSize]]
111// CHECK:       RelocationCount: 0
112// CHECK:       LineNumberCount: 0
113// CHECK:       Checksum: 0x0
114// CHECK:       Number: [[DataNum]]
115// CHECK:       Selection: 0x0
116// CHECK:       Unused: (00 00 00)
117// CHECK:     }
118// CHECK:   }
119// CHECK:   Symbol {
120// CHECK:     Name:           _main
121// CHECK:     Value:          0
122// CHECK:     Section:        .text
123// CHECK:     BaseType:       Null
124// CHECK:     ComplexType:    Function
125// CHECK:     StorageClass:   External
126// CHECK:     AuxSymbolCount: 0
127// CHECK:   }
128// CHECK:   Symbol {
129// CHECK:     Name:           _printf
130// CHECK:     Value:          0
131// CHECK:     Section:        (0)
132// CHECK:     BaseType:       Null
133// CHECK:     ComplexType:    Null
134// CHECK:     StorageClass:   External
135// CHECK:     AuxSymbolCount: 0
136// CHECK:   }
137// CHECK: ]
138