You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
333 lines
11 KiB
333 lines
11 KiB
4 months ago
|
## Check interpretation of the packed unwind info format.
|
||
|
|
||
|
// REQUIRES: aarch64-registered-target
|
||
|
// RUN: llvm-mc -filetype=obj -triple aarch64-windows %s -o %t.o
|
||
|
// RUN: llvm-readobj --unwind %t.o | FileCheck %s
|
||
|
|
||
|
// CHECK: UnwindInformation [
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func1
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 88
|
||
|
// CHECK-NEXT: RegF: 7
|
||
|
// CHECK-NEXT: RegI: 10
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 160
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: stp d14, d15, [sp, #128]
|
||
|
// CHECK-NEXT: stp d12, d13, [sp, #112]
|
||
|
// CHECK-NEXT: stp d10, d11, [sp, #96]
|
||
|
// CHECK-NEXT: stp d8, d9, [sp, #80]
|
||
|
// CHECK-NEXT: stp x27, x28, [sp, #64]
|
||
|
// CHECK-NEXT: stp x25, x26, [sp, #48]
|
||
|
// CHECK-NEXT: stp x23, x24, [sp, #32]
|
||
|
// CHECK-NEXT: stp x21, x22, [sp, #16]
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-144]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func2
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 48
|
||
|
// CHECK-NEXT: RegF: 2
|
||
|
// CHECK-NEXT: RegI: 3
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 48
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: str d10, [sp, #40]
|
||
|
// CHECK-NEXT: stp d8, d9, [sp, #24]
|
||
|
// CHECK-NEXT: str x21, [sp, #16]
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-48]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func3
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 40
|
||
|
// CHECK-NEXT: RegF: 3
|
||
|
// CHECK-NEXT: RegI: 1
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 48
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: stp d10, d11, [sp, #24]
|
||
|
// CHECK-NEXT: stp d8, d9, [sp, #8]
|
||
|
// CHECK-NEXT: str x19, [sp, #-48]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func4
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 24
|
||
|
// CHECK-NEXT: RegF: 1
|
||
|
// CHECK-NEXT: RegI: 0
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 48
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #32
|
||
|
// CHECK-NEXT: stp d8, d9, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func5
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 56
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 1
|
||
|
// CHECK-NEXT: HomedParameters: Yes
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 112
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #32
|
||
|
// CHECK-NEXT: stp x6, x7, [sp, #56]
|
||
|
// CHECK-NEXT: stp x4, x5, [sp, #40]
|
||
|
// CHECK-NEXT: stp x2, x3, [sp, #24]
|
||
|
// CHECK-NEXT: stp x0, x1, [sp, #8]
|
||
|
// CHECK-NEXT: str x19, [sp, #-80]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func6
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 48
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 0
|
||
|
// CHECK-NEXT: HomedParameters: Yes
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 112
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #48
|
||
|
// CHECK-NEXT: stp x6, x7, [sp, #48]
|
||
|
// CHECK-NEXT: stp x4, x5, [sp, #32]
|
||
|
// CHECK-NEXT: stp x2, x3, [sp, #16]
|
||
|
// CHECK-NEXT: stp x0, x1, [sp, #-64]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func7
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 24
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 0
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 1
|
||
|
// CHECK-NEXT: FrameSize: 32
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: str lr, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func8
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 24
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 1
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 1
|
||
|
// CHECK-NEXT: FrameSize: 32
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: stp x19, lr, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func9
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 32
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 2
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 1
|
||
|
// CHECK-NEXT: FrameSize: 32
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: str lr, [sp, #16]
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-32]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func10
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 32
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 3
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 1
|
||
|
// CHECK-NEXT: FrameSize: 48
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: stp x21, lr, [sp, #16]
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-32]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func11
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 32
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 2
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 3
|
||
|
// CHECK-NEXT: FrameSize: 48
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: mov x29, sp
|
||
|
// CHECK-NEXT: stp x29, lr, [sp, #-32]!
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func12
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 40
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 2
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 3
|
||
|
// CHECK-NEXT: FrameSize: 544
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: mov x29, sp
|
||
|
// CHECK-NEXT: stp x29, lr, [sp, #0]
|
||
|
// CHECK-NEXT: sub sp, sp, #528
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func13
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 48
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 2
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 3
|
||
|
// CHECK-NEXT: FrameSize: 4112
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: mov x29, sp
|
||
|
// CHECK-NEXT: stp x29, lr, [sp, #0]
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: sub sp, sp, #4080
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func14
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 32
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 2
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 4112
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: sub sp, sp, #4080
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func15
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 24
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 2
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 560
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #544
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func16
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 56
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 0
|
||
|
// CHECK-NEXT: HomedParameters: Yes
|
||
|
// CHECK-NEXT: CR: 1
|
||
|
// CHECK-NEXT: FrameSize: 112
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #32
|
||
|
// CHECK-NEXT: stp x6, x7, [sp, #56]
|
||
|
// CHECK-NEXT: stp x4, x5, [sp, #40]
|
||
|
// CHECK-NEXT: stp x2, x3, [sp, #24]
|
||
|
// CHECK-NEXT: stp x0, x1, [sp, #8]
|
||
|
// CHECK-NEXT: str lr, [sp, #-80]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: ]
|
||
|
|
||
|
.text
|
||
|
.globl func1
|
||
|
func1:
|
||
|
func2:
|
||
|
func3:
|
||
|
func4:
|
||
|
func5:
|
||
|
func6:
|
||
|
func7:
|
||
|
func8:
|
||
|
func9:
|
||
|
func10:
|
||
|
func11:
|
||
|
func12:
|
||
|
func13:
|
||
|
func14:
|
||
|
func15:
|
||
|
func16:
|
||
|
ret
|
||
|
|
||
|
.section .pdata,"dr"
|
||
|
.long func1@IMGREL
|
||
|
.long 0x050ae059 // FunctionLength=22 RegF=7 RegI=10 H=0 CR=0 FrameSize=10
|
||
|
.long func2@IMGREL
|
||
|
.long 0x01834031 // FunctionLength=12 RegF=2 RegI=3 H=0 CR=0 FrameSize=3
|
||
|
.long func3@IMGREL
|
||
|
.long 0x01816029 // FunctionLength=10 RegF=3 RegI=1 H=0 CR=0 FrameSize=3
|
||
|
.long func4@IMGREL
|
||
|
.long 0x01802019 // FunctionLength=6 RegF=1 RegI=0 H=0 CR=0 FrameSize=3
|
||
|
.long func5@IMGREL
|
||
|
.long 0x03910039 // FunctionLength=14 RegF=0 RegI=1 H=1 CR=0 FrameSize=7
|
||
|
.long func6@IMGREL
|
||
|
.long 0x03900031 // FunctionLength=12 RegF=0 RegI=0 H=1 CR=0 FrameSize=7
|
||
|
.long func7@IMGREL
|
||
|
.long 0x01200019 // FunctionLength=6 RegF=0 RegI=0 H=0 CR=1 FrameSize=2
|
||
|
.long func8@IMGREL
|
||
|
.long 0x01210019 // FunctionLength=6 RegF=0 RegI=1 H=0 CR=1 FrameSize=2
|
||
|
.long func9@IMGREL
|
||
|
.long 0x01220021 // FunctionLength=8 RegF=0 RegI=2 H=0 CR=1 FrameSize=2
|
||
|
.long func10@IMGREL
|
||
|
.long 0x01a30021 // FunctionLength=8 RegF=0 RegI=3 H=0 CR=1 FrameSize=3
|
||
|
.long func11@IMGREL
|
||
|
.long 0x01e20021 // FunctionLength=8 RegF=0 RegI=2 H=0 CR=3 FrameSize=3
|
||
|
.long func12@IMGREL
|
||
|
.long 0x11620029 // FunctionLength=10 RegF=0 RegI=2 H=0 CR=3 FrameSize=34
|
||
|
.long func13@IMGREL
|
||
|
.long 0x80e20031 // FunctionLength=12 RegF=0 RegI=2 H=0 CR=3 FrameSize=257
|
||
|
.long func14@IMGREL
|
||
|
.long 0x80820021 // FunctionLength=8 RegF=0 RegI=2 H=0 CR=0 FrameSize=257
|
||
|
.long func15@IMGREL
|
||
|
.long 0x11820019 // FunctionLength=6 RegF=0 RegI=2 H=0 CR=0 FrameSize=34
|
||
|
.long func16@IMGREL
|
||
|
.long 0x03b00039 // FunctionLength=14 RegF=0 RegI=0 H=1 CR=1 FrameSize=7
|