Skip to content

Commit 249f074

Browse files
[BOLT][AArch64] Make gs-pacret-autiasp.s deterministic (#145527)
In gs-pacret-autiasp.s, the undefined call `bl g` causes inconsistent basic block splitting: in some platforms BOLT emits two blocks, on some others one. Defining a dummy `g` symbol forces a single basic block everywhere.
1 parent d681c73 commit 249f074

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

bolt/test/binary-analysis/AArch64/gs-pacret-autiasp.s

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ f1:
1818
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
1919
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
2020
// CHECK-NEXT: This happens in the following basic block:
21+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
22+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
23+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
24+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
2125
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
2226
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
2327
// CHECK-NEXT: {{[0-9a-f]+}}: ret
@@ -40,6 +44,10 @@ f_intermediate_overwrite1:
4044
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
4145
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
4246
// CHECK-NEXT: This happens in the following basic block:
47+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
48+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
49+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
50+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
4351
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
4452
// CHECK-NEXT: {{[0-9a-f]+}}: autiasp
4553
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
@@ -63,6 +71,10 @@ f_intermediate_overwrite2:
6371
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
6472
// CHECK-NEXT: 1. {{[0-9a-f]+}}: mov x30, x0
6573
// CHECK-NEXT: This happens in the following basic block:
74+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
75+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
76+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
77+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
6678
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
6779
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
6880
// CHECK-NEXT: {{[0-9a-f]+}}: autiasp
@@ -102,6 +114,10 @@ f_intermediate_overwrite3:
102114
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
103115
// CHECK-NEXT: 1. {{[0-9a-f]+}}: mov w30, w0
104116
// CHECK-NEXT: This happens in the following basic block:
117+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
118+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
119+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
120+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
105121
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
106122
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
107123
// CHECK-NEXT: {{[0-9a-f]+}}: autiasp
@@ -126,6 +142,10 @@ f_nonx30_ret:
126142
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
127143
// CHECK-NEXT: 1. {{[0-9a-f]+}}: mov x16, x30
128144
// CHECK-NEXT: This happens in the following basic block:
145+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
146+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
147+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
148+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
129149
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
130150
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
131151
// CHECK-NEXT: {{[0-9a-f]+}}: mov x16, x30
@@ -325,6 +345,10 @@ f_autia1716:
325345
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
326346
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
327347
// CHECK-NEXT: This happens in the following basic block:
348+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
349+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
350+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
351+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
328352
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
329353
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
330354
// CHECK-NEXT: {{[0-9a-f]+}}: autia1716
@@ -347,6 +371,10 @@ f_autib1716:
347371
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
348372
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
349373
// CHECK-NEXT: This happens in the following basic block:
374+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
375+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
376+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
377+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
350378
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
351379
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
352380
// CHECK-NEXT: {{[0-9a-f]+}}: autib1716
@@ -369,6 +397,10 @@ f_autiax12:
369397
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
370398
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
371399
// CHECK-NEXT: This happens in the following basic block:
400+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
401+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
402+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
403+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
372404
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
373405
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
374406
// CHECK-NEXT: {{[0-9a-f]+}}: autia x12, sp
@@ -391,6 +423,10 @@ f_autibx12:
391423
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
392424
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
393425
// CHECK-NEXT: This happens in the following basic block:
426+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
427+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
428+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
429+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
394430
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
395431
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
396432
// CHECK-NEXT: {{[0-9a-f]+}}: autib x12, sp
@@ -442,6 +478,10 @@ f_autdax12:
442478
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
443479
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
444480
// CHECK-NEXT: This happens in the following basic block:
481+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
482+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
483+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
484+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
445485
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
446486
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
447487
// CHECK-NEXT: {{[0-9a-f]+}}: autda x12, sp
@@ -464,6 +504,10 @@ f_autdbx12:
464504
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
465505
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
466506
// CHECK-NEXT: This happens in the following basic block:
507+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
508+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
509+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
510+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
467511
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
468512
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
469513
// CHECK-NEXT: {{[0-9a-f]+}}: autdb x12, sp
@@ -515,6 +559,10 @@ f_autizax12:
515559
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
516560
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
517561
// CHECK-NEXT: This happens in the following basic block:
562+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
563+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
564+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
565+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
518566
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
519567
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
520568
// CHECK-NEXT: {{[0-9a-f]+}}: autiza x12
@@ -537,6 +585,10 @@ f_autizbx12:
537585
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
538586
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
539587
// CHECK-NEXT: This happens in the following basic block:
588+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
589+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
590+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
591+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
540592
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
541593
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
542594
// CHECK-NEXT: {{[0-9a-f]+}}: autizb x12
@@ -588,6 +640,10 @@ f_autdzax12:
588640
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
589641
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
590642
// CHECK-NEXT: This happens in the following basic block:
643+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
644+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
645+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
646+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
591647
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
592648
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
593649
// CHECK-NEXT: {{[0-9a-f]+}}: autdza x12
@@ -610,6 +666,10 @@ f_autdzbx12:
610666
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
611667
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
612668
// CHECK-NEXT: This happens in the following basic block:
669+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
670+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
671+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
672+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
613673
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
614674
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
615675
// CHECK-NEXT: {{[0-9a-f]+}}: autdzb x12
@@ -868,6 +928,10 @@ f_autia171615:
868928
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
869929
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
870930
// CHECK-NEXT: This happens in the following basic block:
931+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
932+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
933+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
934+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
871935
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
872936
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
873937
// CHECK-NEXT: {{[0-9a-f]+}}: autia171615
@@ -890,10 +954,20 @@ f_autib171615:
890954
// CHECK-NEXT: The 1 instructions that write to the affected registers after any authentication are:
891955
// CHECK-NEXT: 1. {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
892956
// CHECK-NEXT: This happens in the following basic block:
957+
// CHECK-NEXT: {{[0-9a-f]+}}: paciasp
958+
// CHECK-NEXT: {{[0-9a-f]+}}: stp x29, x30, [sp, #-0x10]!
959+
// CHECK-NEXT: {{[0-9a-f]+}}: mov x29, sp
960+
// CHECK-NEXT: {{[0-9a-f]+}}: bl g
893961
// CHECK-NEXT: {{[0-9a-f]+}}: add x0, x0, #0x3
894962
// CHECK-NEXT: {{[0-9a-f]+}}: ldp x29, x30, [sp], #0x10
895963
// CHECK-NEXT: {{[0-9a-f]+}}: autib171615
896964
// CHECK-NEXT: {{[0-9a-f]+}}: ret
897965
ret
898966
.size f_autib171615, .-f_autib171615
899967

968+
.globl g
969+
.type g,@function
970+
g:
971+
nop
972+
ret
973+
.size g, .-g

0 commit comments

Comments
 (0)