333 lines · plain
1## Check interpretation of the packed unwind info format.2 3// REQUIRES: aarch64-registered-target4// RUN: llvm-mc -filetype=obj -triple aarch64-windows %s -o %t.o5// RUN: llvm-readobj --unwind %t.o | FileCheck %s6 7// CHECK: UnwindInformation [8// CHECK-NEXT: RuntimeFunction {9// CHECK-NEXT: Function: func110// CHECK-NEXT: Fragment: No11// CHECK-NEXT: FunctionLength: 8812// CHECK-NEXT: RegF: 713// CHECK-NEXT: RegI: 1014// CHECK-NEXT: HomedParameters: No15// CHECK-NEXT: CR: 016// CHECK-NEXT: FrameSize: 16017// CHECK-NEXT: Prologue [18// CHECK-NEXT: sub sp, sp, #1619// CHECK-NEXT: stp d14, d15, [sp, #128]20// CHECK-NEXT: stp d12, d13, [sp, #112]21// CHECK-NEXT: stp d10, d11, [sp, #96]22// CHECK-NEXT: stp d8, d9, [sp, #80]23// CHECK-NEXT: stp x27, x28, [sp, #64]24// CHECK-NEXT: stp x25, x26, [sp, #48]25// CHECK-NEXT: stp x23, x24, [sp, #32]26// CHECK-NEXT: stp x21, x22, [sp, #16]27// CHECK-NEXT: stp x19, x20, [sp, #-144]!28// CHECK-NEXT: end29// CHECK-NEXT: ]30// CHECK-NEXT: }31// CHECK-NEXT: RuntimeFunction {32// CHECK-NEXT: Function: func233// CHECK-NEXT: Fragment: No34// CHECK-NEXT: FunctionLength: 4835// CHECK-NEXT: RegF: 236// CHECK-NEXT: RegI: 337// CHECK-NEXT: HomedParameters: No38// CHECK-NEXT: CR: 039// CHECK-NEXT: FrameSize: 4840// CHECK-NEXT: Prologue [41// CHECK-NEXT: str d10, [sp, #40]42// CHECK-NEXT: stp d8, d9, [sp, #24]43// CHECK-NEXT: str x21, [sp, #16]44// CHECK-NEXT: stp x19, x20, [sp, #-48]!45// CHECK-NEXT: end46// CHECK-NEXT: ]47// CHECK-NEXT: }48// CHECK-NEXT: RuntimeFunction {49// CHECK-NEXT: Function: func350// CHECK-NEXT: Fragment: No51// CHECK-NEXT: FunctionLength: 4052// CHECK-NEXT: RegF: 353// CHECK-NEXT: RegI: 154// CHECK-NEXT: HomedParameters: No55// CHECK-NEXT: CR: 056// CHECK-NEXT: FrameSize: 4857// CHECK-NEXT: Prologue [58// CHECK-NEXT: stp d10, d11, [sp, #24]59// CHECK-NEXT: stp d8, d9, [sp, #8]60// CHECK-NEXT: str x19, [sp, #-48]!61// CHECK-NEXT: end62// CHECK-NEXT: ]63// CHECK-NEXT: }64// CHECK-NEXT: RuntimeFunction {65// CHECK-NEXT: Function: func466// CHECK-NEXT: Fragment: No67// CHECK-NEXT: FunctionLength: 2468// CHECK-NEXT: RegF: 169// CHECK-NEXT: RegI: 070// CHECK-NEXT: HomedParameters: No71// CHECK-NEXT: CR: 072// CHECK-NEXT: FrameSize: 4873// CHECK-NEXT: Prologue [74// CHECK-NEXT: sub sp, sp, #3275// CHECK-NEXT: stp d8, d9, [sp, #-16]!76// CHECK-NEXT: end77// CHECK-NEXT: ]78// CHECK-NEXT: }79// CHECK-NEXT: RuntimeFunction {80// CHECK-NEXT: Function: func581// CHECK-NEXT: Fragment: No82// CHECK-NEXT: FunctionLength: 5683// CHECK-NEXT: RegF: 084// CHECK-NEXT: RegI: 185// CHECK-NEXT: HomedParameters: Yes86// CHECK-NEXT: CR: 087// CHECK-NEXT: FrameSize: 11288// CHECK-NEXT: Prologue [89// CHECK-NEXT: sub sp, sp, #3290// CHECK-NEXT: stp x6, x7, [sp, #64]91// CHECK-NEXT: stp x4, x5, [sp, #48]92// CHECK-NEXT: stp x2, x3, [sp, #32]93// CHECK-NEXT: stp x0, x1, [sp, #16]94// CHECK-NEXT: str x19, [sp, #-80]!95// CHECK-NEXT: end96// CHECK-NEXT: ]97// CHECK-NEXT: }98// CHECK-NEXT: RuntimeFunction {99// CHECK-NEXT: Function: func6100// CHECK-NEXT: Fragment: No101// CHECK-NEXT: FunctionLength: 48102// CHECK-NEXT: RegF: 0103// CHECK-NEXT: RegI: 0104// CHECK-NEXT: HomedParameters: Yes105// CHECK-NEXT: CR: 0106// CHECK-NEXT: FrameSize: 112107// CHECK-NEXT: Prologue [108// CHECK-NEXT: sub sp, sp, #48109// CHECK-NEXT: stp x6, x7, [sp, #48]110// CHECK-NEXT: stp x4, x5, [sp, #32]111// CHECK-NEXT: stp x2, x3, [sp, #16]112// CHECK-NEXT: stp x0, x1, [sp, #-64]!113// CHECK-NEXT: end114// CHECK-NEXT: ]115// CHECK-NEXT: }116// CHECK-NEXT: RuntimeFunction {117// CHECK-NEXT: Function: func7118// CHECK-NEXT: Fragment: No119// CHECK-NEXT: FunctionLength: 24120// CHECK-NEXT: RegF: 0121// CHECK-NEXT: RegI: 0122// CHECK-NEXT: HomedParameters: No123// CHECK-NEXT: CR: 1124// CHECK-NEXT: FrameSize: 32125// CHECK-NEXT: Prologue [126// CHECK-NEXT: sub sp, sp, #16127// CHECK-NEXT: str lr, [sp, #-16]!128// CHECK-NEXT: end129// CHECK-NEXT: ]130// CHECK-NEXT: }131// CHECK-NEXT: RuntimeFunction {132// CHECK-NEXT: Function: func8133// CHECK-NEXT: Fragment: No134// CHECK-NEXT: FunctionLength: 24135// CHECK-NEXT: RegF: 0136// CHECK-NEXT: RegI: 1137// CHECK-NEXT: HomedParameters: No138// CHECK-NEXT: CR: 1139// CHECK-NEXT: FrameSize: 32140// CHECK-NEXT: Prologue [141// CHECK-NEXT: sub sp, sp, #16142// CHECK-NEXT: INVALID!143// CHECK-NEXT: end144// CHECK-NEXT: ]145// CHECK-NEXT: }146// CHECK-NEXT: RuntimeFunction {147// CHECK-NEXT: Function: func9148// CHECK-NEXT: Fragment: No149// CHECK-NEXT: FunctionLength: 32150// CHECK-NEXT: RegF: 0151// CHECK-NEXT: RegI: 2152// CHECK-NEXT: HomedParameters: No153// CHECK-NEXT: CR: 1154// CHECK-NEXT: FrameSize: 32155// CHECK-NEXT: Prologue [156// CHECK-NEXT: str lr, [sp, #16]157// CHECK-NEXT: stp x19, x20, [sp, #-32]!158// CHECK-NEXT: end159// CHECK-NEXT: ]160// CHECK-NEXT: }161// CHECK-NEXT: RuntimeFunction {162// CHECK-NEXT: Function: func10163// CHECK-NEXT: Fragment: No164// CHECK-NEXT: FunctionLength: 32165// CHECK-NEXT: RegF: 0166// CHECK-NEXT: RegI: 3167// CHECK-NEXT: HomedParameters: No168// CHECK-NEXT: CR: 1169// CHECK-NEXT: FrameSize: 48170// CHECK-NEXT: Prologue [171// CHECK-NEXT: sub sp, sp, #16172// CHECK-NEXT: stp x21, lr, [sp, #16]173// CHECK-NEXT: stp x19, x20, [sp, #-32]!174// CHECK-NEXT: end175// CHECK-NEXT: ]176// CHECK-NEXT: }177// CHECK-NEXT: RuntimeFunction {178// CHECK-NEXT: Function: func11179// CHECK-NEXT: Fragment: No180// CHECK-NEXT: FunctionLength: 32181// CHECK-NEXT: RegF: 0182// CHECK-NEXT: RegI: 2183// CHECK-NEXT: HomedParameters: No184// CHECK-NEXT: CR: 3185// CHECK-NEXT: FrameSize: 48186// CHECK-NEXT: Prologue [187// CHECK-NEXT: mov x29, sp188// CHECK-NEXT: stp x29, lr, [sp, #-32]!189// CHECK-NEXT: stp x19, x20, [sp, #-16]!190// CHECK-NEXT: end191// CHECK-NEXT: ]192// CHECK-NEXT: }193// CHECK-NEXT: RuntimeFunction {194// CHECK-NEXT: Function: func12195// CHECK-NEXT: Fragment: No196// CHECK-NEXT: FunctionLength: 40197// CHECK-NEXT: RegF: 0198// CHECK-NEXT: RegI: 2199// CHECK-NEXT: HomedParameters: No200// CHECK-NEXT: CR: 3201// CHECK-NEXT: FrameSize: 544202// CHECK-NEXT: Prologue [203// CHECK-NEXT: mov x29, sp204// CHECK-NEXT: stp x29, lr, [sp, #0]205// CHECK-NEXT: sub sp, sp, #528206// CHECK-NEXT: stp x19, x20, [sp, #-16]!207// CHECK-NEXT: end208// CHECK-NEXT: ]209// CHECK-NEXT: }210// CHECK-NEXT: RuntimeFunction {211// CHECK-NEXT: Function: func13212// CHECK-NEXT: Fragment: No213// CHECK-NEXT: FunctionLength: 48214// CHECK-NEXT: RegF: 0215// CHECK-NEXT: RegI: 2216// CHECK-NEXT: HomedParameters: No217// CHECK-NEXT: CR: 3218// CHECK-NEXT: FrameSize: 4112219// CHECK-NEXT: Prologue [220// CHECK-NEXT: mov x29, sp221// CHECK-NEXT: stp x29, lr, [sp, #0]222// CHECK-NEXT: sub sp, sp, #16223// CHECK-NEXT: sub sp, sp, #4080224// CHECK-NEXT: stp x19, x20, [sp, #-16]!225// CHECK-NEXT: end226// CHECK-NEXT: ]227// CHECK-NEXT: }228// CHECK-NEXT: RuntimeFunction {229// CHECK-NEXT: Function: func14230// CHECK-NEXT: Fragment: No231// CHECK-NEXT: FunctionLength: 32232// CHECK-NEXT: RegF: 0233// CHECK-NEXT: RegI: 2234// CHECK-NEXT: HomedParameters: No235// CHECK-NEXT: CR: 0236// CHECK-NEXT: FrameSize: 4112237// CHECK-NEXT: Prologue [238// CHECK-NEXT: sub sp, sp, #16239// CHECK-NEXT: sub sp, sp, #4080240// CHECK-NEXT: stp x19, x20, [sp, #-16]!241// CHECK-NEXT: end242// CHECK-NEXT: ]243// CHECK-NEXT: }244// CHECK-NEXT: RuntimeFunction {245// CHECK-NEXT: Function: func15246// CHECK-NEXT: Fragment: No247// CHECK-NEXT: FunctionLength: 24248// CHECK-NEXT: RegF: 0249// CHECK-NEXT: RegI: 2250// CHECK-NEXT: HomedParameters: No251// CHECK-NEXT: CR: 0252// CHECK-NEXT: FrameSize: 560253// CHECK-NEXT: Prologue [254// CHECK-NEXT: sub sp, sp, #544255// CHECK-NEXT: stp x19, x20, [sp, #-16]!256// CHECK-NEXT: end257// CHECK-NEXT: ]258// CHECK-NEXT: }259// CHECK-NEXT: RuntimeFunction {260// CHECK-NEXT: Function: func16261// CHECK-NEXT: Fragment: No262// CHECK-NEXT: FunctionLength: 56263// CHECK-NEXT: RegF: 0264// CHECK-NEXT: RegI: 0265// CHECK-NEXT: HomedParameters: Yes266// CHECK-NEXT: CR: 1267// CHECK-NEXT: FrameSize: 112268// CHECK-NEXT: Prologue [269// CHECK-NEXT: sub sp, sp, #32270// CHECK-NEXT: stp x6, x7, [sp, #64]271// CHECK-NEXT: stp x4, x5, [sp, #48]272// CHECK-NEXT: stp x2, x3, [sp, #32]273// CHECK-NEXT: stp x0, x1, [sp, #16]274// CHECK-NEXT: str lr, [sp, #-80]!275// CHECK-NEXT: end276// CHECK-NEXT: ]277// CHECK-NEXT: }278// CHECK-NEXT: ]279 280 .text281 .globl func1282func1:283func2:284func3:285func4:286func5:287func6:288func7:289func8:290func9:291func10:292func11:293func12:294func13:295func14:296func15:297func16:298 ret299 300 .section .pdata,"dr"301 .long func1@IMGREL302 .long 0x050ae059 // FunctionLength=22 RegF=7 RegI=10 H=0 CR=0 FrameSize=10303 .long func2@IMGREL304 .long 0x01834031 // FunctionLength=12 RegF=2 RegI=3 H=0 CR=0 FrameSize=3305 .long func3@IMGREL306 .long 0x01816029 // FunctionLength=10 RegF=3 RegI=1 H=0 CR=0 FrameSize=3307 .long func4@IMGREL308 .long 0x01802019 // FunctionLength=6 RegF=1 RegI=0 H=0 CR=0 FrameSize=3309 .long func5@IMGREL310 .long 0x03910039 // FunctionLength=14 RegF=0 RegI=1 H=1 CR=0 FrameSize=7311 .long func6@IMGREL312 .long 0x03900031 // FunctionLength=12 RegF=0 RegI=0 H=1 CR=0 FrameSize=7313 .long func7@IMGREL314 .long 0x01200019 // FunctionLength=6 RegF=0 RegI=0 H=0 CR=1 FrameSize=2315 .long func8@IMGREL316 .long 0x01210019 // FunctionLength=6 RegF=0 RegI=1 H=0 CR=1 FrameSize=2317 .long func9@IMGREL318 .long 0x01220021 // FunctionLength=8 RegF=0 RegI=2 H=0 CR=1 FrameSize=2319 .long func10@IMGREL320 .long 0x01a30021 // FunctionLength=8 RegF=0 RegI=3 H=0 CR=1 FrameSize=3321 .long func11@IMGREL322 .long 0x01e20021 // FunctionLength=8 RegF=0 RegI=2 H=0 CR=3 FrameSize=3323 .long func12@IMGREL324 .long 0x11620029 // FunctionLength=10 RegF=0 RegI=2 H=0 CR=3 FrameSize=34325 .long func13@IMGREL326 .long 0x80e20031 // FunctionLength=12 RegF=0 RegI=2 H=0 CR=3 FrameSize=257327 .long func14@IMGREL328 .long 0x80820021 // FunctionLength=8 RegF=0 RegI=2 H=0 CR=0 FrameSize=257329 .long func15@IMGREL330 .long 0x11820019 // FunctionLength=6 RegF=0 RegI=2 H=0 CR=0 FrameSize=34331 .long func16@IMGREL332 .long 0x03b00039 // FunctionLength=14 RegF=0 RegI=0 H=1 CR=1 FrameSize=7333