diff options
author | Kai Nacke <kai.nacke@redstar.de> | 2013-09-15 18:01:09 +0000 |
---|---|---|
committer | Kai Nacke <kai.nacke@redstar.de> | 2013-09-15 18:01:09 +0000 |
commit | c29a720b362790746ca899a0b44fa35a1b399a42 (patch) | |
tree | dc2f569d37248d1a7fdf9583205a97c1a6e880bc /test/MC/COFF/seh-align1.s | |
parent | 7185bdd88302a67618b2edf51c499d647e5ff492 (diff) | |
download | llvm-c29a720b362790746ca899a0b44fa35a1b399a42.tar.gz llvm-c29a720b362790746ca899a0b44fa35a1b399a42.tar.bz2 llvm-c29a720b362790746ca899a0b44fa35a1b399a42.tar.xz |
Fix alignment of unwind data.
For alignment purposes, the instruction array will always have an even
number of entries, with the final entry potentially unused (in which
case the array will be one longer than indicated by the count of unwind
codes field).
Reviewed by Anton Korobeynikov, Charles Davis and Nico Rieck.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190767 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC/COFF/seh-align1.s')
-rw-r--r-- | test/MC/COFF/seh-align1.s | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/test/MC/COFF/seh-align1.s b/test/MC/COFF/seh-align1.s new file mode 100644 index 0000000000..aafc6ede08 --- /dev/null +++ b/test/MC/COFF/seh-align1.s @@ -0,0 +1,65 @@ +// This test checks the alignment and padding of the unwind info. + +// RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s | llvm-readobj -s -sd -sr -u | FileCheck %s + +// CHECK: Sections [ +// CHECK: Section { +// CHECK: Name: .xdata +// CHECK: RawDataSize: 8 +// CHECK: RelocationCount: 0 +// CHECK: Characteristics [ +// CHECK-NEXT: ALIGN_4BYTES +// CHECK-NEXT: CNT_INITIALIZED_DATA +// CHECK-NEXT: MEM_READ +// CHECK-NEXT: ] +// CHECK: Relocations [ +// CHECK-NEXT: ] +// CHECK: SectionData ( +// CHECK-NEXT: 0000: 01000000 00000000 +// CHECK-NEXT: ) +// CHECK-NEXT: } +// CHECK: Section { +// CHECK: Name: .pdata +// CHECK: RawDataSize: 12 +// CHECK: RelocationCount: 3 +// CHECK: Characteristics [ +// CHECK-NEXT: IMAGE_SCN_ALIGN_4BYTES +// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA +// CHECK-NEXT: IMAGE_SCN_MEM_READ +// CHECK-NEXT: ] +// CHECK: Relocations [ +// CHECK-NEXT: [[BeginDisp:0x[A-F0-9]+]] IMAGE_REL_AMD64_ADDR32NB smallFunc +// CHECK-NEXT: [[EndDisp:0x[A-F0-9]+]] IMAGE_REL_AMD64_ADDR32NB smallFunc +// CHECK-NEXT: [[UnwindDisp:0x[A-F0-9]+]] IMAGE_REL_AMD64_ADDR32NB .xdata +// CHECK-NEXT: ] +// CHECK: SectionData ( +// CHECK-NEXT: 0000: 00000000 01000000 00000000 +// CHECK-NEXT: ) +// CHECK-NEXT: } +// CHECK: UnwindInformation [ +// CHECK-NEXT: RuntimeFunction { +// CHECK-NEXT: StartAddress: smallFunc {{(\+0x[A-F0-9]+ )?}}([[BeginDisp]]) +// CHECK-NEXT: EndAddress: smallFunc {{(\+0x[A-F0-9]+ )?}}([[EndDisp]]) +// CHECK-NEXT: UnwindInfoAddress: .xdata {{(\+0x[A-F0-9]+ )?}}([[UnwindDisp]]) +// CHECK-NEXT: UnwindInfo { +// CHECK-NEXT: Version: 1 +// CHECK-NEXT: Flags [ +// CHECK-NEXT: ] +// CHECK-NEXT: PrologSize: 0 +// CHECK-NEXT: FrameRegister: - +// CHECK-NEXT: FrameOffset: - +// CHECK-NEXT: UnwindCodeCount: 0 +// CHECK-NEXT: UnwindCodes [ +// CHECK-NEXT: ] +// CHECK-NEXT: } +// CHECK-NEXT: } +// CHECK-NEXT: ] + +// Generate the minimal unwind info. +// It contains only the version set to 1. All other bytes are 0. + .globl smallFunc + .def smallFunc; .scl 2; .type 32; .endef + .seh_proc smallFunc +smallFunc: + ret + .seh_endproc |