Skip to content

Commit dd6d4fd

Browse files
mstorsjokcloudy0717
authored andcommitted
[AArch64] [test] Move tests for custom unwind opcodes to a separate function
These custom opcodes disable the checker for having the prologue length actually match the opcodes (see checkARM64Instructions in MCWin64EH.cpp) - which led to the prologue mismatching the opcodes by one instruction, since 312d6b4. Move the special opcodes to a separate test function. Remove the mismatched nop instruction at the end of the main function, as this prologue now is assembled with the strict length checking enabled.
1 parent 5e2ef11 commit dd6d4fd

File tree

1 file changed

+41
-22
lines changed
  • llvm/test/MC/AArch64

1 file changed

+41
-22
lines changed

llvm/test/MC/AArch64/seh.s

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
// CHECK-NEXT: }
2222
// CHECK: Section {
2323
// CHECK: Name: .xdata
24-
// CHECK: RawDataSize: 100
24+
// CHECK: RawDataSize: 108
2525
// CHECK: RelocationCount: 1
2626
// CHECK: Characteristics [
2727
// CHECK-NEXT: ALIGN_4BYTES
@@ -31,7 +31,7 @@
3131
// CHECK-NEXT: }
3232
// CHECK: Section {
3333
// CHECK: Name: .pdata
34-
// CHECK: RelocationCount: 2
34+
// CHECK: RelocationCount: 4
3535
// CHECK: Characteristics [
3636
// CHECK-NEXT: ALIGN_4BYTES
3737
// CHECK-NEXT: CNT_INITIALIZED_DATA
@@ -42,11 +42,13 @@
4242

4343
// CHECK-NEXT: Relocations [
4444
// CHECK-NEXT: Section (4) .xdata {
45-
// CHECK-NEXT: 0x58 IMAGE_REL_ARM64_ADDR32NB __C_specific_handler
45+
// CHECK-NEXT: 0x54 IMAGE_REL_ARM64_ADDR32NB __C_specific_handler
4646
// CHECK-NEXT: }
4747
// CHECK-NEXT: Section (5) .pdata {
4848
// CHECK-NEXT: 0x0 IMAGE_REL_ARM64_ADDR32NB .text
4949
// CHECK-NEXT: 0x4 IMAGE_REL_ARM64_ADDR32NB .xdata
50+
// CHECK-NEXT: 0x8 IMAGE_REL_ARM64_ADDR32NB .text
51+
// CHECK-NEXT: 0xC IMAGE_REL_ARM64_ADDR32NB .xdata
5052
// CHECK-NEXT: }
5153
// CHECK-NEXT: ]
5254

@@ -55,7 +57,7 @@
5557
// CHECK-NEXT: Function: func
5658
// CHECK-NEXT: ExceptionRecord: .xdata
5759
// CHECK-NEXT: ExceptionData {
58-
// CHECK-NEXT: FunctionLength: 172
60+
// CHECK-NEXT: FunctionLength: 148
5961
// CHECK: Prologue [
6062
// CHECK-NEXT: 0xe716c3 ; str p6, [sp, #3, mul vl]
6163
// CHECK-NEXT: 0xe703c5 ; str z11, [sp, #5, mul vl]
@@ -73,11 +75,6 @@
7375
// CHECK-NEXT: 0xe74104 ; stp x1, x2, [sp, #64]
7476
// CHECK-NEXT: 0xe70008 ; str x0, [sp, #64]
7577
// CHECK-NEXT: 0xfc ; pacibsp
76-
// CHECK-NEXT: 0xec ; clear unwound to call
77-
// CHECK-NEXT: 0xeb ; EC context
78-
// CHECK-NEXT: 0xea ; context
79-
// CHECK-NEXT: 0xe9 ; machine frame
80-
// CHECK-NEXT: 0xe8 ; trap frame
8178
// CHECK-NEXT: 0xe3 ; nop
8279
// CHECK-NEXT: 0xe202 ; add fp, sp, #16
8380
// CHECK-NEXT: 0xdd41 ; str d13, [sp, #8]
@@ -100,8 +97,8 @@
10097
// CHECK-NEXT: ]
10198
// CHECK-NEXT: EpilogueScopes [
10299
// CHECK-NEXT: EpilogueScope {
103-
// CHECK-NEXT: StartOffset: 41
104-
// CHECK-NEXT: EpilogueStartIndex: 77
100+
// CHECK-NEXT: StartOffset: 35
101+
// CHECK-NEXT: EpilogueStartIndex: 72
105102
// CHECK-NEXT: Opcodes [
106103
// CHECK-NEXT: 0x01 ; add sp, #16
107104
// CHECK-NEXT: 0xe4 ; end
@@ -114,6 +111,23 @@
114111
// CHECK-NEXT: ]
115112
// CHECK-NEXT: }
116113
// CHECK-NEXT: }
114+
// CHECK-NEXT: RuntimeFunction {
115+
// CHECK-NEXT: Function: customfunc
116+
// CHECK-NEXT: ExceptionRecord: .xdata
117+
// CHECK-NEXT: ExceptionData {
118+
// CHECK-NEXT: FunctionLength: 24
119+
// CHECK: Prologue [
120+
// CHECK-NEXT: 0xec ; clear unwound to call
121+
// CHECK-NEXT: 0xeb ; EC context
122+
// CHECK-NEXT: 0xea ; context
123+
// CHECK-NEXT: 0xe9 ; machine frame
124+
// CHECK-NEXT: 0xe8 ; trap frame
125+
// CHECK-NEXT: 0xe4 ; end
126+
// CHECK-NEXT: ]
127+
// CHECK-NEXT: EpilogueScopes [
128+
// CHECK-NEXT: ]
129+
// CHECK-NEXT: }
130+
// CHECK-NEXT: }
117131
// CHECK-NEXT: ]
118132

119133

@@ -161,16 +175,6 @@ func:
161175
.seh_add_fp 16
162176
nop
163177
.seh_nop
164-
nop
165-
.seh_trap_frame
166-
nop
167-
.seh_pushframe
168-
nop
169-
.seh_context
170-
nop
171-
.seh_ec_context
172-
nop
173-
.seh_clear_unwound_to_call
174178
pacibsp
175179
.seh_pac_sign_lr
176180
nop
@@ -203,7 +207,6 @@ func:
203207
.seh_save_zreg z11, 5
204208
nop
205209
.seh_save_preg p6, 3
206-
nop
207210
.seh_endprologue
208211
nop
209212
.seh_startepilogue
@@ -217,6 +220,22 @@ func:
217220
.text
218221
.seh_endproc
219222

223+
.seh_proc customfunc
224+
customfunc:
225+
nop
226+
.seh_trap_frame
227+
nop
228+
.seh_pushframe
229+
nop
230+
.seh_context
231+
nop
232+
.seh_ec_context
233+
nop
234+
.seh_clear_unwound_to_call
235+
.seh_endprologue
236+
ret
237+
.seh_endproc
238+
220239
// Function with no .seh directives; no pdata/xdata entries are
221240
// generated.
222241
.globl smallFunc

0 commit comments

Comments
 (0)