basic-coff.s revision 7d4900416af3813aa9473e6ec2f0497ad5d208dd
1// This test checks that the COFF object emitter works for the most basic
2// programs.
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_.str, (%esp)
18	calll	_printf
19	xorl	%eax, %eax
20	addl	$4, %esp
21	ret
22
23	.data
24L_.str:                                 # @.str
25	.asciz	 "Hello World"
26
27// CHECK: {
28// CHECK:   MachineType              = IMAGE_FILE_MACHINE_I386 (0x14C)
29// CHECK:   NumberOfSections         = 2
30// CHECK:   TimeDateStamp            = {{[0-9]+}}
31// CHECK:   PointerToSymbolTable     = 0x{{[0-9A-F]+}}
32// CHECK:   NumberOfSymbols          = 6
33// CHECK:   SizeOfOptionalHeader     = 0
34// CHECK:   Characteristics          = 0x0
35// CHECK:   Sections                 = [
36// CHECK:     1 = {
37// CHECK:       Name                     = .text
38// CHECK:       VirtualSize              = 0
39// CHECK:       VirtualAddress           = 0
40// CHECK:       SizeOfRawData            = {{[0-9]+}}
41// CHECK:       PointerToRawData         = 0x{{[0-9A-F]+}}
42// CHECK:       PointerToRelocations     = 0x{{[0-9A-F]+}}
43// CHECK:       PointerToLineNumbers     = 0x0
44// CHECK:       NumberOfRelocations      = 2
45// CHECK:       NumberOfLineNumbers      = 0
46// CHECK:       Charateristics           = 0x60500020
47// CHECK:         IMAGE_SCN_CNT_CODE
48// CHECK:         IMAGE_SCN_ALIGN_16BYTES
49// CHECK:         IMAGE_SCN_MEM_EXECUTE
50// CHECK:         IMAGE_SCN_MEM_READ
51// CHECK:       SectionData              =
52// CHECK:       Relocations              = [
53// CHECK:         0 = {
54// CHECK:           VirtualAddress           = 0x{{[0-9A-F]+}}
55// CHECK:           SymbolTableIndex         = 2
56// CHECK:           Type                     = IMAGE_REL_I386_DIR32 (6)
57// CHECK:           SymbolName               = .data
58// CHECK:         }
59// CHECK:         1 = {
60// CHECK:           VirtualAddress           = 0x{{[0-9A-F]+}}
61// CHECK:           SymbolTableIndex         = 5
62// CHECK:           Type                     = IMAGE_REL_I386_REL32 (20)
63// CHECK:           SymbolName               = _printf
64// CHECK:         }
65// CHECK:       ]
66// CHECK:     }
67// CHECK:     2 = {
68// CHECK:       Name                     = .data
69// CHECK:       VirtualSize              = 0
70// CHECK:       VirtualAddress           = 0
71// CHECK:       SizeOfRawData            = {{[0-9]+}}
72// CHECK:       PointerToRawData         = 0x{{[0-9A-F]+}}
73// CHECK:       PointerToRelocations     = 0x0
74// CHECK:       PointerToLineNumbers     = 0x0
75// CHECK:       NumberOfRelocations      = 0
76// CHECK:       NumberOfLineNumbers      = 0
77// CHECK:       Charateristics           = 0xC0100040
78// CHECK:         IMAGE_SCN_CNT_INITIALIZED_DATA
79// CHECK:         IMAGE_SCN_ALIGN_1BYTES
80// CHECK:         IMAGE_SCN_MEM_READ
81// CHECK:         IMAGE_SCN_MEM_WRITE
82// CHECK:       SectionData              =
83// CHECK:         48 65 6C 6C 6F 20 57 6F - 72 6C 64 00             |Hello World.|
84// CHECK:       Relocations              = None
85// CHECK:     }
86// CHECK:   ]
87// CHECK:   Symbols                  = [
88// CHECK:     0 = {
89// CHECK:       Name                     = .text
90// CHECK:       Value                    = 0
91// CHECK:       SectionNumber            = 1
92// CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)
93// CHECK:       ComplexType              = IMAGE_SYM_DTYPE_NULL (0)
94// CHECK:       StorageClass             = IMAGE_SYM_CLASS_STATIC (3)
95// CHECK:       NumberOfAuxSymbols       = 1
96// CHECK:       AuxillaryData            =
97// CHECK:         15 00 00 00 02 00 00 00 - 00 00 00 00 01 00 00 00 |................|
98// CHECK:         00 00                                             |..|
99// CHECK:     }
100// CHECK:     2 = {
101// CHECK:       Name                     = .data
102// CHECK:       Value                    = 0
103// CHECK:       SectionNumber            = 2
104// CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)
105// CHECK:       ComplexType              = IMAGE_SYM_DTYPE_NULL (0)
106// CHECK:       StorageClass             = IMAGE_SYM_CLASS_STATIC (3)
107// CHECK:       NumberOfAuxSymbols       = 1
108// CHECK:       AuxillaryData            =
109// CHECK:         0C 00 00 00 00 00 00 00 - 00 00 00 00 02 00 00 00 |................|
110// CHECK:         00 00                                             |..|
111// CHECK:     }
112// CHECK:     4 = {
113// CHECK:       Name                     = _main
114// CHECK:       Value                    = 0
115// CHECK:       SectionNumber            = 1
116// CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)
117// CHECK:       ComplexType              = IMAGE_SYM_DTYPE_FUNCTION (2)
118// CHECK:       StorageClass             = IMAGE_SYM_CLASS_EXTERNAL (2)
119// CHECK:       NumberOfAuxSymbols       = 0
120// CHECK:       AuxillaryData            =
121// CHECK:     }
122// CHECK:     5 = {
123// CHECK:       Name                     = _printf
124// CHECK:       Value                    = 0
125// CHECK:       SectionNumber            = 0
126// CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)
127// CHECK:       ComplexType              = IMAGE_SYM_DTYPE_NULL (0)
128// CHECK:       StorageClass             = IMAGE_SYM_CLASS_EXTERNAL (2)
129// CHECK:       NumberOfAuxSymbols       = 0
130// CHECK:       AuxillaryData            =
131// CHECK:     }
132// CHECK:   ]
133// CHECK: }
134