Add a test for llvm-ar's 'd' operation.
[oota-llvm.git] / test / MC / COFF / symbol-fragment-offset.s
index 577b6c59fad3ded35400aa896d18af71ad9dc672..71b1703972ab1a4202adc22855eeae279ceff44e 100644 (file)
-// The purpose of this test is to see if the COFF object writer is emitting the\r
-// proper relocations for multiple pieces of data in a single data fragment.\r
-\r
-// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | coff-dump.py | FileCheck %s\r
-// I WOULD RUN, BUT THIS FAILS: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s\r
-\r
-.def    _main;\r
-       .scl    2;\r
-       .type   32;\r
-       .endef\r
-       .text\r
-       .globl  _main\r
-       .align  16, 0x90\r
-_main:                                  # @main\r
-# BB#0:                                 # %entry\r
-       subl    $4, %esp\r
-       movl    $L_.str0, (%esp)\r
-       calll   _printf\r
-       movl    $L_.str1, (%esp)\r
-       calll   _puts\r
-       movl    $L_.str2, (%esp)\r
-       calll   _puts\r
-       xorl    %eax, %eax\r
-       addl    $4, %esp\r
-       ret\r
-\r
-       .data\r
-L_.str0:                                # @.str0\r
-       .asciz   "Hello "\r
-\r
-L_.str1:                                # @.str1\r
-       .asciz   "World!"\r
-\r
-       .align  16                      # @.str2\r
-L_.str2:\r
-       .asciz   "I'm The Last Line."\r
-\r
-// CHECK: {\r
-// CHECK:   MachineType              = IMAGE_FILE_MACHINE_I386 (0x14C)\r
-// CHECK:   NumberOfSections         = 2\r
-// CHECK:   TimeDateStamp            = {{[0-9]+}}\r
-// CHECK:   PointerToSymbolTable     = 0x{{[0-9A-F]+}}\r
-// CHECK:   NumberOfSymbols          = 7\r
-// CHECK:   SizeOfOptionalHeader     = 0\r
-// CHECK:   Characteristics          = 0x0\r
-// CHECK:   Sections                 = [\r
-// CHECK:     1 = {\r
-// CHECK:       Name                     = .text\r
-// CHECK:       VirtualSize              = 0\r
-// CHECK:       VirtualAddress           = 0\r
-// CHECK:       SizeOfRawData            = {{[0-9]+}}\r
-// CHECK:       PointerToRawData         = 0x{{[0-9A-F]+}}\r
-// CHECK:       PointerToRelocations     = 0x{{[0-9A-F]+}}\r
-// CHECK:       PointerToLineNumbers     = 0x0\r
-// CHECK:       NumberOfRelocations      = 6\r
-// CHECK:       NumberOfLineNumbers      = 0\r
-// CHECK:       Charateristics           = 0x60500020\r
-// CHECK:         IMAGE_SCN_CNT_CODE\r
-// CHECK:         IMAGE_SCN_ALIGN_16BYTES\r
-// CHECK:         IMAGE_SCN_MEM_EXECUTE\r
-// CHECK:         IMAGE_SCN_MEM_READ\r
-// CHECK:       SectionData              =\r
-// CHECK:         83 EC 04 C7 04 24 00 00 - 00 00 E8 00 00 00 00 C7 |.....$..........|\r
-// CHECK:         04 24 07 00 00 00 E8 00 - 00 00 00 C7 04 24 10 00 |.$...........$..|\r
-// CHECK:         00 00 E8 00 00 00 00 31 - C0 83 C4 04 C3 00 00 00 |.......1........|\r
-// CHECK:       Relocations              = [\r
-// CHECK:         0 = {\r
-// CHECK:           VirtualAddress           = 0x6\r
-// CHECK:           SymbolTableIndex         = 2\r
-// CHECK:           Type                     = IMAGE_REL_I386_DIR32 (6)\r
-// CHECK:           SymbolName               = .data\r
-// CHECK:         }\r
-// CHECK:         1 = {\r
-// CHECK:           VirtualAddress           = 0xB\r
-// CHECK:           SymbolTableIndex         = 5\r
-// CHECK:           Type                     = IMAGE_REL_I386_REL32 (20)\r
-// CHECK:           SymbolName               = _printf\r
-// CHECK:         }\r
-// CHECK:         2 = {\r
-// CHECK:           VirtualAddress           = 0x12\r
-// CHECK:           SymbolTableIndex         = 2\r
-// CHECK:           Type                     = IMAGE_REL_I386_DIR32 (6)\r
-// CHECK:           SymbolName               = .data\r
-// CHECK:         }\r
-// CHECK:         3 = {\r
-// CHECK:           VirtualAddress           = 0x17\r
-// CHECK:           SymbolTableIndex         = 6\r
-// CHECK:           Type                     = IMAGE_REL_I386_REL32 (20)\r
-// CHECK:           SymbolName               = _puts\r
-// CHECK:         }\r
-// CHECK:         4 = {\r
-// CHECK:           VirtualAddress           = 0x1E\r
-// CHECK:           SymbolTableIndex         = 2\r
-// CHECK:           Type                     = IMAGE_REL_I386_DIR32 (6)\r
-// CHECK:           SymbolName               = .data\r
-// CHECK:         }\r
-// CHECK:         5 = {\r
-// CHECK:           VirtualAddress           = 0x23\r
-// CHECK:           SymbolTableIndex         = 6\r
-// CHECK:           Type                     = IMAGE_REL_I386_REL32 (20)\r
-// CHECK:           SymbolName               = _puts\r
-// CHECK:         }\r
-// CHECK:       ]\r
-// CHECK:     }\r
-// CHECK:     2 = {\r
-// CHECK:       Name                     = .data\r
-// CHECK:       VirtualSize              = 0\r
-// CHECK:       VirtualAddress           = 0\r
-// CHECK:       SizeOfRawData            = {{[0-9]+}}\r
-// CHECK:       PointerToRawData         = 0x{{[0-9A-F]+}}\r
-// CHECK:       PointerToRelocations     = 0x0\r
-// CHECK:       PointerToLineNumbers     = 0x0\r
-// CHECK:       NumberOfRelocations      = 0\r
-// CHECK:       NumberOfLineNumbers      = 0\r
-// CHECK:       Charateristics           = 0xC0500040\r
-// CHECK:         IMAGE_SCN_CNT_INITIALIZED_DATA\r
-// CHECK:         IMAGE_SCN_ALIGN_16BYTES\r
-// CHECK:         IMAGE_SCN_MEM_READ\r
-// CHECK:         IMAGE_SCN_MEM_WRITE\r
-// CHECK:       SectionData              =\r
-// CHECK:         48 65 6C 6C 6F 20 00 57 - 6F 72 6C 64 21 00 00 00 |Hello .World!...|\r
-// CHECK:         49 27 6D 20 54 68 65 20 - 4C 61 73 74 20 4C 69 6E |I'm The Last Lin|\r
-// CHECK:         65 2E 00                                          |e..|\r
-// CHECK:       Relocations              = None\r
-// CHECK:     }\r
-// CHECK:   ]\r
-// CHECK:   Symbols                  = [\r
-// CHECK:     0 = {\r
-// CHECK:       Name                     = .text\r
-// CHECK:       Value                    = 0\r
-// CHECK:       SectionNumber            = 1\r
-// CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)\r
-// CHECK:       ComplexType              = IMAGE_SYM_DTYPE_NULL (0)\r
-// CHECK:       StorageClass             = IMAGE_SYM_CLASS_STATIC (3)\r
-// CHECK:       NumberOfAuxSymbols       = 1\r
-// CHECK:       AuxillaryData            =\r
-// CHECK:         30 00 00 00 06 00 00 00 - 00 00 00 00 01 00 00 00 |0...............|\r
-// CHECK:         00 00                                             |..|\r
-\r
-// CHECK:     }\r
-// CHECK:     2 = {\r
-// CHECK:       Name                     = .data\r
-// CHECK:       Value                    = 0\r
-// CHECK:       SectionNumber            = 2\r
-// CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)\r
-// CHECK:       ComplexType              = IMAGE_SYM_DTYPE_NULL (0)\r
-// CHECK:       StorageClass             = IMAGE_SYM_CLASS_STATIC (3)\r
-// CHECK:       NumberOfAuxSymbols       = 1\r
-// CHECK:       AuxillaryData            =\r
-// CHECK:         23 00 00 00 00 00 00 00 - 00 00 00 00 02 00 00 00 |#...............|\r
-// CHECK:         00 00                                             |..|\r
-\r
-// CHECK:     }\r
-// CHECK:     4 = {\r
-// CHECK:       Name                     = _main\r
-// CHECK:       Value                    = 0\r
-// CHECK:       SectionNumber            = 1\r
-// CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)\r
-// CHECK:       ComplexType              = IMAGE_SYM_DTYPE_FUNCTION (2)\r
-// CHECK:       StorageClass             = IMAGE_SYM_CLASS_EXTERNAL (2)\r
-// CHECK:       NumberOfAuxSymbols       = 0\r
-// CHECK:       AuxillaryData            =\r
-\r
-// CHECK:     5 = {\r
-// CHECK:       Name                     = _printf\r
-// CHECK:       Value                    = 0\r
-// CHECK:       SectionNumber            = 0\r
-// CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)\r
-// CHECK:       ComplexType              = IMAGE_SYM_DTYPE_NULL (0)\r
-// CHECK:       StorageClass             = IMAGE_SYM_CLASS_EXTERNAL (2)\r
-// CHECK:       NumberOfAuxSymbols       = 0\r
-// CHECK:       AuxillaryData            =\r
-\r
-// CHECK:     }\r
-// CHECK:     6 = {\r
-// CHECK:       Name                     = _puts\r
-// CHECK:       Value                    = 0\r
-// CHECK:       SectionNumber            = 0\r
-// CHECK:       SimpleType               = IMAGE_SYM_TYPE_NULL (0)\r
-// CHECK:       ComplexType              = IMAGE_SYM_DTYPE_NULL (0)\r
-// CHECK:       StorageClass             = IMAGE_SYM_CLASS_EXTERNAL (2)\r
-// CHECK:       NumberOfAuxSymbols       = 0\r
-// CHECK:       AuxillaryData            =\r
-\r
-// CHECK:     }\r
-// CHECK:   ]\r
-// CHECK: }\r
+// 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 | llvm-readobj -h -s -sr -sd -t | FileCheck %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:   Machine:                   IMAGE_FILE_MACHINE_I386 (0x14C)
+// CHECK:   SectionCount:              2
+// CHECK:   TimeDateStamp:             {{[0-9]+}}
+// CHECK:   PointerToSymbolTable:      0x{{[0-9A-F]+}}
+// CHECK:   SymbolCount:               7
+// CHECK:   OptionalHeaderSize:        0
+// CHECK:   Characteristics [ (0x0)
+// CHECK:   ]
+// CHECK: }
+// CHECK: Sections [
+// CHECK:   Section {
+// CHECK:     Number:                    1
+// CHECK:     Name:                      .text
+// CHECK:     VirtualSize:               0
+// CHECK:     VirtualAddress:            0
+// CHECK:     RawDataSize:               {{[0-9]+}}
+// CHECK:     PointerToRawData:          0x{{[0-9A-F]+}}
+// CHECK:     PointerToRelocations:      0x{{[0-9A-F]+}}
+// CHECK:     PointerToLineNumbers:      0x0
+// CHECK:     RelocationCount:           6
+// CHECK:     LineNumberCount:           0
+// CHECK:     Characteristics [ (0x60500020)
+// CHECK:       IMAGE_SCN_ALIGN_16BYTES
+// CHECK:       IMAGE_SCN_CNT_CODE
+// CHECK:       IMAGE_SCN_MEM_EXECUTE
+// CHECK:       IMAGE_SCN_MEM_READ
+// CHECK:     ]
+// CHECK:     Relocations [
+// CHECK:       0x6  IMAGE_REL_I386_DIR32 .data
+// CHECK:       0xB  IMAGE_REL_I386_REL32 _printf
+// CHECK:       0x12 IMAGE_REL_I386_DIR32 .data
+// CHECK:       0x17 IMAGE_REL_I386_REL32 _puts
+// CHECK:       0x1E IMAGE_REL_I386_DIR32 .data
+// CHECK:       0x23 IMAGE_REL_I386_REL32 _puts
+// CHECK:     ]
+// CHECK:     SectionData (
+// CHECK:       0000: 83EC04C7 04240000 0000E800 000000C7 |.....$..........|
+// CHECK:       0010: 04240700 0000E800 000000C7 04241000 |.$...........$..|
+// CHECK:       0020: 0000E800 00000031 C083C404 C3       |.......1.....|
+// CHECK:     )
+// CHECK:   }
+// CHECK:   Section {
+// CHECK:     Number:                    2
+// CHECK:     Name:                      .data
+// CHECK:     VirtualSize:               0
+// CHECK:     VirtualAddress:            0
+// CHECK:     RawDataSize:               {{[0-9]+}}
+// CHECK:     PointerToRawData:          0x{{[0-9A-F]+}}
+// CHECK:     PointerToRelocations:      0x0
+// CHECK:     PointerToLineNumbers:      0x0
+// CHECK:     RelocationCount:           0
+// CHECK:     LineNumberCount:           0
+// CHECK:     Characteristics [ (0xC0500040)
+// CHECK:       IMAGE_SCN_ALIGN_16BYTES
+// CHECK:       IMAGE_SCN_CNT_INITIALIZED_DATA
+// CHECK:       IMAGE_SCN_MEM_READ
+// CHECK:       IMAGE_SCN_MEM_WRITE
+// CHECK:     Relocations [
+// CHECK:     ]
+// CHECK:     SectionData (
+// CHECK:       0000: 48656C6C 6F200057 6F726C64 21000000 |Hello .World!...|
+// CHECK:       0010: 49276D20 54686520 4C617374 204C696E |I'm The Last Lin|
+// CHECK:       0020: 652E00                              |e..|
+// CHECK:     )
+// CHECK:   }
+// CHECK: ]
+// CHECK: Symbols [
+// CHECK:   Symbol {
+// CHECK:     Name:                      .text
+// CHECK:     Value:                     0
+// CHECK:     Section:                   .text
+// CHECK:     BaseType:                  Null
+// CHECK:     ComplexType:               Null
+// CHECK:     StorageClass:              Static
+// CHECK:     AuxSymbolCount:            1
+// CHECK:     AuxSectionDef {
+// CHECK:       Length: 45
+// CHECK:       RelocationCount: 6
+// CHECK:       LineNumberCount: 0
+// CHECK:       Checksum: 0x0
+// CHECK:       Number: 1
+// CHECK:       Selection: 0x0
+// CHECK:       Unused: (00 00 00)
+// CHECK:     }
+// CHECK:   }
+// CHECK:   Symbol {
+// CHECK:     Name:                      .data
+// CHECK:     Value:                     0
+// CHECK:     Section:                   .data
+// CHECK:     BaseType:                  Null
+// CHECK:     ComplexType:               Null
+// CHECK:     StorageClass:              Static
+// CHECK:     AuxSymbolCount:            1
+// CHECK:     AuxSectionDef {
+// CHECK:       Length: 35
+// CHECK:       RelocationCount: 0
+// CHECK:       LineNumberCount: 0
+// CHECK:       Checksum: 0x0
+// CHECK:       Number: 2
+// CHECK:       Selection: 0x0
+// CHECK:       Unused: (00 00 00)
+// CHECK:     }
+// CHECK:   }
+// CHECK:   Symbol {
+// CHECK:     Name:                      _main
+// CHECK:     Value:                     0
+// CHECK:     Section:                   .text
+// CHECK:     BaseType:                  Null
+// CHECK:     ComplexType:               Function
+// CHECK:     StorageClass:              External
+// CHECK:     AuxSymbolCount:            0
+// CHECK:   }
+// CHECK:   Symbol {
+// CHECK:     Name:                      _printf
+// CHECK:     Value:                     0
+// CHECK:     Section:                   (0)
+// CHECK:     BaseType:                  Null
+// CHECK:     ComplexType:               Null
+// CHECK:     StorageClass:              External
+// CHECK:     AuxSymbolCount:            0
+// CHECK:   }
+// CHECK:   Symbol {
+// CHECK:     Name:                      _puts
+// CHECK:     Value:                     0
+// CHECK:     Section:                   (0)
+// CHECK:     BaseType:                  Null
+// CHECK:     ComplexType:               Null
+// CHECK:     StorageClass:              External
+// CHECK:     AuxSymbolCount:            0
+// CHECK:   }
+// CHECK: ]