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