@@ -104,7 +104,9 @@ define i32 @f3() shadowcallstack {
104
104
; RV32-ZICFISS-NEXT: .cfi_restore ra
105
105
; RV32-ZICFISS-NEXT: addi sp, sp, 16
106
106
; RV32-ZICFISS-NEXT: .cfi_def_cfa_offset 0
107
- ; RV32-ZICFISS-NEXT: sspopchk ra
107
+ ; RV32-ZICFISS-NEXT: lw ra, -4(gp)
108
+ ; RV32-ZICFISS-NEXT: addi gp, gp, -4
109
+ ; RV32-ZICFISS-NEXT: .cfi_restore gp
108
110
; RV32-ZICFISS-NEXT: ret
109
111
;
110
112
; RV64-ZICFISS-LABEL: f3:
@@ -121,7 +123,9 @@ define i32 @f3() shadowcallstack {
121
123
; RV64-ZICFISS-NEXT: .cfi_restore ra
122
124
; RV64-ZICFISS-NEXT: addi sp, sp, 16
123
125
; RV64-ZICFISS-NEXT: .cfi_def_cfa_offset 0
124
- ; RV64-ZICFISS-NEXT: sspopchk ra
126
+ ; RV64-ZICFISS-NEXT: ld ra, -8(gp)
127
+ ; RV64-ZICFISS-NEXT: addi gp, gp, -8
128
+ ; RV64-ZICFISS-NEXT: .cfi_restore gp
125
129
; RV64-ZICFISS-NEXT: ret
126
130
%res = call i32 @bar ()
127
131
%res1 = add i32 %res , 1
@@ -243,6 +247,7 @@ define i32 @f4() shadowcallstack {
243
247
; RV32-ZICFISS-NEXT: .cfi_restore s1
244
248
; RV32-ZICFISS-NEXT: .cfi_restore s2
245
249
; RV32-ZICFISS-NEXT: addi sp, sp, 16
250
+ ; RV32-ZICFISS-NEXT: .cfi_def_cfa_offset 0
246
251
; RV32-ZICFISS-NEXT: lw ra, -4(gp)
247
252
; RV32-ZICFISS-NEXT: addi gp, gp, -4
248
253
; RV32-ZICFISS-NEXT: .cfi_restore gp
@@ -282,6 +287,7 @@ define i32 @f4() shadowcallstack {
282
287
; RV64-ZICFISS-NEXT: .cfi_restore s1
283
288
; RV64-ZICFISS-NEXT: .cfi_restore s2
284
289
; RV64-ZICFISS-NEXT: addi sp, sp, 32
290
+ ; RV64-ZICFISS-NEXT: .cfi_def_cfa_offset 0
285
291
; RV64-ZICFISS-NEXT: ld ra, -8(gp)
286
292
; RV64-ZICFISS-NEXT: addi gp, gp, -8
287
293
; RV64-ZICFISS-NEXT: .cfi_restore gp
@@ -401,7 +407,9 @@ define i32 @f3_hw() "hw-shadow-stack" {
401
407
; RV32-NEXT: .cfi_offset ra, -4
402
408
; RV32-NEXT: call bar
403
409
; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
410
+ ; RV32-NEXT: .cfi_restore ra
404
411
; RV32-NEXT: addi sp, sp, 16
412
+ ; RV32-NEXT: .cfi_def_cfa_offset 0
405
413
; RV32-NEXT: ret
406
414
;
407
415
; RV64-LABEL: f3_hw:
@@ -412,7 +420,9 @@ define i32 @f3_hw() "hw-shadow-stack" {
412
420
; RV64-NEXT: .cfi_offset ra, -8
413
421
; RV64-NEXT: call bar
414
422
; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
423
+ ; RV64-NEXT: .cfi_restore ra
415
424
; RV64-NEXT: addi sp, sp, 16
425
+ ; RV64-NEXT: .cfi_def_cfa_offset 0
416
426
; RV64-NEXT: ret
417
427
;
418
428
; RV32-ZICFISS-LABEL: f3_hw:
@@ -424,7 +434,9 @@ define i32 @f3_hw() "hw-shadow-stack" {
424
434
; RV32-ZICFISS-NEXT: .cfi_offset ra, -4
425
435
; RV32-ZICFISS-NEXT: call bar
426
436
; RV32-ZICFISS-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
437
+ ; RV32-ZICFISS-NEXT: .cfi_restore ra
427
438
; RV32-ZICFISS-NEXT: addi sp, sp, 16
439
+ ; RV32-ZICFISS-NEXT: .cfi_def_cfa_offset 0
428
440
; RV32-ZICFISS-NEXT: sspopchk ra
429
441
; RV32-ZICFISS-NEXT: ret
430
442
;
@@ -437,7 +449,9 @@ define i32 @f3_hw() "hw-shadow-stack" {
437
449
; RV64-ZICFISS-NEXT: .cfi_offset ra, -8
438
450
; RV64-ZICFISS-NEXT: call bar
439
451
; RV64-ZICFISS-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
452
+ ; RV64-ZICFISS-NEXT: .cfi_restore ra
440
453
; RV64-ZICFISS-NEXT: addi sp, sp, 16
454
+ ; RV64-ZICFISS-NEXT: .cfi_def_cfa_offset 0
441
455
; RV64-ZICFISS-NEXT: sspopchk ra
442
456
; RV64-ZICFISS-NEXT: ret
443
457
%res = call i32 @bar ()
@@ -472,7 +486,12 @@ define i32 @f4_hw() "hw-shadow-stack" {
472
486
; RV32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
473
487
; RV32-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
474
488
; RV32-NEXT: lw s2, 0(sp) # 4-byte Folded Reload
489
+ ; RV32-NEXT: .cfi_restore ra
490
+ ; RV32-NEXT: .cfi_restore s0
491
+ ; RV32-NEXT: .cfi_restore s1
492
+ ; RV32-NEXT: .cfi_restore s2
475
493
; RV32-NEXT: addi sp, sp, 16
494
+ ; RV32-NEXT: .cfi_def_cfa_offset 0
476
495
; RV32-NEXT: ret
477
496
;
478
497
; RV64-LABEL: f4_hw:
@@ -501,7 +520,12 @@ define i32 @f4_hw() "hw-shadow-stack" {
501
520
; RV64-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
502
521
; RV64-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
503
522
; RV64-NEXT: ld s2, 0(sp) # 8-byte Folded Reload
523
+ ; RV64-NEXT: .cfi_restore ra
524
+ ; RV64-NEXT: .cfi_restore s0
525
+ ; RV64-NEXT: .cfi_restore s1
526
+ ; RV64-NEXT: .cfi_restore s2
504
527
; RV64-NEXT: addi sp, sp, 32
528
+ ; RV64-NEXT: .cfi_def_cfa_offset 0
505
529
; RV64-NEXT: ret
506
530
;
507
531
; RV32-ZICFISS-LABEL: f4_hw:
@@ -531,7 +555,12 @@ define i32 @f4_hw() "hw-shadow-stack" {
531
555
; RV32-ZICFISS-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
532
556
; RV32-ZICFISS-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
533
557
; RV32-ZICFISS-NEXT: lw s2, 0(sp) # 4-byte Folded Reload
558
+ ; RV32-ZICFISS-NEXT: .cfi_restore ra
559
+ ; RV32-ZICFISS-NEXT: .cfi_restore s0
560
+ ; RV32-ZICFISS-NEXT: .cfi_restore s1
561
+ ; RV32-ZICFISS-NEXT: .cfi_restore s2
534
562
; RV32-ZICFISS-NEXT: addi sp, sp, 16
563
+ ; RV32-ZICFISS-NEXT: .cfi_def_cfa_offset 0
535
564
; RV32-ZICFISS-NEXT: sspopchk ra
536
565
; RV32-ZICFISS-NEXT: ret
537
566
;
@@ -562,7 +591,12 @@ define i32 @f4_hw() "hw-shadow-stack" {
562
591
; RV64-ZICFISS-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
563
592
; RV64-ZICFISS-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
564
593
; RV64-ZICFISS-NEXT: ld s2, 0(sp) # 8-byte Folded Reload
594
+ ; RV64-ZICFISS-NEXT: .cfi_restore ra
595
+ ; RV64-ZICFISS-NEXT: .cfi_restore s0
596
+ ; RV64-ZICFISS-NEXT: .cfi_restore s1
597
+ ; RV64-ZICFISS-NEXT: .cfi_restore s2
565
598
; RV64-ZICFISS-NEXT: addi sp, sp, 32
599
+ ; RV64-ZICFISS-NEXT: .cfi_def_cfa_offset 0
566
600
; RV64-ZICFISS-NEXT: sspopchk ra
567
601
; RV64-ZICFISS-NEXT: ret
568
602
%res1 = call i32 @bar ()
@@ -671,7 +705,9 @@ define i32 @f3_both() "hw-shadow-stack" shadowcallstack {
671
705
; RV32-NEXT: .cfi_offset ra, -4
672
706
; RV32-NEXT: call bar
673
707
; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
708
+ ; RV32-NEXT: .cfi_restore ra
674
709
; RV32-NEXT: addi sp, sp, 16
710
+ ; RV32-NEXT: .cfi_def_cfa_offset 0
675
711
; RV32-NEXT: lw ra, -4(gp)
676
712
; RV32-NEXT: addi gp, gp, -4
677
713
; RV32-NEXT: .cfi_restore gp
@@ -688,7 +724,9 @@ define i32 @f3_both() "hw-shadow-stack" shadowcallstack {
688
724
; RV64-NEXT: .cfi_offset ra, -8
689
725
; RV64-NEXT: call bar
690
726
; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
727
+ ; RV64-NEXT: .cfi_restore ra
691
728
; RV64-NEXT: addi sp, sp, 16
729
+ ; RV64-NEXT: .cfi_def_cfa_offset 0
692
730
; RV64-NEXT: ld ra, -8(gp)
693
731
; RV64-NEXT: addi gp, gp, -8
694
732
; RV64-NEXT: .cfi_restore gp
@@ -703,7 +741,9 @@ define i32 @f3_both() "hw-shadow-stack" shadowcallstack {
703
741
; RV32-ZICFISS-NEXT: .cfi_offset ra, -4
704
742
; RV32-ZICFISS-NEXT: call bar
705
743
; RV32-ZICFISS-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
744
+ ; RV32-ZICFISS-NEXT: .cfi_restore ra
706
745
; RV32-ZICFISS-NEXT: addi sp, sp, 16
746
+ ; RV32-ZICFISS-NEXT: .cfi_def_cfa_offset 0
707
747
; RV32-ZICFISS-NEXT: sspopchk ra
708
748
; RV32-ZICFISS-NEXT: ret
709
749
;
@@ -716,7 +756,9 @@ define i32 @f3_both() "hw-shadow-stack" shadowcallstack {
716
756
; RV64-ZICFISS-NEXT: .cfi_offset ra, -8
717
757
; RV64-ZICFISS-NEXT: call bar
718
758
; RV64-ZICFISS-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
759
+ ; RV64-ZICFISS-NEXT: .cfi_restore ra
719
760
; RV64-ZICFISS-NEXT: addi sp, sp, 16
761
+ ; RV64-ZICFISS-NEXT: .cfi_def_cfa_offset 0
720
762
; RV64-ZICFISS-NEXT: sspopchk ra
721
763
; RV64-ZICFISS-NEXT: ret
722
764
%res = call i32 @bar ()
@@ -754,7 +796,12 @@ define i32 @f4_both() "hw-shadow-stack" shadowcallstack {
754
796
; RV32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
755
797
; RV32-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
756
798
; RV32-NEXT: lw s2, 0(sp) # 4-byte Folded Reload
799
+ ; RV32-NEXT: .cfi_restore ra
800
+ ; RV32-NEXT: .cfi_restore s0
801
+ ; RV32-NEXT: .cfi_restore s1
802
+ ; RV32-NEXT: .cfi_restore s2
757
803
; RV32-NEXT: addi sp, sp, 16
804
+ ; RV32-NEXT: .cfi_def_cfa_offset 0
758
805
; RV32-NEXT: lw ra, -4(gp)
759
806
; RV32-NEXT: addi gp, gp, -4
760
807
; RV32-NEXT: .cfi_restore gp
@@ -789,7 +836,12 @@ define i32 @f4_both() "hw-shadow-stack" shadowcallstack {
789
836
; RV64-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
790
837
; RV64-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
791
838
; RV64-NEXT: ld s2, 0(sp) # 8-byte Folded Reload
839
+ ; RV64-NEXT: .cfi_restore ra
840
+ ; RV64-NEXT: .cfi_restore s0
841
+ ; RV64-NEXT: .cfi_restore s1
842
+ ; RV64-NEXT: .cfi_restore s2
792
843
; RV64-NEXT: addi sp, sp, 32
844
+ ; RV64-NEXT: .cfi_def_cfa_offset 0
793
845
; RV64-NEXT: ld ra, -8(gp)
794
846
; RV64-NEXT: addi gp, gp, -8
795
847
; RV64-NEXT: .cfi_restore gp
@@ -822,7 +874,12 @@ define i32 @f4_both() "hw-shadow-stack" shadowcallstack {
822
874
; RV32-ZICFISS-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
823
875
; RV32-ZICFISS-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
824
876
; RV32-ZICFISS-NEXT: lw s2, 0(sp) # 4-byte Folded Reload
877
+ ; RV32-ZICFISS-NEXT: .cfi_restore ra
878
+ ; RV32-ZICFISS-NEXT: .cfi_restore s0
879
+ ; RV32-ZICFISS-NEXT: .cfi_restore s1
880
+ ; RV32-ZICFISS-NEXT: .cfi_restore s2
825
881
; RV32-ZICFISS-NEXT: addi sp, sp, 16
882
+ ; RV32-ZICFISS-NEXT: .cfi_def_cfa_offset 0
826
883
; RV32-ZICFISS-NEXT: sspopchk ra
827
884
; RV32-ZICFISS-NEXT: ret
828
885
;
@@ -853,7 +910,12 @@ define i32 @f4_both() "hw-shadow-stack" shadowcallstack {
853
910
; RV64-ZICFISS-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
854
911
; RV64-ZICFISS-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
855
912
; RV64-ZICFISS-NEXT: ld s2, 0(sp) # 8-byte Folded Reload
913
+ ; RV64-ZICFISS-NEXT: .cfi_restore ra
914
+ ; RV64-ZICFISS-NEXT: .cfi_restore s0
915
+ ; RV64-ZICFISS-NEXT: .cfi_restore s1
916
+ ; RV64-ZICFISS-NEXT: .cfi_restore s2
856
917
; RV64-ZICFISS-NEXT: addi sp, sp, 32
918
+ ; RV64-ZICFISS-NEXT: .cfi_def_cfa_offset 0
857
919
; RV64-ZICFISS-NEXT: sspopchk ra
858
920
; RV64-ZICFISS-NEXT: ret
859
921
%res1 = call i32 @bar ()
0 commit comments