Home | History | Annotate | Download | only in COFF
      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 | 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_.str0, (%esp)
     18 	calll	_printf
     19 	movl	$L_.str1, (%esp)
     20 	calll	_puts
     21 	movl	$L_.str2, (%esp)
     22 	calll	_puts
     23 	xorl	%eax, %eax
     24 	addl	$4, %esp
     25 	ret
     26 
     27 	.data
     28 L_.str0:                                # @.str0
     29 	.asciz	 "Hello "
     30 
     31 L_.str1:                                # @.str1
     32 	.asciz	 "World!"
     33 
     34 	.align	16                      # @.str2
     35 L_.str2:
     36 	.asciz	 "I'm The Last Line."
     37 
     38 // CHECK: {
     39 // CHECK:   MachineType              = IMAGE_FILE_MACHINE_I386 (0x14C)
     40 // CHECK:   NumberOfSections         = 2
     41 // CHECK:   TimeDateStamp            = {{[0-9]+}}
     42 // CHECK:   PointerToSymbolTable     = 0x{{[0-9A-F]+}}
     43 // CHECK:   NumberOfSymbols          = 7
     44 // CHECK:   SizeOfOptionalHeader     = 0
     45 // CHECK:   Characteristics          = 0x0
     46 // CHECK:   Sections                 = [
     47 // CHECK:     1 = {
     48 // CHECK:       Name                     = .text
     49 // CHECK:       VirtualSize              = 0
     50 // CHECK:       VirtualAddress           = 0
     51 // CHECK:       SizeOfRawData            = {{[0-9]+}}
     52 // CHECK:       PointerToRawData         = 0x{{[0-9A-F]+}}
     53 // CHECK:       PointerToRelocations     = 0x{{[0-9A-F]+}}
     54 // CHECK:       PointerToLineNumbers     = 0x0
     55 // CHECK:       NumberOfRelocations      = 6
     56 // CHECK:       NumberOfLineNumbers      = 0
     57 // CHECK:       Charateristics           = 0x60500020
     58 // CHECK:         IMAGE_SCN_CNT_CODE
     59 // CHECK:         IMAGE_SCN_ALIGN_16BYTES
     60 // CHECK:         IMAGE_SCN_MEM_EXECUTE
     61 // CHECK:         IMAGE_SCN_MEM_READ
     62 // CHECK:       SectionData              =
     63 // CHECK:         83 EC 04 C7 04 24 00 00 - 00 00 E8 00 00 00 00 C7 |.....$..........|
     64 // CHECK:         04 24 07 00 00 00 E8 00 - 00 00 00 C7 04 24 10 00 |.$...........$..|
     65 // CHECK:         00 00 E8 00 00 00 00 31 - C0 83 C4 04 C3 |.......1.....|
     66 // CHECK:       Relocations              = [
     67 // CHECK:         0 = {
     68 // CHECK:           VirtualAddress           = 0x6
     69 // CHECK:           SymbolTableIndex         = 2
     70 // CHECK:           Type                     = IMAGE_REL_I386_DIR32 (6)
     71 // CHECK:           SymbolName               = .data
     72 // CHECK:         }
     73 // CHECK:         1 = {
     74 // CHECK:           VirtualAddress           = 0xB
     75 // CHECK:           SymbolTableIndex         = 5
     76 // CHECK:           Type                     = IMAGE_REL_I386_REL32 (20)
     77 // CHECK:           SymbolName               = _printf
     78 // CHECK:         }
     79 // CHECK:         2 = {
     80 // CHECK:           VirtualAddress           = 0x12
     81 // CHECK:           SymbolTableIndex         = 2
     82 // CHECK:           Type                     = IMAGE_REL_I386_DIR32 (6)
     83 // CHECK:           SymbolName               = .data
     84 // CHECK:         }
     85 // CHECK:         3 = {
     86 // CHECK:           VirtualAddress           = 0x17
     87 // CHECK:           SymbolTableIndex         = 6
     88 // CHECK:           Type                     = IMAGE_REL_I386_REL32 (20)
     89 // CHECK:           SymbolName               = _puts
     90 // CHECK:         }
     91 // CHECK:         4 = {
     92 // CHECK:           VirtualAddress           = 0x1E
     93 // CHECK:           SymbolTableIndex         = 2
     94 // CHECK:           Type                     = IMAGE_REL_I386_DIR32 (6)
     95 // CHECK:           SymbolName               = .data
     96 // CHECK:         }
     97 // CHECK:         5 = {
     98 // CHECK:           VirtualAddress           = 0x23
     99 // CHECK:           SymbolTableIndex         = 6
    100 // CHECK:           Type                     = IMAGE_REL_I386_REL32 (20)
    101 // CHECK:           SymbolName               = _puts
    102 // CHECK:         }
    103 // CHECK:       ]
    104 // CHECK:     }
    105 // CHECK:     2 = {
    106 // CHECK:       Name                     = .data
    107 // CHECK:       VirtualSize              = 0
    108 // CHECK:       VirtualAddress           = 0
    109 // CHECK:       SizeOfRawData            = {{[0-9]+}}
    110 // CHECK:       PointerToRawData         = 0x{{[0-9A-F]+}}
    111 // CHECK:       PointerToRelocations     = 0x0
    112 // CHECK:       PointerToLineNumbers     = 0x0
    113 // CHECK:       NumberOfRelocations      = 0
    114 // CHECK:       NumberOfLineNumbers      = 0
    115 // CHECK:       Charateristics           = 0xC0500040
    116 // CHECK:         IMAGE_SCN_CNT_INITIALIZED_DATA
    117 // CHECK:         IMAGE_SCN_ALIGN_16BYTES
    118 // CHECK:         IMAGE_SCN_MEM_READ
    119 // CHECK:         IMAGE_SCN_MEM_WRITE
    120 // CHECK:       SectionData              =
    121 // CHECK:         48 65 6C 6C 6F 20 00 57 - 6F 72 6C 64 21 00 00 00 |Hello .World!...|
    122 // CHECK:         49 27 6D 20 54 68 65 20 - 4C 61 73 74 20 4C 69 6E |I'm The Last Lin|
    123 // CHECK:         65 2E 00                                          |e..|
    124 // CHECK:       Relocations              = None
    125 // CHECK:     }
    126 // CHECK:   ]
    127 // CHECK:   Symbols                  = [
    128 // CHECK:     0 = {
    129 // CHECK:       Name                     = .text
    130 // CHECK:       Value                    = 0
    131 // CHECK:       SectionNumber            = 1
    132 // CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)
    133 // CHECK:       ComplexType              = IMAGE_SYM_DTYPE_NULL (0)
    134 // CHECK:       StorageClass             = IMAGE_SYM_CLASS_STATIC (3)
    135 // CHECK:       NumberOfAuxSymbols       = 1
    136 // CHECK:       AuxillaryData            =
    137 // CHECK:         2D 00 00 00 06 00 00 00 - 00 00 00 00 01 00 00 00 |-...............|
    138 // CHECK:         00 00                                             |..|
    139 
    140 // CHECK:     }
    141 // CHECK:     2 = {
    142 // CHECK:       Name                     = .data
    143 // CHECK:       Value                    = 0
    144 // CHECK:       SectionNumber            = 2
    145 // CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)
    146 // CHECK:       ComplexType              = IMAGE_SYM_DTYPE_NULL (0)
    147 // CHECK:       StorageClass             = IMAGE_SYM_CLASS_STATIC (3)
    148 // CHECK:       NumberOfAuxSymbols       = 1
    149 // CHECK:       AuxillaryData            =
    150 // CHECK:         23 00 00 00 00 00 00 00 - 00 00 00 00 02 00 00 00 |#...............|
    151 // CHECK:         00 00                                             |..|
    152 
    153 // CHECK:     }
    154 // CHECK:     4 = {
    155 // CHECK:       Name                     = _main
    156 // CHECK:       Value                    = 0
    157 // CHECK:       SectionNumber            = 1
    158 // CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)
    159 // CHECK:       ComplexType              = IMAGE_SYM_DTYPE_FUNCTION (2)
    160 // CHECK:       StorageClass             = IMAGE_SYM_CLASS_EXTERNAL (2)
    161 // CHECK:       NumberOfAuxSymbols       = 0
    162 // CHECK:       AuxillaryData            =
    163 
    164 // CHECK:     5 = {
    165 // CHECK:       Name                     = _printf
    166 // CHECK:       Value                    = 0
    167 // CHECK:       SectionNumber            = 0
    168 // CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)
    169 // CHECK:       ComplexType              = IMAGE_SYM_DTYPE_NULL (0)
    170 // CHECK:       StorageClass             = IMAGE_SYM_CLASS_EXTERNAL (2)
    171 // CHECK:       NumberOfAuxSymbols       = 0
    172 // CHECK:       AuxillaryData            =
    173 
    174 // CHECK:     }
    175 // CHECK:     6 = {
    176 // CHECK:       Name                     = _puts
    177 // CHECK:       Value                    = 0
    178 // CHECK:       SectionNumber            = 0
    179 // CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)
    180 // CHECK:       ComplexType              = IMAGE_SYM_DTYPE_NULL (0)
    181 // CHECK:       StorageClass             = IMAGE_SYM_CLASS_EXTERNAL (2)
    182 // CHECK:       NumberOfAuxSymbols       = 0
    183 // CHECK:       AuxillaryData            =
    184 
    185 // CHECK:     }
    186 // CHECK:   ]
    187 // CHECK: }
    188