@@ -104,7 +104,9 @@ define i32 @f3() shadowcallstack {
104104; RV32-ZICFISS-NEXT: .cfi_restore ra
105105; RV32-ZICFISS-NEXT: addi sp, sp, 16
106106; 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
108110; RV32-ZICFISS-NEXT: ret
109111;
110112; RV64-ZICFISS-LABEL: f3:
@@ -121,7 +123,9 @@ define i32 @f3() shadowcallstack {
121123; RV64-ZICFISS-NEXT: .cfi_restore ra
122124; RV64-ZICFISS-NEXT: addi sp, sp, 16
123125; 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
125129; RV64-ZICFISS-NEXT: ret
126130 %res = call i32 @bar ()
127131 %res1 = add i32 %res , 1
@@ -243,6 +247,7 @@ define i32 @f4() shadowcallstack {
243247; RV32-ZICFISS-NEXT: .cfi_restore s1
244248; RV32-ZICFISS-NEXT: .cfi_restore s2
245249; RV32-ZICFISS-NEXT: addi sp, sp, 16
250+ ; RV32-ZICFISS-NEXT: .cfi_def_cfa_offset 0
246251; RV32-ZICFISS-NEXT: lw ra, -4(gp)
247252; RV32-ZICFISS-NEXT: addi gp, gp, -4
248253; RV32-ZICFISS-NEXT: .cfi_restore gp
@@ -282,6 +287,7 @@ define i32 @f4() shadowcallstack {
282287; RV64-ZICFISS-NEXT: .cfi_restore s1
283288; RV64-ZICFISS-NEXT: .cfi_restore s2
284289; RV64-ZICFISS-NEXT: addi sp, sp, 32
290+ ; RV64-ZICFISS-NEXT: .cfi_def_cfa_offset 0
285291; RV64-ZICFISS-NEXT: ld ra, -8(gp)
286292; RV64-ZICFISS-NEXT: addi gp, gp, -8
287293; RV64-ZICFISS-NEXT: .cfi_restore gp
@@ -401,7 +407,9 @@ define i32 @f3_hw() "hw-shadow-stack" {
401407; RV32-NEXT: .cfi_offset ra, -4
402408; RV32-NEXT: call bar
403409; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
410+ ; RV32-NEXT: .cfi_restore ra
404411; RV32-NEXT: addi sp, sp, 16
412+ ; RV32-NEXT: .cfi_def_cfa_offset 0
405413; RV32-NEXT: ret
406414;
407415; RV64-LABEL: f3_hw:
@@ -412,7 +420,9 @@ define i32 @f3_hw() "hw-shadow-stack" {
412420; RV64-NEXT: .cfi_offset ra, -8
413421; RV64-NEXT: call bar
414422; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
423+ ; RV64-NEXT: .cfi_restore ra
415424; RV64-NEXT: addi sp, sp, 16
425+ ; RV64-NEXT: .cfi_def_cfa_offset 0
416426; RV64-NEXT: ret
417427;
418428; RV32-ZICFISS-LABEL: f3_hw:
@@ -424,7 +434,9 @@ define i32 @f3_hw() "hw-shadow-stack" {
424434; RV32-ZICFISS-NEXT: .cfi_offset ra, -4
425435; RV32-ZICFISS-NEXT: call bar
426436; RV32-ZICFISS-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
437+ ; RV32-ZICFISS-NEXT: .cfi_restore ra
427438; RV32-ZICFISS-NEXT: addi sp, sp, 16
439+ ; RV32-ZICFISS-NEXT: .cfi_def_cfa_offset 0
428440; RV32-ZICFISS-NEXT: sspopchk ra
429441; RV32-ZICFISS-NEXT: ret
430442;
@@ -437,7 +449,9 @@ define i32 @f3_hw() "hw-shadow-stack" {
437449; RV64-ZICFISS-NEXT: .cfi_offset ra, -8
438450; RV64-ZICFISS-NEXT: call bar
439451; RV64-ZICFISS-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
452+ ; RV64-ZICFISS-NEXT: .cfi_restore ra
440453; RV64-ZICFISS-NEXT: addi sp, sp, 16
454+ ; RV64-ZICFISS-NEXT: .cfi_def_cfa_offset 0
441455; RV64-ZICFISS-NEXT: sspopchk ra
442456; RV64-ZICFISS-NEXT: ret
443457 %res = call i32 @bar ()
@@ -472,7 +486,12 @@ define i32 @f4_hw() "hw-shadow-stack" {
472486; RV32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
473487; RV32-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
474488; 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
475493; RV32-NEXT: addi sp, sp, 16
494+ ; RV32-NEXT: .cfi_def_cfa_offset 0
476495; RV32-NEXT: ret
477496;
478497; RV64-LABEL: f4_hw:
@@ -501,7 +520,12 @@ define i32 @f4_hw() "hw-shadow-stack" {
501520; RV64-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
502521; RV64-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
503522; 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
504527; RV64-NEXT: addi sp, sp, 32
528+ ; RV64-NEXT: .cfi_def_cfa_offset 0
505529; RV64-NEXT: ret
506530;
507531; RV32-ZICFISS-LABEL: f4_hw:
@@ -531,7 +555,12 @@ define i32 @f4_hw() "hw-shadow-stack" {
531555; RV32-ZICFISS-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
532556; RV32-ZICFISS-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
533557; 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
534562; RV32-ZICFISS-NEXT: addi sp, sp, 16
563+ ; RV32-ZICFISS-NEXT: .cfi_def_cfa_offset 0
535564; RV32-ZICFISS-NEXT: sspopchk ra
536565; RV32-ZICFISS-NEXT: ret
537566;
@@ -562,7 +591,12 @@ define i32 @f4_hw() "hw-shadow-stack" {
562591; RV64-ZICFISS-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
563592; RV64-ZICFISS-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
564593; 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
565598; RV64-ZICFISS-NEXT: addi sp, sp, 32
599+ ; RV64-ZICFISS-NEXT: .cfi_def_cfa_offset 0
566600; RV64-ZICFISS-NEXT: sspopchk ra
567601; RV64-ZICFISS-NEXT: ret
568602 %res1 = call i32 @bar ()
@@ -671,7 +705,9 @@ define i32 @f3_both() "hw-shadow-stack" shadowcallstack {
671705; RV32-NEXT: .cfi_offset ra, -4
672706; RV32-NEXT: call bar
673707; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
708+ ; RV32-NEXT: .cfi_restore ra
674709; RV32-NEXT: addi sp, sp, 16
710+ ; RV32-NEXT: .cfi_def_cfa_offset 0
675711; RV32-NEXT: lw ra, -4(gp)
676712; RV32-NEXT: addi gp, gp, -4
677713; RV32-NEXT: .cfi_restore gp
@@ -688,7 +724,9 @@ define i32 @f3_both() "hw-shadow-stack" shadowcallstack {
688724; RV64-NEXT: .cfi_offset ra, -8
689725; RV64-NEXT: call bar
690726; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
727+ ; RV64-NEXT: .cfi_restore ra
691728; RV64-NEXT: addi sp, sp, 16
729+ ; RV64-NEXT: .cfi_def_cfa_offset 0
692730; RV64-NEXT: ld ra, -8(gp)
693731; RV64-NEXT: addi gp, gp, -8
694732; RV64-NEXT: .cfi_restore gp
@@ -703,7 +741,9 @@ define i32 @f3_both() "hw-shadow-stack" shadowcallstack {
703741; RV32-ZICFISS-NEXT: .cfi_offset ra, -4
704742; RV32-ZICFISS-NEXT: call bar
705743; RV32-ZICFISS-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
744+ ; RV32-ZICFISS-NEXT: .cfi_restore ra
706745; RV32-ZICFISS-NEXT: addi sp, sp, 16
746+ ; RV32-ZICFISS-NEXT: .cfi_def_cfa_offset 0
707747; RV32-ZICFISS-NEXT: sspopchk ra
708748; RV32-ZICFISS-NEXT: ret
709749;
@@ -716,7 +756,9 @@ define i32 @f3_both() "hw-shadow-stack" shadowcallstack {
716756; RV64-ZICFISS-NEXT: .cfi_offset ra, -8
717757; RV64-ZICFISS-NEXT: call bar
718758; RV64-ZICFISS-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
759+ ; RV64-ZICFISS-NEXT: .cfi_restore ra
719760; RV64-ZICFISS-NEXT: addi sp, sp, 16
761+ ; RV64-ZICFISS-NEXT: .cfi_def_cfa_offset 0
720762; RV64-ZICFISS-NEXT: sspopchk ra
721763; RV64-ZICFISS-NEXT: ret
722764 %res = call i32 @bar ()
@@ -754,7 +796,12 @@ define i32 @f4_both() "hw-shadow-stack" shadowcallstack {
754796; RV32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
755797; RV32-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
756798; 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
757803; RV32-NEXT: addi sp, sp, 16
804+ ; RV32-NEXT: .cfi_def_cfa_offset 0
758805; RV32-NEXT: lw ra, -4(gp)
759806; RV32-NEXT: addi gp, gp, -4
760807; RV32-NEXT: .cfi_restore gp
@@ -789,7 +836,12 @@ define i32 @f4_both() "hw-shadow-stack" shadowcallstack {
789836; RV64-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
790837; RV64-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
791838; 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
792843; RV64-NEXT: addi sp, sp, 32
844+ ; RV64-NEXT: .cfi_def_cfa_offset 0
793845; RV64-NEXT: ld ra, -8(gp)
794846; RV64-NEXT: addi gp, gp, -8
795847; RV64-NEXT: .cfi_restore gp
@@ -822,7 +874,12 @@ define i32 @f4_both() "hw-shadow-stack" shadowcallstack {
822874; RV32-ZICFISS-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
823875; RV32-ZICFISS-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
824876; 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
825881; RV32-ZICFISS-NEXT: addi sp, sp, 16
882+ ; RV32-ZICFISS-NEXT: .cfi_def_cfa_offset 0
826883; RV32-ZICFISS-NEXT: sspopchk ra
827884; RV32-ZICFISS-NEXT: ret
828885;
@@ -853,7 +910,12 @@ define i32 @f4_both() "hw-shadow-stack" shadowcallstack {
853910; RV64-ZICFISS-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
854911; RV64-ZICFISS-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
855912; 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
856917; RV64-ZICFISS-NEXT: addi sp, sp, 32
918+ ; RV64-ZICFISS-NEXT: .cfi_def_cfa_offset 0
857919; RV64-ZICFISS-NEXT: sspopchk ra
858920; RV64-ZICFISS-NEXT: ret
859921 %res1 = call i32 @bar ()
0 commit comments