1// This test checks that we emit allow multiple consecutive epilogs without 2// triggering failed asserts.unwind info correctly for epilogs that: 3// RUN: llvm-mc -triple aarch64-pc-win32 -filetype=obj %s -o %t.o 4// RUN: llvm-readobj -u %t.o | FileCheck %s 5 6// CHECK-LABEL:UnwindInformation [ 7// CHECK-NEXT: RuntimeFunction { 8// CHECK-NEXT: Function: multi_epilog (0x0) 9// CHECK-NEXT: ExceptionRecord: .xdata (0x0) 10// CHECK-NEXT: ExceptionData { 11// CHECK-NEXT: FunctionLength: 20 12// CHECK-NEXT: Version: 0 13// CHECK-NEXT: ExceptionData: No 14// CHECK-NEXT: EpiloguePacked: No 15// CHECK-NEXT: EpilogueScopes: 2 16// CHECK-NEXT: ByteCodeLength: 4 17// CHECK-NEXT: Prologue [ 18// CHECK-NEXT: 0x81 ; stp x29, x30, [sp, #-16]! 19// CHECK-NEXT: 0xe4 ; end 20// CHECK-NEXT: ] 21// CHECK-NEXT: EpilogueScopes [ 22// CHECK-NEXT: EpilogueScope { 23// CHECK-NEXT: StartOffset: 2 24// CHECK-NEXT: EpilogueStartIndex: 0 25// CHECK-NEXT: Opcodes [ 26// CHECK-NEXT: 0x81 ; ldp x29, x30, [sp], #16 27// CHECK-NEXT: 0xe4 ; end 28// CHECK-NEXT: ] 29// CHECK-NEXT: } 30// CHECK-NEXT: EpilogueScope { 31// CHECK-NEXT: StartOffset: 3 32// CHECK-NEXT: EpilogueStartIndex: 0 33// CHECK-NEXT: Opcodes [ 34// CHECK-NEXT: 0x81 ; ldp x29, x30, [sp], #16 35// CHECK-NEXT: 0xe4 ; end 36// CHECK-NEXT: ] 37// CHECK-NEXT: } 38// CHECK-NEXT: ] 39// CHECK-NEXT: } 40// CHECK-NEXT: } 41// CHECK-NEXT:] 42 43 .text 44 .global multi_epilog 45 .p2align 2 46 .seh_proc multi_epilog 47multi_epilog: 48 stp x29, lr, [sp, #-16]! 49 .seh_save_fplr_x 16 50 .seh_endprologue 51 nop 52 .seh_startepilogue 53 ldp x29, lr, [sp], #16 54 .seh_save_fplr_x 16 55 .seh_endepilogue 56 .seh_startepilogue 57 ldp x29, lr, [sp], #16 58 .seh_save_fplr_x 16 59 .seh_endepilogue 60 ret 61 .seh_endfunclet 62 .seh_endproc 63