240 lines · plain
1// REQUIRES: arm-registered-target2// RUN: llvm-mc -filetype=obj -triple thumbv7-windows-gnu %s -o %t.o3// RUN: llvm-readobj --unwind %t.o | FileCheck --strict-whitespace %s4 5// CHECK: RuntimeFunction {6// CHECK-NEXT: Function: func07// CHECK: Prologue [8// CHECK-NEXT: 0xcb ; mov r11, sp9// CHECK-NEXT: 0x95 0x00 ; push.w {r8, r10, r12}10// CHECK-NEXT: 0xf6 0x13 ; vpush {d17-d19}11// CHECK-NEXT: 0xfc ; nop.w12// CHECK-NEXT: 0xf5 0x35 ; vpush {d3-d5}13// CHECK-NEXT: 0xfb ; nop14// CHECK-NEXT: 0xe2 ; vpush {d8-d10}15// CHECK-NEXT: 0x08 ; sub sp, #(8 * 4)16// CHECK-NEXT: 0xd6 ; push {r4-r6, lr}17// CHECK-NEXT: ]18// CHECK-NEXT: EpilogueScopes [19// CHECK-NEXT: EpilogueScope {20// CHECK-NEXT: StartOffset: 1521// CHECK-NEXT: Condition: 1422// CHECK-NEXT: EpilogueStartIndex: 1323// CHECK-NEXT: Opcodes [24// CHECK-NEXT: 0xe2 ; vpop {d8-d10}25// CHECK-NEXT: 0xcb ; mov sp, r1126// CHECK-NEXT: 0x08 ; add sp, #(8 * 4)27// CHECK-NEXT: 0xd6 ; pop {r4-r6, pc}28// CHECK-NEXT: ]29// CHECK-NEXT: }30// CHECK-NEXT: ]31// CHECK: RuntimeFunction {32// CHECK-NEXT: Function: func133// CHECK: Prologue [34// CHECK-NEXT: 0xef 0x08 ; str.w lr, [sp, #-32]!35// CHECK-NEXT: 0xd1 ; push {r4-r5}36// CHECK-NEXT: 0xfd ; bx <reg>37// CHECK-NEXT: ]38// CHECK-NEXT: EpilogueScopes [39// CHECK-NEXT: EpilogueScope {40// CHECK-NEXT: StartOffset: 441// CHECK-NEXT: Condition: 1442// CHECK-NEXT: EpilogueStartIndex: 443// CHECK-NEXT: Opcodes [44// CHECK-NEXT: 0xef 0x08 ; ldr.w lr, [sp], #3245// CHECK-NEXT: 0xd1 ; pop {r4-r5}46// CHECK-NEXT: 0xfd ; bx <reg>47// CHECK-NEXT: ]48// CHECK-NEXT: }49// CHECK-NEXT: ]50// CHECK: RuntimeFunction {51// CHECK-NEXT: Function: func252// CHECK-NEXT: ExceptionRecord:53// CHECK-NEXT: ExceptionData {54// CHECK-NEXT: FunctionLength:55// CHECK-NEXT: Version:56// CHECK-NEXT: ExceptionData: No57// CHECK-NEXT: EpiloguePacked: Yes58// CHECK-NEXT: Fragment: No59// CHECK-NEXT: EpilogueOffset: 060// CHECK-NEXT: ByteCodeLength:61// CHECK-NEXT: Prologue [62// CHECK-NEXT: 0x04 ; sub sp, #(4 * 4)63// CHECK-NEXT: 0xec 0x80 ; push {r7}64// CHECK-NEXT: 0xc7 ; mov r7, sp65// CHECK-NEXT: 0xfe ; b.w <target>66// CHECK-NEXT: ]67// CHECK-NEXT: }68// CHECK-NEXT: }69// CHECK-NEXT: RuntimeFunction {70// CHECK-NEXT: Function: func371// CHECK-NEXT: ExceptionRecord:72// CHECK-NEXT: ExceptionData {73// CHECK-NEXT: FunctionLength:74// CHECK-NEXT: Version:75// CHECK-NEXT: ExceptionData: No76// CHECK-NEXT: EpiloguePacked: Yes77// CHECK-NEXT: Fragment: Yes78// CHECK-NEXT: EpilogueOffset: 179// CHECK-NEXT: ByteCodeLength:80// CHECK-NEXT: Prologue [81// CHECK-NEXT: 0x04 ; sub sp, #(4 * 4)82// CHECK-NEXT: 0xdf ; push.w {r4-r11, lr}83// CHECK-NEXT: ]84// CHECK-NEXT: Epilogue [85// CHECK-NEXT: 0xdf ; pop.w {r4-r11, pc}86// CHECK-NEXT: ]87// CHECK-NEXT: }88// CHECK-NEXT: }89// CHECK-NEXT: RuntimeFunction {90// CHECK-NEXT: Function: func491// CHECK-NEXT: ExceptionRecord:92// CHECK-NEXT: ExceptionData {93// CHECK-NEXT: FunctionLength:94// CHECK-NEXT: Version:95// CHECK-NEXT: ExceptionData: No96// CHECK-NEXT: EpiloguePacked: Yes97// CHECK-NEXT: Fragment: No98// CHECK-NEXT: EpilogueOffset: 099// CHECK-NEXT: ByteCodeLength:100// CHECK-NEXT: Prologue [101// CHECK-NEXT: 0xec 0x50 ; push {r4, r6}102// CHECK-NEXT: 0xb5 0x00 ; push.w {r8, r10, r12, lr}103// CHECK-NEXT: ]104// CHECK-NEXT: }105// CHECK-NEXT: }106// CHECK-NEXT: RuntimeFunction {107// CHECK-NEXT: Function: func5108// CHECK-NEXT: ExceptionRecord:109// CHECK-NEXT: ExceptionData {110// CHECK-NEXT: FunctionLength:111// CHECK-NEXT: Version:112// CHECK-NEXT: ExceptionData: No113// CHECK-NEXT: EpiloguePacked: Yes114// CHECK-NEXT: Fragment: No115// CHECK-NEXT: EpilogueOffset: 16116// CHECK-NEXT: ByteCodeLength:117// CHECK-NEXT: Prologue [118// CHECK-NEXT: 0xfa 0x00 0x00 0x20 ; sub.w sp, sp, #(32 * 4)119// CHECK-NEXT: 0xf9 0x00 0x10 ; sub.w sp, sp, #(16 * 4)120// CHECK-NEXT: 0xf8 0x00 0x00 0x08 ; sub sp, sp, #(8 * 4)121// CHECK-NEXT: 0xf7 0x00 0x04 ; sub sp, sp, #(4 * 4)122// CHECK-NEXT: 0xe8 0x02 ; sub.w sp, #(2 * 4)123// CHECK-NEXT: 0xed 0x50 ; push {r4, r6, lr}124// CHECK-NEXT: ]125// CHECK-NEXT: Epilogue [126// CHECK-NEXT: 0xed 0x50 ; pop {r4, r6, pc}127// CHECK-NEXT: ]128// CHECK-NEXT: }129// CHECK-NEXT: }130 131 .thumb132 .syntax unified133func0:134 push {r4-r6, lr}135 sub sp, sp, #32136 vpush {d8-d10}137 nop138 vpush {d3-d5}139 nop.w140 vpush {d17-d19}141 push {r8, r10, r12}142 mov r11, sp143 nop144 vpop {d8-d10}145 mov sp, r11146 add sp, sp, #32147 pop {r4-r6, pc}148 149func1:150 push {r4-r5}151 str lr, [sp, #-32]!152 nop153 ldr lr, [sp], #32154 pop {r4-r5}155 bx lr156 157func2:158 mov r7, sp159 push {r7}160 sub sp, sp, #16161 nop162 add sp, sp, #16163 pop {r7}164 mov sp, r7165 b tailcall166 167func3:168 nop.w169 nop170 nop171 add sp, sp, #16172 pop {r4-r11, pc}173 174func4:175 push {r8, r10, r12, lr}176 push {r4, r6}177 nop178 pop {r4, r6}179 pop {r8, r10, r12, pc}180 181func5:182 push {r4, r6, lr}183 subw sp, sp, #8184 sub sp, sp, #16185 sub sp, sp, #32186 subw sp, sp, #64187 subw sp, sp, #128188 nop189 pop {r4, r6, pc}190 191 .section .pdata,"dr"192 .rva func0193 .rva .Lunwind_func0194 .rva func1195 .rva .Lunwind_func1196 .rva func2197 .rva .Lunwind_func2198 .rva func3199 .rva .Lunwind_func3200 .rva func4201 .rva .Lunwind_func4202 .rva func5203 .rva .Lunwind_func5204 205 .section .xdata,"dr"206.Lunwind_func0:207.byte 0x14, 0x00, 0x80, 0x50208.byte 0x0f, 0x00, 0xe0, 0x0d209.byte 0xcb, 0x95, 0x00, 0xf6210.byte 0x13, 0xfc, 0xf5, 0x35211.byte 0xfb, 0xe2, 0x08, 0xd6212.byte 0xff, 0xe2, 0xcb, 0x08213.byte 0xd6, 0xff, 0x00, 0x00214 215.Lunwind_func1:216.byte 0x08, 0x00, 0x00, 0x00217.byte 0x01, 0x00, 0x02, 0x00218.byte 0x04, 0x00, 0xe0, 0x04219.byte 0xef, 0x08, 0xd1, 0xfd220.byte 0xef, 0x08, 0xd1, 0xfd221 222.Lunwind_func2:223.byte 0x09, 0x00, 0x20, 0x20224.byte 0x04, 0xec, 0x80, 0xc7225.byte 0xfe, 0x00, 0x00, 0x00226.Lunwind_func3:227.byte 0x07, 0x00, 0xe0, 0x10228.byte 0x04, 0xdf, 0xff, 0x00229.Lunwind_func4:230.byte 0x07, 0x00, 0x20, 0x20231.byte 0xec, 0x50, 0xb5, 0x00232.byte 0xff, 0x00, 0x00, 0x00233.Lunwind_func5:234.byte 0x0b, 0x00, 0x20, 0x58235.byte 0xfa, 0x00, 0x00, 0x20236.byte 0xf9, 0x00, 0x10, 0xf8237.byte 0x00, 0x00, 0x08, 0xf7238.byte 0x00, 0x04, 0xe8, 0x02239.byte 0xed, 0x50, 0xff, 0x00240