// The purpose of this test is to see if the COFF object writer is emitting the | |
// proper relocations for multiple pieces of data in a single data fragment. | |
// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | coff-dump.py | FileCheck %s | |
// I WOULD RUN, BUT THIS FAILS: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s | |
.def _main; | |
.scl 2; | |
.type 32; | |
.endef | |
.text | |
.globl _main | |
.align 16, 0x90 | |
_main: # @main | |
# BB#0: # %entry | |
subl $4, %esp | |
movl $L_.str0, (%esp) | |
calll _printf | |
movl $L_.str1, (%esp) | |
calll _puts | |
movl $L_.str2, (%esp) | |
calll _puts | |
xorl %eax, %eax | |
addl $4, %esp | |
ret | |
.data | |
L_.str0: # @.str0 | |
.asciz "Hello " | |
L_.str1: # @.str1 | |
.asciz "World!" | |
.align 16 # @.str2 | |
L_.str2: | |
.asciz "I'm The Last Line." | |
// CHECK: { | |
// CHECK: MachineType = IMAGE_FILE_MACHINE_I386 (0x14C) | |
// CHECK: NumberOfSections = 2 | |
// CHECK: TimeDateStamp = {{[0-9]+}} | |
// CHECK: PointerToSymbolTable = 0x{{[0-9A-F]+}} | |
// CHECK: NumberOfSymbols = 7 | |
// CHECK: SizeOfOptionalHeader = 0 | |
// CHECK: Characteristics = 0x0 | |
// CHECK: Sections = [ | |
// CHECK: 1 = { | |
// CHECK: Name = .text | |
// CHECK: VirtualSize = 0 | |
// CHECK: VirtualAddress = 0 | |
// CHECK: SizeOfRawData = {{[0-9]+}} | |
// CHECK: PointerToRawData = 0x{{[0-9A-F]+}} | |
// CHECK: PointerToRelocations = 0x{{[0-9A-F]+}} | |
// CHECK: PointerToLineNumbers = 0x0 | |
// CHECK: NumberOfRelocations = 6 | |
// CHECK: NumberOfLineNumbers = 0 | |
// CHECK: Charateristics = 0x60500020 | |
// CHECK: IMAGE_SCN_CNT_CODE | |
// CHECK: IMAGE_SCN_ALIGN_16BYTES | |
// CHECK: IMAGE_SCN_MEM_EXECUTE | |
// CHECK: IMAGE_SCN_MEM_READ | |
// CHECK: SectionData = | |
// CHECK: 83 EC 04 C7 04 24 00 00 - 00 00 E8 00 00 00 00 C7 |.....$..........| | |
// CHECK: 04 24 07 00 00 00 E8 00 - 00 00 00 C7 04 24 10 00 |.$...........$..| | |
// CHECK: 00 00 E8 00 00 00 00 31 - C0 83 C4 04 C3 |.......1.....| | |
// CHECK: Relocations = [ | |
// CHECK: 0 = { | |
// CHECK: VirtualAddress = 0x6 | |
// CHECK: SymbolTableIndex = 2 | |
// CHECK: Type = IMAGE_REL_I386_DIR32 (6) | |
// CHECK: SymbolName = .data | |
// CHECK: } | |
// CHECK: 1 = { | |
// CHECK: VirtualAddress = 0xB | |
// CHECK: SymbolTableIndex = 5 | |
// CHECK: Type = IMAGE_REL_I386_REL32 (20) | |
// CHECK: SymbolName = _printf | |
// CHECK: } | |
// CHECK: 2 = { | |
// CHECK: VirtualAddress = 0x12 | |
// CHECK: SymbolTableIndex = 2 | |
// CHECK: Type = IMAGE_REL_I386_DIR32 (6) | |
// CHECK: SymbolName = .data | |
// CHECK: } | |
// CHECK: 3 = { | |
// CHECK: VirtualAddress = 0x17 | |
// CHECK: SymbolTableIndex = 6 | |
// CHECK: Type = IMAGE_REL_I386_REL32 (20) | |
// CHECK: SymbolName = _puts | |
// CHECK: } | |
// CHECK: 4 = { | |
// CHECK: VirtualAddress = 0x1E | |
// CHECK: SymbolTableIndex = 2 | |
// CHECK: Type = IMAGE_REL_I386_DIR32 (6) | |
// CHECK: SymbolName = .data | |
// CHECK: } | |
// CHECK: 5 = { | |
// CHECK: VirtualAddress = 0x23 | |
// CHECK: SymbolTableIndex = 6 | |
// CHECK: Type = IMAGE_REL_I386_REL32 (20) | |
// CHECK: SymbolName = _puts | |
// CHECK: } | |
// CHECK: ] | |
// CHECK: } | |
// CHECK: 2 = { | |
// CHECK: Name = .data | |
// CHECK: VirtualSize = 0 | |
// CHECK: VirtualAddress = 0 | |
// CHECK: SizeOfRawData = {{[0-9]+}} | |
// CHECK: PointerToRawData = 0x{{[0-9A-F]+}} | |
// CHECK: PointerToRelocations = 0x0 | |
// CHECK: PointerToLineNumbers = 0x0 | |
// CHECK: NumberOfRelocations = 0 | |
// CHECK: NumberOfLineNumbers = 0 | |
// CHECK: Charateristics = 0xC0500040 | |
// CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA | |
// CHECK: IMAGE_SCN_ALIGN_16BYTES | |
// CHECK: IMAGE_SCN_MEM_READ | |
// CHECK: IMAGE_SCN_MEM_WRITE | |
// CHECK: SectionData = | |
// CHECK: 48 65 6C 6C 6F 20 00 57 - 6F 72 6C 64 21 00 00 00 |Hello .World!...| | |
// CHECK: 49 27 6D 20 54 68 65 20 - 4C 61 73 74 20 4C 69 6E |I'm The Last Lin| | |
// CHECK: 65 2E 00 |e..| | |
// CHECK: Relocations = None | |
// CHECK: } | |
// CHECK: ] | |
// CHECK: Symbols = [ | |
// CHECK: 0 = { | |
// CHECK: Name = .text | |
// CHECK: Value = 0 | |
// CHECK: SectionNumber = 1 | |
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0) | |
// CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0) | |
// CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3) | |
// CHECK: NumberOfAuxSymbols = 1 | |
// CHECK: AuxillaryData = | |
// CHECK: 2D 00 00 00 06 00 00 00 - 00 00 00 00 01 00 00 00 |-...............| | |
// CHECK: 00 00 |..| | |
// CHECK: } | |
// CHECK: 2 = { | |
// CHECK: Name = .data | |
// CHECK: Value = 0 | |
// CHECK: SectionNumber = 2 | |
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0) | |
// CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0) | |
// CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3) | |
// CHECK: NumberOfAuxSymbols = 1 | |
// CHECK: AuxillaryData = | |
// CHECK: 23 00 00 00 00 00 00 00 - 00 00 00 00 02 00 00 00 |#...............| | |
// CHECK: 00 00 |..| | |
// CHECK: } | |
// CHECK: 4 = { | |
// CHECK: Name = _main | |
// CHECK: Value = 0 | |
// CHECK: SectionNumber = 1 | |
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0) | |
// CHECK: ComplexType = IMAGE_SYM_DTYPE_FUNCTION (2) | |
// CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2) | |
// CHECK: NumberOfAuxSymbols = 0 | |
// CHECK: AuxillaryData = | |
// CHECK: 5 = { | |
// CHECK: Name = _printf | |
// CHECK: Value = 0 | |
// CHECK: SectionNumber = 0 | |
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0) | |
// CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0) | |
// CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2) | |
// CHECK: NumberOfAuxSymbols = 0 | |
// CHECK: AuxillaryData = | |
// CHECK: } | |
// CHECK: 6 = { | |
// CHECK: Name = _puts | |
// CHECK: Value = 0 | |
// CHECK: SectionNumber = 0 | |
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0) | |
// CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0) | |
// CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2) | |
// CHECK: NumberOfAuxSymbols = 0 | |
// CHECK: AuxillaryData = | |
// CHECK: } | |
// CHECK: ] | |
// CHECK: } |