diff options
author | Nico Rieck <nico.rieck@gmail.com> | 2013-07-04 21:32:07 +0000 |
---|---|---|
committer | Nico Rieck <nico.rieck@gmail.com> | 2013-07-04 21:32:07 +0000 |
commit | a6d343a688073664b3a80aa117e0d3cbecf28014 (patch) | |
tree | 8a200175ba18e94d9446e29131c5d19f234e0893 /test | |
parent | e7006bb04bd881478fe24d6fbb3051ba3f63d746 (diff) | |
download | external_llvm-a6d343a688073664b3a80aa117e0d3cbecf28014.zip external_llvm-a6d343a688073664b3a80aa117e0d3cbecf28014.tar.gz external_llvm-a6d343a688073664b3a80aa117e0d3cbecf28014.tar.bz2 |
MC: Add .section directive to COFF
Supports GAS flags "abdnrswxy". No support for alignment or subsections.
Fixes PR16366.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185669 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/MC/COFF/section-invalid-flags.s | 8 | ||||
-rw-r--r-- | test/MC/COFF/section.s | 170 | ||||
-rw-r--r-- | test/MC/COFF/seh-section.s | 2 |
3 files changed, 178 insertions, 2 deletions
diff --git a/test/MC/COFF/section-invalid-flags.s b/test/MC/COFF/section-invalid-flags.s new file mode 100644 index 0000000..17b1550 --- /dev/null +++ b/test/MC/COFF/section-invalid-flags.s @@ -0,0 +1,8 @@ +// RUN: not llvm-mc -triple i386-pc-win32 -filetype=obj %s 2>&1 | FileCheck %s +// RUN: not llvm-mc -triple x86_64-pc-win32 -filetype=obj %s 2>&1 | FileCheck %s + +// CHECK: error: conflicting section flags 'b' and 'd' +.section s_db,"db"; .long 1 + +// CHECK: error: conflicting section flags 'b' and 'd' +.section s_bd,"bd"; .long 1 diff --git a/test/MC/COFF/section.s b/test/MC/COFF/section.s new file mode 100644 index 0000000..d7547e6 --- /dev/null +++ b/test/MC/COFF/section.s @@ -0,0 +1,170 @@ +// RUN: llvm-mc -triple i386-pc-win32 -filetype=obj %s | llvm-readobj -s | FileCheck %s +// RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s | llvm-readobj -s | FileCheck %s + +.section .foo$bar; .long 1 +.section .foo@bar; .long 1 +.section ABCDEFGHIJKLMNOPQRSTUVWXYZ; .long 1 +.section abcdefghijklmnopqrstuvwxyz; .long 1 +.section _0123456789; .long 1 + +// CHECK: Sections [ +// CHECK: Section { +// CHECK: Name: .foo$bar +// CHECK: } +// CHECK: Section { +// CHECK: Name: .foo@bar +// CHECK: } +// CHECK: Section { +// CHECK: Name: ABCDEFGHIJKLMNOPQRSTUVWXYZ +// CHECK: } +// CHECK: Section { +// CHECK: Name: abcdefghijklmnopqrstuvwxyz +// CHECK: } +// CHECK: Section { +// CHECK: Name: _0123456789 +// CHECK: } + +// Test that the defaults are used +.section s ; .long 1 +.section s_, "" ; .long 1 +.section s_a,"a"; .long 1 +.section s_b,"b"; .long 1 +.section s_d,"d"; .long 1 +.section s_n,"n"; .long 1 +.section s_r,"r"; .long 1 +.section s_s,"s"; .long 1 +.section s_w,"w"; .long 1 +.section s_x,"x"; .long 1 +.section s_y,"y"; .long 1 + +// CHECK: Section { +// CHECK: Name: s +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA +// CHECK-NEXT: IMAGE_SCN_MEM_READ +// CHECK-NEXT: IMAGE_SCN_MEM_WRITE +// CHECK-NEXT: ] +// CHECK: } +// CHECK: Section { +// CHECK: Name: s_ +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA +// CHECK-NEXT: IMAGE_SCN_MEM_READ +// CHECK-NEXT: IMAGE_SCN_MEM_WRITE +// CHECK-NEXT: ] +// CHECK: } +// CHECK: Section { +// CHECK: Name: s_a +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA +// CHECK-NEXT: IMAGE_SCN_MEM_READ +// CHECK-NEXT: IMAGE_SCN_MEM_WRITE +// CHECK-NEXT: ] +// CHECK: } +// CHECK: Section { +// CHECK: Name: s_b +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: IMAGE_SCN_CNT_UNINITIALIZED_DATA +// CHECK-NEXT: IMAGE_SCN_MEM_READ +// CHECK-NEXT: IMAGE_SCN_MEM_WRITE +// CHECK-NEXT: ] +// CHECK: } +// CHECK: Section { +// CHECK: Name: s_d +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA +// CHECK-NEXT: IMAGE_SCN_MEM_READ +// CHECK-NEXT: IMAGE_SCN_MEM_WRITE +// CHECK-NEXT: ] +// CHECK: } +// CHECK: Section { +// CHECK: Name: s_n +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: IMAGE_SCN_LNK_REMOVE +// CHECK-NEXT: IMAGE_SCN_MEM_READ +// CHECK-NEXT: IMAGE_SCN_MEM_WRITE +// CHECK-NEXT: ] +// CHECK: } +// CHECK: Section { +// CHECK: Name: s_r +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA +// CHECK-NEXT: IMAGE_SCN_MEM_READ +// CHECK-NEXT: ] +// CHECK: } +// CHECK: Section { +// CHECK: Name: s_s +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA +// CHECK-NEXT: IMAGE_SCN_MEM_READ +// CHECK-NEXT: IMAGE_SCN_MEM_SHARED +// CHECK-NEXT: IMAGE_SCN_MEM_WRITE +// CHECK-NEXT: ] +// CHECK: } +// CHECK: Section { +// CHECK: Name: s_w +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA +// CHECK-NEXT: IMAGE_SCN_MEM_READ +// CHECK-NEXT: IMAGE_SCN_MEM_WRITE +// CHECK-NEXT: ] +// CHECK: } +// CHECK: Section { +// CHECK: Name: s_x +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: IMAGE_SCN_CNT_CODE +// CHECK-NEXT: IMAGE_SCN_MEM_EXECUTE +// CHECK-NEXT: IMAGE_SCN_MEM_READ +// CHECK-NEXT: ] +// CHECK: } +// CHECK: Section { +// CHECK: Name: s_y +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: ] +// CHECK: } + +// w makes read-only to readable +.section s_rw,"rw"; .long 1 +// CHECK: Section { +// CHECK: Name: s_rw +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA +// CHECK-NEXT: IMAGE_SCN_MEM_READ +// CHECK-NEXT: IMAGE_SCN_MEM_WRITE +// CHECK-NEXT: ] +// CHECK: } + +// r cancels w +.section s_wr,"wr"; .long 1 +// CHECK: Section { +// CHECK: Name: s_wr +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA +// CHECK-NEXT: IMAGE_SCN_MEM_READ +// CHECK-NEXT: ] +// CHECK: } + +// y cancels both +.section s_rwy,"rwy"; .long 1 +// CHECK: Section { +// CHECK: Name: s_rwy +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES +// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA +// CHECK-NEXT: ] +// CHECK: } + +// CHECK: ] diff --git a/test/MC/COFF/seh-section.s b/test/MC/COFF/seh-section.s index 7f05cc3..026c0d7 100644 --- a/test/MC/COFF/seh-section.s +++ b/test/MC/COFF/seh-section.s @@ -1,7 +1,6 @@ // This test ensures that, if the section containing a function has a suffix // (e.g. .text$foo), its unwind info section also has a suffix (.xdata$foo). // RUN: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s | llvm-readobj -s -sd | FileCheck %s -// XFAIL: * // CHECK: Name: .xdata$foo // CHECK-NEXT: VirtualSize @@ -16,7 +15,6 @@ // CHECK-NEXT: IMAGE_SCN_ALIGN_4BYTES // CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA // CHECK-NEXT: IMAGE_SCN_MEM_READ -// CHECK-NEXT: IMAGE_SCN_MEM_WRITE // CHECK-NEXT: ] // CHECK-NEXT: SectionData ( // CHECK-NEXT: 0000: 01050200 05500402 |