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 | 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
     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_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: 0xDED1DC2
    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: 0xB0A4C21
    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