1c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// This test checks the alignment and padding of the unwind info. 2c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke 3c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s | llvm-readobj -s -sd -sr -u | FileCheck %s 4c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke 5c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Sections [ 6c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Section { 7c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Name: .xdata 8c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: RawDataSize: 16 9c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: RelocationCount: 1 10c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Characteristics [ 11c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ALIGN_4BYTES 12c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: CNT_INITIALIZED_DATA 13c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: MEM_READ 14c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 15c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Relocations [ 16c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: [[HandlerDisp:0x[A-F0-9]+]] IMAGE_REL_AMD64_ADDR32NB __C_specific_handler 17c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 18c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: SectionData ( 19c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: 0000: 19000200 04D002C0 00000000 BEBAFECA 20c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ) 21c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: } 22c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: Section { 23c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Name: .pdata 24c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: RawDataSize: 12 25c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: RelocationCount: 3 26c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Characteristics [ 27c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: IMAGE_SCN_ALIGN_4BYTES 28c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA 29c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: IMAGE_SCN_MEM_READ 30c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 31c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Relocations [ 32c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: [[BeginDisp:0x[A-F0-9]+]] IMAGE_REL_AMD64_ADDR32NB func 33c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: [[EndDisp:0x[A-F0-9]+]] IMAGE_REL_AMD64_ADDR32NB func 34c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: [[UnwindDisp:0x[A-F0-9]+]] IMAGE_REL_AMD64_ADDR32NB .xdata 35c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 36c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: SectionData ( 37c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: 0000: FCFFFFFF 05000000 00000000 38c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ) 39c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: } 40c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 41c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: UnwindInformation [ 42c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: RuntimeFunction { 43c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: StartAddress: func {{(\+0x[A-F0-9]+ )?}}([[BeginDisp]]) 44c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: EndAddress: func {{(\+0x[A-F0-9]+ )?}}([[EndDisp]]) 45c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: UnwindInfoAddress: .xdata {{(\+0x[A-F0-9]+ )?}}([[UnwindDisp]]) 46c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: UnwindInfo { 47c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: Version: 1 48c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: Flags [ 49c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ExceptionHandler 50c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: TerminateHandler 51c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 52c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: PrologSize: 0 53c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: FrameRegister: - 54c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: FrameOffset: - 55c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: UnwindCodeCount: 2 56c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: UnwindCodes [ 57c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: 0x04: PUSH_NONVOL reg=R13 58c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: 0x02: PUSH_NONVOL reg=R12 59c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 60c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: Handler: __C_specific_handler ([[HandlerDisp]]) 61c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: } 62c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: } 63c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 64c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke 65c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// Generates two unwind codes. 66c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// Requires no padding of the unwind code array. 67c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .globl func 68c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .def func; .scl 2; .type 32; .endef 69c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .seh_proc func 70c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke push %r12 71c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .seh_pushreg 12 72c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke push %r13 73c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .seh_pushreg 13 74c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .seh_handler __C_specific_handler, @except, @unwind 75c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .seh_handlerdata 76c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .long 0xcafebabe 77c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .text 78c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .seh_endprologue 79c29a720b362790746ca899a0b44fa35a1b399a42Kai Nackefunc: 80c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke pop %r13 81c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke pop %r12 82c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke ret 83c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .seh_endproc 84