diff options
Diffstat (limited to 'test/MC/COFF')
-rw-r--r-- | test/MC/COFF/alias.s | 13 | ||||
-rw-r--r-- | test/MC/COFF/basic-coff-64.s | 3 | ||||
-rw-r--r-- | test/MC/COFF/basic-coff.s | 3 | ||||
-rw-r--r-- | test/MC/COFF/bigobj.py | 26 | ||||
-rw-r--r-- | test/MC/COFF/bss_section.ll | 2 | ||||
-rw-r--r-- | test/MC/COFF/comm-align.s | 57 | ||||
-rw-r--r-- | test/MC/COFF/comm.ll | 4 | ||||
-rw-r--r-- | test/MC/COFF/comm.s | 16 | ||||
-rw-r--r-- | test/MC/COFF/const-gv-with-rel-init.ll | 11 | ||||
-rw-r--r-- | test/MC/COFF/feat00.s | 2 | ||||
-rw-r--r-- | test/MC/COFF/file.s | 6 | ||||
-rw-r--r-- | test/MC/COFF/ir-to-imgrel.ll | 2 | ||||
-rwxr-xr-x | test/MC/COFF/linker-options.ll | 2 | ||||
-rwxr-xr-x | test/MC/COFF/lset0.s | 13 | ||||
-rw-r--r-- | test/MC/COFF/secidx.s | 2 | ||||
-rw-r--r-- | test/MC/COFF/section-invalid-flags.s | 3 | ||||
-rw-r--r-- | test/MC/COFF/section-name-encoding.s | 27 | ||||
-rw-r--r-- | test/MC/COFF/section-passthru-flags.s | 7 | ||||
-rw-r--r-- | test/MC/COFF/seh-linkonce.s | 85 | ||||
-rw-r--r-- | test/MC/COFF/simple-fixups.s | 7 | ||||
-rw-r--r-- | test/MC/COFF/symbol-fragment-offset-64.s | 6 | ||||
-rw-r--r-- | test/MC/COFF/symbol-fragment-offset.s | 6 | ||||
-rw-r--r-- | test/MC/COFF/weak.s | 8 |
23 files changed, 255 insertions, 56 deletions
diff --git a/test/MC/COFF/alias.s b/test/MC/COFF/alias.s index eb5398a..2293d43 100644 --- a/test/MC/COFF/alias.s +++ b/test/MC/COFF/alias.s @@ -46,9 +46,9 @@ weak_aliased_to_external = external2 // CHECK-NEXT: AuxSymbolCount: 0 // CHECK-NEXT: } // CHECK-NEXT: Symbol { -// CHECK-NEXT: Name: global_aliased_to_external +// CHECK: Name: global_aliased_to_external // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null (0x0) // CHECK-NEXT: ComplexType: Null (0x0) // CHECK-NEXT: StorageClass: External (0x2) @@ -57,7 +57,7 @@ weak_aliased_to_external = external2 // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: external1 // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null (0x0) // CHECK-NEXT: ComplexType: Null (0x0) // CHECK-NEXT: StorageClass: External (0x2) @@ -84,21 +84,20 @@ weak_aliased_to_external = external2 // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: weak_aliased_to_external // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null (0x0) // CHECK-NEXT: ComplexType: Null (0x0) // CHECK-NEXT: StorageClass: WeakExternal (0x69) // CHECK-NEXT: AuxSymbolCount: 1 // CHECK-NEXT: AuxWeakExternal { -// CHECK-NEXT: Linked: external2 (13) +// CHECK-NEXT: Linked: external2 // CHECK-NEXT: Search: Library (0x2) -// CHECK-NEXT: Unused: (00 00 00 00 00 00 00 00 00 00) // CHECK-NEXT: } // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: external2 // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null (0x0) // CHECK-NEXT: ComplexType: Null (0x0) // CHECK-NEXT: StorageClass: External (0x2) diff --git a/test/MC/COFF/basic-coff-64.s b/test/MC/COFF/basic-coff-64.s index 38a9e57..62e4eb9 100644 --- a/test/MC/COFF/basic-coff-64.s +++ b/test/MC/COFF/basic-coff-64.s @@ -113,7 +113,6 @@ _main: # @main // CHECK: Checksum: 0x0 // CHECK: Number: [[DataNum]] // CHECK: Selection: 0x0 -// CHECK: Unused: (00 00 00) // CHECK: } // CHECK: } // CHECK: Symbol { @@ -128,7 +127,7 @@ _main: # @main // CHECK: Symbol { // CHECK: Name: _printf // CHECK: Value: 0 -// CHECK: Section: (0) +// CHECK: Section: IMAGE_SYM_UNDEFINED (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External diff --git a/test/MC/COFF/basic-coff.s b/test/MC/COFF/basic-coff.s index 38bfa6d..549825a 100644 --- a/test/MC/COFF/basic-coff.s +++ b/test/MC/COFF/basic-coff.s @@ -113,7 +113,6 @@ L_.str: # @.str // CHECK: Checksum: 0x0 // CHECK: Number: 2 // CHECK: Selection: 0x0 -// CHECK: Unused: (00 00 00) // CHECK: } // CHECK: } // CHECK: Symbol { @@ -128,7 +127,7 @@ L_.str: # @.str // CHECK: Symbol { // CHECK: Name: _printf // CHECK: Value: 0 -// CHECK: Section: (0) +// CHECK: Section: IMAGE_SYM_UNDEFINED (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External diff --git a/test/MC/COFF/bigobj.py b/test/MC/COFF/bigobj.py new file mode 100644 index 0000000..2d61073 --- /dev/null +++ b/test/MC/COFF/bigobj.py @@ -0,0 +1,26 @@ +# RUN: python %s | llvm-mc -filetype=obj -triple i686-pc-win32 - | llvm-readobj -h | FileCheck %s + +# This test checks that the COFF object emitter can produce objects with +# more than 65279 sections. + +# While we only generate 65277 sections, an implicit .text, .data and .bss will +# also be emitted. This brings the total to 65280. +num_sections = 65277 + +# CHECK: ImageFileHeader { +# CHECK-NEXT: Machine: IMAGE_FILE_MACHINE_I386 +# CHECK-NEXT: SectionCount: 65280 +# CHECK-NEXT: TimeDateStamp: {{[0-9]+}} +# CHECK-NEXT: PointerToSymbolTable: 0x{{[0-9A-F]+}} +# CHECK-NEXT: SymbolCount: 195837 +# CHECK-NEXT: OptionalHeaderSize: 0 +# CHECK-NEXT: Characteristics [ (0x0) +# CHECK-NEXT: ] +# CHECK-NEXT: } + +for i in range(0, num_sections): + print(""" .section .bss,"bw",discard,_b%d + .globl _b%d # @b%d +_b%d: + .byte 0 # 0x0 +""" % (i, i, i, i)) diff --git a/test/MC/COFF/bss_section.ll b/test/MC/COFF/bss_section.ll index 477b3df..1921eeb 100644 --- a/test/MC/COFF/bss_section.ll +++ b/test/MC/COFF/bss_section.ll @@ -6,4 +6,4 @@ ; CHECK: .bss @thingy_linkonce = linkonce_odr global %struct.foo zeroinitializer, align 4 -; CHECK: .section .bss,"bw",discard,_thingy_linkonce +; CHECK: .section .bss,"wb",discard,_thingy_linkonce diff --git a/test/MC/COFF/comm-align.s b/test/MC/COFF/comm-align.s new file mode 100644 index 0000000..ca6bfbe --- /dev/null +++ b/test/MC/COFF/comm-align.s @@ -0,0 +1,57 @@ +# RUN: llvm-mc -triple i686-windows-gnu -filetype obj -o - %s \ +# RUN: | llvm-readobj -coff-directives -symbols | FileCheck %s + +# NOTE: this test checks multiple things: +# - that -aligncomm is not emitted for 1-byte alignment +# - that -aligncomm is emitted for the various alignments (greater than 1) +# - that the alignment is represented as a log_2 of the alignment +# - that the section switching occurs correctly +# - that functions after the switch also are emitted into the correct section + + .text + + .def _a + .scl 3 + .type 32 + .endef +_a: + ret + + .data + + .comm _s_1,4,0 # @s_1 + .comm _s_2,4,1 # @s_2 + .comm _s_4,4,2 # @s_3 + .comm _s_8,4,3 # @s_4 + + .comm _small_but_overaligned,1,3 # @s_4 + + .text + + .def _b + .scl 3 + .type 32 + .endef +_b: + ret + +# CHECK-NOT: -aligncomm:"_s_1",0 + +# CHECK: Symbols [ +# CHECK: Symbol { +# CHECK: Name: _a +# CHECK: Section: .text (1) +# CHECK: } +# CHECK: Symbol { +# CHECK: Name: _small_but_overaligned +# CHECK-NEXT:Value: 1 +# CHECK-NEXT:Section: IMAGE_SYM_UNDEFINED (0) +# CHECK: } +# CHECK: Symbol { +# CHECK: Name: _b +# CHECK: Section: .text (1) +# CHECK: } +# CHECK: ] + +# CHECK: Directive(s): -aligncomm:"_s_2",1 -aligncomm:"_s_4",2 -aligncomm:"_s_8",3 -aligncomm:"_small_but_overaligned",3 + diff --git a/test/MC/COFF/comm.ll b/test/MC/COFF/comm.ll index 6fe122e..74da557 100644 --- a/test/MC/COFF/comm.ll +++ b/test/MC/COFF/comm.ll @@ -9,5 +9,5 @@ ; CHECK: .lcomm _a,1 ; CHECK: .lcomm _b,8,8 ; .comm uses log2 alignment -; CHECK: .comm _c,1 -; CHECK: .comm _d,8 +; CHECK: .comm _c,1,0 +; CHECK: .comm _d,8,3 diff --git a/test/MC/COFF/comm.s b/test/MC/COFF/comm.s index 37db75f..773ebde 100644 --- a/test/MC/COFF/comm.s +++ b/test/MC/COFF/comm.s @@ -1,7 +1,9 @@ // RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | llvm-readobj -t | FileCheck %s .lcomm _a,4,4 -.comm _b, 4 +.comm _b, 4, 2 +// _c has size 1 but align 32, the value field is the max of size and align. +.comm _c, 1, 5 // CHECK: Symbol { @@ -17,7 +19,17 @@ // CHECK: Symbol { // CHECK: Name: _b // CHECK-NEXT: Value: 4 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) +// CHECK-NEXT: BaseType: Null +// CHECK-NEXT: ComplexType: Null +// CHECK-NEXT: StorageClass: External +// CHECK-NEXT: AuxSymbolCount: 0 +// CHECK-NEXT: } + +// CHECK: Symbol { +// CHECK: Name: _c +// CHECK-NEXT: Value: 32 +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null // CHECK-NEXT: ComplexType: Null // CHECK-NEXT: StorageClass: External diff --git a/test/MC/COFF/const-gv-with-rel-init.ll b/test/MC/COFF/const-gv-with-rel-init.ll new file mode 100644 index 0000000..7d3c5f6 --- /dev/null +++ b/test/MC/COFF/const-gv-with-rel-init.ll @@ -0,0 +1,11 @@ +; RUN: llc -mtriple x86_64-pc-windows-msvc < %s | FileCheck %s + +define void @f() { + ret void +} + +@ptr = constant void ()* @f, section ".CRT$XLB", align 8 +; CHECK: .section .CRT$XLB,"rd" + +@weak_array = weak_odr unnamed_addr constant [1 x i8*] [i8* bitcast (void ()* @f to i8*)] +; CHECK: .section .rdata,"rd",discard,weak_array diff --git a/test/MC/COFF/feat00.s b/test/MC/COFF/feat00.s index bfd47ad..f671ebe 100644 --- a/test/MC/COFF/feat00.s +++ b/test/MC/COFF/feat00.s @@ -6,7 +6,7 @@ // CHECK: Symbol { // CHECK: Name: @feat.00 // CHECK: Value: 123 -// CHECK: Section: (65535) +// CHECK: Section: IMAGE_SYM_ABSOLUTE (-1) // CHECK: BaseType: Null (0x0) // CHECK: ComplexType: Null (0x0) // CHECK: StorageClass: External (0x2) diff --git a/test/MC/COFF/file.s b/test/MC/COFF/file.s index 132e82b..a18a1f4 100644 --- a/test/MC/COFF/file.s +++ b/test/MC/COFF/file.s @@ -21,7 +21,7 @@ // CHECK-SCN: Symbols [ // CHECK-SCN: Symbol { // CHECK-SCN: Name: .file -// CHECK-SCN: Section: (65534) +// CHECK-SCN: Section: IMAGE_SYM_DEBUG (-2) // CHECK-SCN: StorageClass: File // CHECK-SCN: AuxFileRecord { // CHECK-SCN: FileName: null-padded.asm @@ -29,7 +29,7 @@ // CHECK-SCN: } // CHECK-SCN: Symbol { // CHECK-SCN: Name: .file -// CHECK-SCN: Section: (65534) +// CHECK-SCN: Section: IMAGE_SYM_DEBUG (-2) // CHECK-SCN: StorageClass: File // CHECK-SCN: AuxFileRecord { // CHECK-SCN: FileName: eighteen-chars.asm @@ -37,7 +37,7 @@ // CHECK-SCN: } // CHECK-SCN: Symbol { // CHECK-SCN: Name: .file -// CHECK-SCN: Section: (65534) +// CHECK-SCN: Section: IMAGE_SYM_DEBUG (-2) // CHECK-SCN: StorageClass: File // CHECK-SCN: AuxFileRecord { // CHECK-SCN: FileName: multiple-auxiliary-entries.asm diff --git a/test/MC/COFF/ir-to-imgrel.ll b/test/MC/COFF/ir-to-imgrel.ll index 39884d2..dfc88b2 100644 --- a/test/MC/COFF/ir-to-imgrel.ll +++ b/test/MC/COFF/ir-to-imgrel.ll @@ -2,5 +2,5 @@ @__ImageBase = external global i8 -; X64: .quad "?x@@3HA"@IMGREL32 +; X64: .quad "?x@@3HA"@IMGREL @"\01?x@@3HA" = global i64 sub nsw (i64 ptrtoint (i64* @"\01?x@@3HA" to i64), i64 ptrtoint (i8* @__ImageBase to i64)), align 8 diff --git a/test/MC/COFF/linker-options.ll b/test/MC/COFF/linker-options.ll index 0be74e5..60baccf 100755 --- a/test/MC/COFF/linker-options.ll +++ b/test/MC/COFF/linker-options.ll @@ -14,7 +14,7 @@ define dllexport void @foo() { ret void } -; CHECK: .section .drectve,"r" +; CHECK: .section .drectve,"yn" ; CHECK: .ascii " /DEFAULTLIB:msvcrt.lib" ; CHECK: .ascii " /DEFAULTLIB:msvcrt.lib" ; CHECK: .ascii " /DEFAULTLIB:secur32.lib" diff --git a/test/MC/COFF/lset0.s b/test/MC/COFF/lset0.s index 7321b01..f4a13bf 100755 --- a/test/MC/COFF/lset0.s +++ b/test/MC/COFF/lset0.s @@ -1,12 +1,11 @@ -// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s -o - | llvm-nm - | FileCheck %s +// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s -o - | llvm-nm - | FileCheck %s --check-prefix=GLOBAL +// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s -o - | llvm-nm - | FileCheck %s --check-prefix=LOCAL not_global = 123 global = 456 .globl global -.Llocal = 789 +Llocal = 789 -// CHECK-NOT: not_global -// CHECK-NOT: Llocal -// CHECK: global -// CHECK-NOT: not_global -// CHECK-NOT: Llocal +// LOCAL-NOT: local +// GLOBAL: A global +// GLOBAL: a not_global diff --git a/test/MC/COFF/secidx.s b/test/MC/COFF/secidx.s index 619d777..022804d 100644 --- a/test/MC/COFF/secidx.s +++ b/test/MC/COFF/secidx.s @@ -4,7 +4,9 @@ Lfoo: .secidx Lfoo + .short 0 .secidx Lbar + .short 0 .section spam Lbar: diff --git a/test/MC/COFF/section-invalid-flags.s b/test/MC/COFF/section-invalid-flags.s index 17b1550..9cdceaf 100644 --- a/test/MC/COFF/section-invalid-flags.s +++ b/test/MC/COFF/section-invalid-flags.s @@ -6,3 +6,6 @@ // CHECK: error: conflicting section flags 'b' and 'd' .section s_bd,"bd"; .long 1 + +// CHECK: error: expected comdat type such as 'discard' or 'largest' after protection bits +.section .stack, "w", @nobits diff --git a/test/MC/COFF/section-name-encoding.s b/test/MC/COFF/section-name-encoding.s index 7edd6d7..73ab4bd 100644 --- a/test/MC/COFF/section-name-encoding.s +++ b/test/MC/COFF/section-name-encoding.s @@ -21,14 +21,19 @@ .section s1234567; .long 1 +// Note: the names in the string table will be sorted in reverse +// lexicographical order. Use a suffix letter (z, y, x, ...) to +// get the preferred ordering of names in the test. + // Base 10 encoding +// Ending in z should put the name first in the string table. // /4 // CHECK: Section { // CHECK: Number: 6 -// CHECK: Name: s12345678 (2F 34 00 00 00 00 00 00) +// CHECK: Name: s1234567z (2F 34 00 00 00 00 00 00) // CHECK: } -.section s12345678; .long 1 +.section s1234567z; .long 1 // Generate padding sections to increase the string table size to at least @@ -47,20 +52,20 @@ pad_sections2 \pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad .endm -// 1000x 'a' -pad_sections aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +// 1000x 'y' +pad_sections yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy // /1000029 == 4 + 10 + (5 * (2 + (20 * 10 * 1000) + 1)) // v | | v ~~~~~~~~~~~~~~ v // table size v v "p0" pad NUL separator -// "s12345678\0" # of pad sections +// "s1234567z\0" # of pad sections // // CHECK: Section { // CHECK: Number: 12 -// CHECK: Name: seven_digit (2F 31 30 30 30 30 32 39) +// CHECK: Name: sevendigitx (2F 31 30 30 30 30 32 39) // CHECK: } -.section seven_digit; .long 1 +.section sevendigitx; .long 1 // Generate padding sections to increase the string table size to at least @@ -71,18 +76,18 @@ pad_sections aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa .endm // 1000x 'a' -pad_sections_ex aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +pad_sections_ex wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww // //AAmJa4 == 1000029 + 12 + (5 * (2 + (9 * 20 * 10 * 1000) + 1)) == 38*64^3 + 9*64^2 + 26*64 + 56 // v | | v ~~~~~~~~~~~~~~~~~~ v // seven_digit offset v v "p0" pad NUL separator -// "seven_digit\0" # of pad sections +// "sevendigitx\0" # of pad sections // // "2F 2F 41 41 6D 4A 61 34" is "//AAmJa4", which decodes to "0 0 38 9 26 56". // // CHECK: Section { // CHECK: Number: 18 -// CHECK: Name: double_slash (2F 2F 41 41 6D 4A 61 34) +// CHECK: Name: doubleslashv (2F 2F 41 41 6D 4A 61 34) // CHECK: } -.section double_slash; .long 1 +.section doubleslashv; .long 1 diff --git a/test/MC/COFF/section-passthru-flags.s b/test/MC/COFF/section-passthru-flags.s new file mode 100644 index 0000000..3bd061b --- /dev/null +++ b/test/MC/COFF/section-passthru-flags.s @@ -0,0 +1,7 @@ +// RUN: llvm-mc -triple i386-pc-win32 < %s | FileCheck %s +.section .klaatu,"wn" +// CHECK: .section .klaatu,"wn" +.section .barada,"y" +// CHECK: .section .barada,"y" +.section .nikto,"wds" +// CHECK: .section .nikto,"wds" diff --git a/test/MC/COFF/seh-linkonce.s b/test/MC/COFF/seh-linkonce.s new file mode 100644 index 0000000..5631b74 --- /dev/null +++ b/test/MC/COFF/seh-linkonce.s @@ -0,0 +1,85 @@ +// RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s | llvm-readobj -sections -section-symbols | FileCheck %s + + .text + .def weak_func; + .scl 2; + .type 32; + .endef + .section .text,"xr",discard,weak_func + .globl weak_func + .align 16, 0x90 +weak_func: # @weak_func +.Ltmp0: +.seh_proc weak_func +# BB#0: # %entry + pushq %rbp +.Ltmp1: + .seh_pushreg 5 + movq %rsp, %rbp +.Ltmp2: + .seh_setframe 5, 0 +.Ltmp3: + .seh_endprologue + xorl %eax, %eax + popq %rbp + retq +.Leh_func_end0: +.Ltmp4: + .seh_endproc + +// CHECK: Sections [ +// CHECK: Section { +// CHECK: Name: .text +// CHECK: } +// CHECK: Section { +// CHECK: Name: .data +// CHECK: } +// CHECK: Section { +// CHECK: Name: .bss +// CHECK: } +// CHECK: Section { +// CHECK: Number: [[TEXT_SECNUM:[0-9]+]] +// CHECK: Name: .text +// CHECK: Characteristics [ +// CHECK: IMAGE_SCN_LNK_COMDAT +// CHECK: ] +// CHECK: } +// CHECK: Section { +// CHECK: Number: [[XDATA_SECNUM:[0-9]+]] +// CHECK: Name: .xdata +// CHECK: Characteristics [ +// CHECK: IMAGE_SCN_LNK_COMDAT +// CHECK: ] +// CHECK: Symbols [ +// CHECK: Symbol { +// CHECK: Name: .xdata +// CHECK: Section: .xdata ([[XDATA_SECNUM]]) +// CHECK: StorageClass: Static (0x3) +// CHECK: AuxSymbolCount: 1 +// CHECK: AuxSectionDef { +// CHECK: Selection: Associative (0x5) +// CHECK: AssocSection: .text ([[TEXT_SECNUM]]) +// CHECK: } +// CHECK: } +// CHECK: ] +// CHECK: } +// CHECK: Section { +// CHECK: Number: [[PDATA_SECNUM:[0-9]+]] +// CHECK: Name: .pdata +// CHECK: Characteristics [ +// CHECK: IMAGE_SCN_LNK_COMDAT +// CHECK: ] +// CHECK: Symbols [ +// CHECK: Symbol { +// CHECK: Name: .pdata +// CHECK: Section: .pdata ([[PDATA_SECNUM]]) +// CHECK: StorageClass: Static (0x3) +// CHECK: AuxSymbolCount: 1 +// CHECK: AuxSectionDef { +// CHECK: Selection: Associative (0x5) +// CHECK: AssocSection: .text ([[TEXT_SECNUM]]) +// CHECK: } +// CHECK: } +// CHECK: ] +// CHECK: } +// CHECK: ] diff --git a/test/MC/COFF/simple-fixups.s b/test/MC/COFF/simple-fixups.s index 2a74f21..cb5d764 100644 --- a/test/MC/COFF/simple-fixups.s +++ b/test/MC/COFF/simple-fixups.s @@ -1,5 +1,6 @@ -// The purpose of this test is to verify that we do not produce unneeded -// relocations when symbols are in the same section and we know their offset. +// The purpose of this test is to verify that we produce relocations for +// references to functions. Failing to do so might cause pointer-to-function +// equality to fail if /INCREMENTAL links are used. // RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | llvm-readobj -s | FileCheck %s // RUN: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s | llvm-readobj -s | FileCheck %s @@ -46,4 +47,4 @@ Ltmp0: ret // CHECK: Sections [ -// CHECK-NOT: RelocationCount: {{[^0]}} +// CHECK: RelocationCount: 1 diff --git a/test/MC/COFF/symbol-fragment-offset-64.s b/test/MC/COFF/symbol-fragment-offset-64.s index deac888..05b46bb 100644 --- a/test/MC/COFF/symbol-fragment-offset-64.s +++ b/test/MC/COFF/symbol-fragment-offset-64.s @@ -117,7 +117,6 @@ _main: # @main // CHECK: Checksum: 0x0 // CHECK: Number: 1 // CHECK: Selection: 0x0 -// CHECK: Unused: (00 00 00) // CHECK: } // CHECK: } // CHECK: Symbol { @@ -135,7 +134,6 @@ _main: # @main // CHECK: Checksum: 0x0 // CHECK: Number: 2 // CHECK: Selection: 0x0 -// CHECK: Unused: (00 00 00) // CHECK: } // CHECK: } // CHECK: Symbol { @@ -150,7 +148,7 @@ _main: # @main // CHECK: Symbol { // CHECK: Name: _printf // CHECK: Value: 0 -// CHECK: Section: (0) +// CHECK: Section: IMAGE_SYM_UNDEFINED (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External @@ -159,7 +157,7 @@ _main: # @main // CHECK: Symbol { // CHECK: Name: _puts // CHECK: Value: 0 -// CHECK: Section: (0) +// CHECK: Section: IMAGE_SYM_UNDEFINED (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External diff --git a/test/MC/COFF/symbol-fragment-offset.s b/test/MC/COFF/symbol-fragment-offset.s index b09c5af..cc5040a 100644 --- a/test/MC/COFF/symbol-fragment-offset.s +++ b/test/MC/COFF/symbol-fragment-offset.s @@ -117,7 +117,6 @@ L_.str2: // CHECK: Checksum: 0x0 // CHECK: Number: 1 // CHECK: Selection: 0x0 -// CHECK: Unused: (00 00 00) // CHECK: } // CHECK: } // CHECK: Symbol { @@ -135,7 +134,6 @@ L_.str2: // CHECK: Checksum: 0x0 // CHECK: Number: 2 // CHECK: Selection: 0x0 -// CHECK: Unused: (00 00 00) // CHECK: } // CHECK: } // CHECK: Symbol { @@ -150,7 +148,7 @@ L_.str2: // CHECK: Symbol { // CHECK: Name: _printf // CHECK: Value: 0 -// CHECK: Section: (0) +// CHECK: Section: IMAGE_SYM_UNDEFINED (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External @@ -159,7 +157,7 @@ L_.str2: // CHECK: Symbol { // CHECK: Name: _puts // CHECK: Value: 0 -// CHECK: Section: (0) +// CHECK: Section: IMAGE_SYM_UNDEFINED (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External diff --git a/test/MC/COFF/weak.s b/test/MC/COFF/weak.s index accd3f4..6086749 100644 --- a/test/MC/COFF/weak.s +++ b/test/MC/COFF/weak.s @@ -37,7 +37,7 @@ LBB0_2: # %return // CHECK: Symbol { // CHECK: Name: _test_weak // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null // CHECK-NEXT: ComplexType: Null // CHECK-NEXT: StorageClass: WeakExternal @@ -45,14 +45,13 @@ LBB0_2: # %return // CHECK-NEXT: AuxWeakExternal { // CHECK-NEXT: Linked: .weak._test_weak.default // CHECK-NEXT: Search: Library -// CHECK-NEXT: Unused: (00 00 00 00 00 00 00 00 00 00) // CHECK-NEXT: } // CHECK-NEXT: } // CHECK: Symbol { // CHECK: Name: .weak._test_weak.default // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (65535) +// CHECK-NEXT: Section: IMAGE_SYM_ABSOLUTE (-1) // CHECK-NEXT: BaseType: Null // CHECK-NEXT: ComplexType: Null // CHECK-NEXT: StorageClass: External @@ -62,7 +61,7 @@ LBB0_2: # %return // CHECK: Symbol { // CHECK: Name: _test_weak_alias // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null // CHECK-NEXT: ComplexType: Null // CHECK-NEXT: StorageClass: WeakExternal @@ -70,6 +69,5 @@ LBB0_2: # %return // CHECK-NEXT: AuxWeakExternal { // CHECK-NEXT: Linked: _main // CHECK-NEXT: Search: Library -// CHECK-NEXT: Unused: (00 00 00 00 00 00 00 00 00 00) // CHECK-NEXT: } // CHECK-NEXT: } |