llvm-mirror/test/MC/COFF/seh-align2.s
Kai Nacke 9c30babbf2 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.

llvm-svn: 190767
2013-09-15 18:01:09 +00:00

79 lines
2.7 KiB
ArmAsm

// 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: 16
// CHECK: RelocationCount: 1
// CHECK: Characteristics [
// CHECK-NEXT: ALIGN_4BYTES
// CHECK-NEXT: CNT_INITIALIZED_DATA
// CHECK-NEXT: MEM_READ
// CHECK-NEXT: ]
// CHECK: Relocations [
// CHECK-NEXT: [[HandlerDisp:0x[A-F0-9]+]] IMAGE_REL_AMD64_ADDR32NB __C_specific_handler
// CHECK-NEXT: ]
// CHECK: SectionData (
// CHECK-NEXT: 0000: 09000100 04220000 00000000 BEBAFECA
// CHECK-NEXT: )
// CHECK-NEXT: }
// CHECK-NEXT: 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 func
// CHECK-NEXT: [[EndDisp:0x[A-F0-9]+]] IMAGE_REL_AMD64_ADDR32NB func
// CHECK-NEXT: [[UnwindDisp:0x[A-F0-9]+]] IMAGE_REL_AMD64_ADDR32NB .xdata
// CHECK-NEXT: ]
// CHECK: SectionData (
// CHECK-NEXT: 0000: FCFFFFFF 05000000 00000000
// CHECK-NEXT: )
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK: UnwindInformation [
// CHECK-NEXT: RuntimeFunction {
// CHECK-NEXT: StartAddress: func {{(\+0x[A-F0-9]+ )?}}([[BeginDisp]])
// CHECK-NEXT: EndAddress: func {{(\+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: ExceptionHandler
// CHECK-NEXT: ]
// CHECK-NEXT: PrologSize: 0
// CHECK-NEXT: FrameRegister: -
// CHECK-NEXT: FrameOffset: -
// CHECK-NEXT: UnwindCodeCount: 1
// CHECK-NEXT: UnwindCodes [
// CHECK-NEXT: 0x04: ALLOC_SMALL size=24
// CHECK-NEXT: ]
// CHECK-NEXT: Handler: __C_specific_handler ([[HandlerDisp]])
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK-NEXT: ]
// Generates only one unwind code.
// Requires padding of the unwind code array.
.globl func
.def func; .scl 2; .type 32; .endef
.seh_proc func
subq $24, %rsp
.seh_stackalloc 24
.seh_handler __C_specific_handler, @except
.seh_handlerdata
.long 0xcafebabe
.text
.seh_endprologue
func:
addq $24, %rsp
ret
.seh_endproc