155 lines · plain
1// RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s | llvm-readobj -u - | FileCheck %s2 3// CHECK: UnwindInformation [4 5.text6 7single_epilog_atend:8 .seh_proc stack_alloc_no_pushes9 .seh_unwindversion 210 subq $40, %rsp11 .seh_stackalloc 4012 .seh_endprologue13 callq a14 nop15 .seh_startepilogue16 addq $40, %rsp17 .seh_unwindv2start18 .seh_endepilogue19 retq20 .seh_endproc21// CHECK-LABEL: StartAddress: single_epilog_atend22// CHECK-NEXT: EndAddress: single_epilog_atend +0xF23// CHECK-NEXT: UnwindInfoAddress: .xdata24// CHECK-NEXT: UnwindInfo {25// CHECK-NEXT: Version: 226// CHECK-NEXT: Flags [ (0x0)27// CHECK-NEXT: ]28// CHECK-NEXT: PrologSize: 429// CHECK-NEXT: FrameRegister: -30// CHECK-NEXT: FrameOffset: -31// CHECK-NEXT: UnwindCodeCount: 332// CHECK-NEXT: UnwindCodes [33// CHECK-NEXT: 0x01: EPILOG atend=yes, length=0x134// CHECK-NEXT: 0x00: EPILOG padding35// CHECK-NEXT: 0x04: ALLOC_SMALL size=4036// CHECK-NEXT: ]37// CHECK-NEXT: }38 39single_epilog_notatend:40 .seh_proc stack_alloc_no_pushes41 .seh_unwindversion 242 subq $40, %rsp43 .seh_stackalloc 4044 .seh_endprologue45 callq a46 nop47 .seh_startepilogue48 addq $40, %rsp49 .seh_unwindv2start50 .seh_endepilogue51 retq52 nop53 .seh_endproc54// CHECK-LABEL: StartAddress: single_epilog_notatend55// CHECK-NEXT: EndAddress: single_epilog_notatend +0x1056// CHECK-NEXT: UnwindInfoAddress: .xdata +0xC57// CHECK-NEXT: UnwindInfo {58// CHECK-NEXT: Version: 259// CHECK-NEXT: Flags [ (0x0)60// CHECK-NEXT: ]61// CHECK-NEXT: PrologSize: 462// CHECK-NEXT: FrameRegister: -63// CHECK-NEXT: FrameOffset: -64// CHECK-NEXT: UnwindCodeCount: 365// CHECK-NEXT: UnwindCodes [66// CHECK-NEXT: 0x01: EPILOG atend=no, length=0x167// CHECK-NEXT: 0x02: EPILOG offset=0x268// CHECK-NEXT: 0x04: ALLOC_SMALL size=4069// CHECK-NEXT: ]70// CHECK-NEXT: }71 72multiple_epilogs:73 .seh_proc multiple_epilogs74 .seh_unwindversion 275 subq $40, %rsp76 .seh_stackalloc 4077 .seh_endprologue78 callq c79 testl %eax, %eax80 jle .L_ELSE_181 movl %eax, %ecx82 .seh_startepilogue83 addq $40, %rsp84 .seh_unwindv2start85 .seh_endepilogue86 jmp c87.L_ELSE_1:88 nop89 .seh_startepilogue90 addq $40, %rsp91 .seh_unwindv2start92 .seh_endepilogue93 jmp b94 .seh_endproc95// CHECK-LABEL: StartAddress: multiple_epilogs96// CHECK-NEXT: EndAddress: multiple_epilogs +0x2297// CHECK-NEXT: UnwindInfoAddress: .xdata +0x1898// CHECK-NEXT: UnwindInfo {99// CHECK-NEXT: Version: 2100// CHECK-NEXT: Flags [ (0x0)101// CHECK-NEXT: ]102// CHECK-NEXT: PrologSize: 4103// CHECK-NEXT: FrameRegister: -104// CHECK-NEXT: FrameOffset: -105// CHECK-NEXT: UnwindCodeCount: 5106// CHECK-NEXT: UnwindCodes [107// CHECK-NEXT: 0x01: EPILOG atend=no, length=0x1108// CHECK-NEXT: 0x05: EPILOG offset=0x5109// CHECK-NEXT: 0x0F: EPILOG offset=0xF110// CHECK-NEXT: 0x00: EPILOG padding111// CHECK-NEXT: 0x04: ALLOC_SMALL size=40112// CHECK-NEXT: ]113// CHECK-NEXT: }114 115mismatched_terminators:116 .seh_proc mismatched_terminators117 .seh_unwindversion 2118 subq $40, %rsp119 .seh_stackalloc 40120 .seh_endprologue121 callq b122 testl %eax, %eax123 jle .L_ELSE_1124# %bb.2:125 .seh_startepilogue126 addq $40, %rsp127 .seh_unwindv2start128 .seh_endepilogue129 jmp b130.L_ELSE_2:131 nop132 .seh_startepilogue133 addq $40, %rsp134 .seh_unwindv2start135 .seh_endepilogue136 retq137 .seh_endproc138// CHECK-LABEL: StartAddress: mismatched_terminators139// CHECK-NEXT: EndAddress: mismatched_terminators +0x1C140// CHECK-NEXT: UnwindInfoAddress: .xdata +0x28141// CHECK-NEXT: UnwindInfo {142// CHECK-NEXT: Version: 2143// CHECK-NEXT: Flags [ (0x0)144// CHECK-NEXT: ]145// CHECK-NEXT: PrologSize: 4146// CHECK-NEXT: FrameRegister: -147// CHECK-NEXT: FrameOffset: -148// CHECK-NEXT: UnwindCodeCount: 3149// CHECK-NEXT: UnwindCodes [150// CHECK-NEXT: 0x01: EPILOG atend=yes, length=0x1151// CHECK-NEXT: 0x0B: EPILOG offset=0xB152// CHECK-NEXT: 0x04: ALLOC_SMALL size=40153// CHECK-NEXT: ]154// CHECK-NEXT: }155