Skip to content

Commit 3d50e1f

Browse files
authored
RuntimeLibcalls: Add some tests for OpenBSD stack protectors (#147888)
7dce16f removed a libcall for STACKPROTECTOR_CHECK_FAIL from OpenBSD but added no tests. Add a basic test copied from RISCV into all the backends on the OpenBSD page of supported architectures before I potentially break in in RuntimeLibcalls refactoring.
1 parent 0be51cf commit 3d50e1f

File tree

6 files changed

+582
-0
lines changed

6 files changed

+582
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -mtriple=arm-unknown-linux-eabi < %s | FileCheck -check-prefix=LINUX %s
3+
; RUN: llc -mtriple=arm-unknown-linux-gnueabi < %s | FileCheck -check-prefix=LINUX %s
4+
; RUN: llc -mtriple=arm-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD %s
5+
6+
define void @func() sspreq nounwind {
7+
; LINUX-LABEL: func:
8+
; LINUX: @ %bb.0:
9+
; LINUX-NEXT: .save {r11, lr}
10+
; LINUX-NEXT: push {r11, lr}
11+
; LINUX-NEXT: .pad #8
12+
; LINUX-NEXT: sub sp, sp, #8
13+
; LINUX-NEXT: ldr r0, .LCPI0_0
14+
; LINUX-NEXT: ldr r0, [r0]
15+
; LINUX-NEXT: str r0, [sp, #4]
16+
; LINUX-NEXT: mov r0, sp
17+
; LINUX-NEXT: bl capture
18+
; LINUX-NEXT: ldr r0, [sp, #4]
19+
; LINUX-NEXT: ldr r1, .LCPI0_0
20+
; LINUX-NEXT: ldr r1, [r1]
21+
; LINUX-NEXT: cmp r1, r0
22+
; LINUX-NEXT: addeq sp, sp, #8
23+
; LINUX-NEXT: popeq {r11, lr}
24+
; LINUX-NEXT: moveq pc, lr
25+
; LINUX-NEXT: .LBB0_1:
26+
; LINUX-NEXT: bl __stack_chk_fail
27+
; LINUX-NEXT: .p2align 2
28+
; LINUX-NEXT: @ %bb.2:
29+
; LINUX-NEXT: .LCPI0_0:
30+
; LINUX-NEXT: .long __stack_chk_guard
31+
;
32+
; OPENBSD-LABEL: func:
33+
; OPENBSD: @ %bb.0:
34+
; OPENBSD-NEXT: push {r4, lr}
35+
; OPENBSD-NEXT: sub sp, sp, #8
36+
; OPENBSD-NEXT: ldr r4, .LCPI0_0
37+
; OPENBSD-NEXT: ldr r0, [r4]
38+
; OPENBSD-NEXT: ldr r0, .LCPI0_2
39+
; OPENBSD-NEXT: ldr r0, [r0]
40+
; OPENBSD-NEXT: str r0, [sp, #4]
41+
; OPENBSD-NEXT: mov r0, sp
42+
; OPENBSD-NEXT: bl capture
43+
; OPENBSD-NEXT: ldr r0, [r4]
44+
; OPENBSD-NEXT: ldr r1, [sp, #4]
45+
; OPENBSD-NEXT: cmp r0, r1
46+
; OPENBSD-NEXT: addeq sp, sp, #8
47+
; OPENBSD-NEXT: popeq {r4, lr}
48+
; OPENBSD-NEXT: moveq pc, lr
49+
; OPENBSD-NEXT: .LBB0_1: @ %CallStackCheckFailBlk
50+
; OPENBSD-NEXT: ldr r0, .LCPI0_1
51+
; OPENBSD-NEXT: bl __stack_smash_handler
52+
; OPENBSD-NEXT: .p2align 2
53+
; OPENBSD-NEXT: @ %bb.2:
54+
; OPENBSD-NEXT: .LCPI0_0:
55+
; OPENBSD-NEXT: .long __guard_local
56+
; OPENBSD-NEXT: .LCPI0_1:
57+
; OPENBSD-NEXT: .long .LSSH
58+
; OPENBSD-NEXT: .LCPI0_2:
59+
; OPENBSD-NEXT: .long __guard_local
60+
%alloca = alloca i32, align 4
61+
call void @capture(ptr %alloca)
62+
ret void
63+
}
64+
65+
declare void @capture(ptr)
66+
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
67+
; EABI: {{.*}}
68+
; GNUEABI: {{.*}}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -mtriple=loongarch32-linux-gnu < %s | FileCheck -check-prefix=LINUX32 %s
3+
; RUN: llc -mtriple=loongarch64-linux-gnu < %s | FileCheck -check-prefix=LINUX64 %s
4+
; RUN: llc -mtriple=loongarch32-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD32 %s
5+
; RUN: llc -mtriple=loongarch64-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD64 %s
6+
7+
define void @func() sspreq nounwind {
8+
; LINUX32-LABEL: func:
9+
; LINUX32: # %bb.0:
10+
; LINUX32-NEXT: addi.w $sp, $sp, -16
11+
; LINUX32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
12+
; LINUX32-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill
13+
; LINUX32-NEXT: pcalau12i $fp, %pc_hi20(__stack_chk_guard)
14+
; LINUX32-NEXT: ld.w $a0, $fp, %pc_lo12(__stack_chk_guard)
15+
; LINUX32-NEXT: st.w $a0, $sp, 4
16+
; LINUX32-NEXT: addi.w $a0, $sp, 0
17+
; LINUX32-NEXT: bl capture
18+
; LINUX32-NEXT: ld.w $a0, $fp, %pc_lo12(__stack_chk_guard)
19+
; LINUX32-NEXT: ld.w $a1, $sp, 4
20+
; LINUX32-NEXT: bne $a0, $a1, .LBB0_2
21+
; LINUX32-NEXT: # %bb.1:
22+
; LINUX32-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload
23+
; LINUX32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
24+
; LINUX32-NEXT: addi.w $sp, $sp, 16
25+
; LINUX32-NEXT: ret
26+
; LINUX32-NEXT: .LBB0_2:
27+
; LINUX32-NEXT: bl __stack_chk_fail
28+
;
29+
; LINUX64-LABEL: func:
30+
; LINUX64: # %bb.0:
31+
; LINUX64-NEXT: addi.d $sp, $sp, -32
32+
; LINUX64-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill
33+
; LINUX64-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill
34+
; LINUX64-NEXT: pcalau12i $fp, %pc_hi20(__stack_chk_guard)
35+
; LINUX64-NEXT: ld.d $a0, $fp, %pc_lo12(__stack_chk_guard)
36+
; LINUX64-NEXT: st.d $a0, $sp, 8
37+
; LINUX64-NEXT: addi.d $a0, $sp, 4
38+
; LINUX64-NEXT: pcaddu18i $ra, %call36(capture)
39+
; LINUX64-NEXT: jirl $ra, $ra, 0
40+
; LINUX64-NEXT: ld.d $a0, $fp, %pc_lo12(__stack_chk_guard)
41+
; LINUX64-NEXT: ld.d $a1, $sp, 8
42+
; LINUX64-NEXT: bne $a0, $a1, .LBB0_2
43+
; LINUX64-NEXT: # %bb.1:
44+
; LINUX64-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload
45+
; LINUX64-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload
46+
; LINUX64-NEXT: addi.d $sp, $sp, 32
47+
; LINUX64-NEXT: ret
48+
; LINUX64-NEXT: .LBB0_2:
49+
; LINUX64-NEXT: pcaddu18i $ra, %call36(__stack_chk_fail)
50+
; LINUX64-NEXT: jirl $ra, $ra, 0
51+
;
52+
; OPENBSD32-LABEL: func:
53+
; OPENBSD32: # %bb.0:
54+
; OPENBSD32-NEXT: addi.w $sp, $sp, -16
55+
; OPENBSD32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
56+
; OPENBSD32-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill
57+
; OPENBSD32-NEXT: pcalau12i $fp, %pc_hi20(__guard_local)
58+
; OPENBSD32-NEXT: ld.w $a0, $fp, %pc_lo12(__guard_local)
59+
; OPENBSD32-NEXT: st.w $a0, $sp, 4
60+
; OPENBSD32-NEXT: addi.w $a0, $sp, 0
61+
; OPENBSD32-NEXT: bl capture
62+
; OPENBSD32-NEXT: ld.w $a0, $fp, %pc_lo12(__guard_local)
63+
; OPENBSD32-NEXT: ld.w $a1, $sp, 4
64+
; OPENBSD32-NEXT: bne $a0, $a1, .LBB0_2
65+
; OPENBSD32-NEXT: # %bb.1: # %SP_return
66+
; OPENBSD32-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload
67+
; OPENBSD32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
68+
; OPENBSD32-NEXT: addi.w $sp, $sp, 16
69+
; OPENBSD32-NEXT: ret
70+
; OPENBSD32-NEXT: .LBB0_2: # %CallStackCheckFailBlk
71+
; OPENBSD32-NEXT: pcalau12i $a0, %pc_hi20(.LSSH)
72+
; OPENBSD32-NEXT: addi.w $a0, $a0, %pc_lo12(.LSSH)
73+
; OPENBSD32-NEXT: bl __stack_smash_handler
74+
;
75+
; OPENBSD64-LABEL: func:
76+
; OPENBSD64: # %bb.0:
77+
; OPENBSD64-NEXT: addi.d $sp, $sp, -32
78+
; OPENBSD64-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill
79+
; OPENBSD64-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill
80+
; OPENBSD64-NEXT: pcalau12i $fp, %pc_hi20(__guard_local)
81+
; OPENBSD64-NEXT: ld.d $a0, $fp, %pc_lo12(__guard_local)
82+
; OPENBSD64-NEXT: st.d $a0, $sp, 8
83+
; OPENBSD64-NEXT: addi.d $a0, $sp, 4
84+
; OPENBSD64-NEXT: pcaddu18i $ra, %call36(capture)
85+
; OPENBSD64-NEXT: jirl $ra, $ra, 0
86+
; OPENBSD64-NEXT: ld.d $a0, $fp, %pc_lo12(__guard_local)
87+
; OPENBSD64-NEXT: ld.d $a1, $sp, 8
88+
; OPENBSD64-NEXT: bne $a0, $a1, .LBB0_2
89+
; OPENBSD64-NEXT: # %bb.1: # %SP_return
90+
; OPENBSD64-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload
91+
; OPENBSD64-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload
92+
; OPENBSD64-NEXT: addi.d $sp, $sp, 32
93+
; OPENBSD64-NEXT: ret
94+
; OPENBSD64-NEXT: .LBB0_2: # %CallStackCheckFailBlk
95+
; OPENBSD64-NEXT: pcalau12i $a0, %pc_hi20(.LSSH)
96+
; OPENBSD64-NEXT: addi.d $a0, $a0, %pc_lo12(.LSSH)
97+
; OPENBSD64-NEXT: pcaddu18i $ra, %call36(__stack_smash_handler)
98+
; OPENBSD64-NEXT: jirl $ra, $ra, 0
99+
%alloca = alloca i32, align 4
100+
call void @capture(ptr %alloca)
101+
ret void
102+
}
103+
104+
declare void @capture(ptr)
Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -mtriple=powerpc-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD32 %s
3+
; RUN: llc -mtriple=powerpc64-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD64 %s
4+
; RUN: llc -mtriple=powerpc-unknown-linux < %s | FileCheck -check-prefix=LINUX32 %s
5+
; RUN: llc -mtriple=powerpc64-unknown-linux < %s | FileCheck -check-prefix=LINUX64 %s
6+
; RUN: llc -mtriple=powerpc-ibm-aix-xcoff < %s | FileCheck -check-prefix=AIX32 %s
7+
; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff < %s | FileCheck -check-prefix=AIX64 %s
8+
9+
define void @func() sspreq nounwind {
10+
; OPENBSD32-LABEL: func:
11+
; OPENBSD32: # %bb.0:
12+
; OPENBSD32-NEXT: mflr 0
13+
; OPENBSD32-NEXT: stwu 1, -32(1)
14+
; OPENBSD32-NEXT: stw 0, 36(1)
15+
; OPENBSD32-NEXT: stw 30, 24(1) # 4-byte Folded Spill
16+
; OPENBSD32-NEXT: lis 30, __guard_local@ha
17+
; OPENBSD32-NEXT: lwz 3, __guard_local@l(30)
18+
; OPENBSD32-NEXT: stw 3, 20(1)
19+
; OPENBSD32-NEXT: addi 3, 1, 16
20+
; OPENBSD32-NEXT: bl capture
21+
; OPENBSD32-NEXT: lwz 3, __guard_local@l(30)
22+
; OPENBSD32-NEXT: lwz 4, 20(1)
23+
; OPENBSD32-NEXT: cmplw 3, 4
24+
; OPENBSD32-NEXT: bne- 0, .LBB0_2
25+
; OPENBSD32-NEXT: # %bb.1: # %SP_return
26+
; OPENBSD32-NEXT: lwz 30, 24(1) # 4-byte Folded Reload
27+
; OPENBSD32-NEXT: lwz 0, 36(1)
28+
; OPENBSD32-NEXT: addi 1, 1, 32
29+
; OPENBSD32-NEXT: mtlr 0
30+
; OPENBSD32-NEXT: blr
31+
; OPENBSD32-NEXT: .LBB0_2: # %CallStackCheckFailBlk
32+
; OPENBSD32-NEXT: lis 3, .LSSH@ha
33+
; OPENBSD32-NEXT: la 3, .LSSH@l(3)
34+
; OPENBSD32-NEXT: bl __stack_smash_handler
35+
;
36+
; OPENBSD64-LABEL: func:
37+
; OPENBSD64: # %bb.0:
38+
; OPENBSD64-NEXT: mflr 0
39+
; OPENBSD64-NEXT: std 30, -16(1) # 8-byte Folded Spill
40+
; OPENBSD64-NEXT: stdu 1, -64(1)
41+
; OPENBSD64-NEXT: std 0, 80(1)
42+
; OPENBSD64-NEXT: addis 30, 2, __guard_local@toc@ha
43+
; OPENBSD64-NEXT: ld 3, __guard_local@toc@l(30)
44+
; OPENBSD64-NEXT: std 3, 40(1)
45+
; OPENBSD64-NEXT: addi 3, 1, 36
46+
; OPENBSD64-NEXT: bl capture
47+
; OPENBSD64-NEXT: nop
48+
; OPENBSD64-NEXT: ld 3, __guard_local@toc@l(30)
49+
; OPENBSD64-NEXT: ld 4, 40(1)
50+
; OPENBSD64-NEXT: cmpld 3, 4
51+
; OPENBSD64-NEXT: bne- 0, .LBB0_2
52+
; OPENBSD64-NEXT: # %bb.1: # %SP_return
53+
; OPENBSD64-NEXT: addi 1, 1, 64
54+
; OPENBSD64-NEXT: ld 0, 16(1)
55+
; OPENBSD64-NEXT: mtlr 0
56+
; OPENBSD64-NEXT: ld 30, -16(1) # 8-byte Folded Reload
57+
; OPENBSD64-NEXT: blr
58+
; OPENBSD64-NEXT: .LBB0_2: # %CallStackCheckFailBlk
59+
; OPENBSD64-NEXT: addis 3, 2, .LSSH@toc@ha
60+
; OPENBSD64-NEXT: addi 3, 3, .LSSH@toc@l
61+
; OPENBSD64-NEXT: bl __stack_smash_handler
62+
; OPENBSD64-NEXT: nop
63+
;
64+
; LINUX32-LABEL: func:
65+
; LINUX32: # %bb.0:
66+
; LINUX32-NEXT: mflr 0
67+
; LINUX32-NEXT: stwu 1, -16(1)
68+
; LINUX32-NEXT: stw 0, 20(1)
69+
; LINUX32-NEXT: lwz 3, -28680(2)
70+
; LINUX32-NEXT: stw 3, 12(1)
71+
; LINUX32-NEXT: addi 3, 1, 8
72+
; LINUX32-NEXT: bl capture
73+
; LINUX32-NEXT: lwz 3, 12(1)
74+
; LINUX32-NEXT: lwz 4, -28680(2)
75+
; LINUX32-NEXT: cmplw 4, 3
76+
; LINUX32-NEXT: bne 0, .LBB0_2
77+
; LINUX32-NEXT: # %bb.1:
78+
; LINUX32-NEXT: lwz 0, 20(1)
79+
; LINUX32-NEXT: addi 1, 1, 16
80+
; LINUX32-NEXT: mtlr 0
81+
; LINUX32-NEXT: blr
82+
; LINUX32-NEXT: .LBB0_2:
83+
; LINUX32-NEXT: bl __stack_chk_fail
84+
;
85+
; LINUX64-LABEL: func:
86+
; LINUX64: # %bb.0:
87+
; LINUX64-NEXT: mflr 0
88+
; LINUX64-NEXT: stdu 1, -128(1)
89+
; LINUX64-NEXT: std 0, 144(1)
90+
; LINUX64-NEXT: ld 3, -28688(13)
91+
; LINUX64-NEXT: std 3, 120(1)
92+
; LINUX64-NEXT: addi 3, 1, 116
93+
; LINUX64-NEXT: bl capture
94+
; LINUX64-NEXT: nop
95+
; LINUX64-NEXT: ld 3, 120(1)
96+
; LINUX64-NEXT: ld 4, -28688(13)
97+
; LINUX64-NEXT: cmpld 4, 3
98+
; LINUX64-NEXT: bne 0, .LBB0_2
99+
; LINUX64-NEXT: # %bb.1:
100+
; LINUX64-NEXT: addi 1, 1, 128
101+
; LINUX64-NEXT: ld 0, 16(1)
102+
; LINUX64-NEXT: mtlr 0
103+
; LINUX64-NEXT: blr
104+
; LINUX64-NEXT: .LBB0_2:
105+
; LINUX64-NEXT: bl __stack_chk_fail
106+
; LINUX64-NEXT: nop
107+
;
108+
; AIX32-LABEL: func:
109+
; AIX32: # %bb.0:
110+
; AIX32-NEXT: mflr 0
111+
; AIX32-NEXT: stwu 1, -80(1)
112+
; AIX32-NEXT: stw 0, 88(1)
113+
; AIX32-NEXT: stw 31, 76(1) # 4-byte Folded Spill
114+
; AIX32-NEXT: lwz 31, L..C0(2) # @__ssp_canary_word
115+
; AIX32-NEXT: lwz 3, 0(31)
116+
; AIX32-NEXT: stw 3, 72(1)
117+
; AIX32-NEXT: addi 3, 1, 68
118+
; AIX32-NEXT: bl .capture[PR]
119+
; AIX32-NEXT: nop
120+
; AIX32-NEXT: lwz 3, 0(31)
121+
; AIX32-NEXT: lwz 4, 72(1)
122+
; AIX32-NEXT: cmplw 3, 4
123+
; AIX32-NEXT: bne 0, L..BB0_2
124+
; AIX32-NEXT: # %bb.1:
125+
; AIX32-NEXT: lwz 31, 76(1) # 4-byte Folded Reload
126+
; AIX32-NEXT: addi 1, 1, 80
127+
; AIX32-NEXT: lwz 0, 8(1)
128+
; AIX32-NEXT: mtlr 0
129+
; AIX32-NEXT: blr
130+
; AIX32-NEXT: L..BB0_2:
131+
; AIX32-NEXT: bl .__stack_chk_fail[PR]
132+
; AIX32-NEXT: nop
133+
;
134+
; AIX64-LABEL: func:
135+
; AIX64: # %bb.0:
136+
; AIX64-NEXT: mflr 0
137+
; AIX64-NEXT: stdu 1, -144(1)
138+
; AIX64-NEXT: std 0, 160(1)
139+
; AIX64-NEXT: std 31, 136(1) # 8-byte Folded Spill
140+
; AIX64-NEXT: ld 31, L..C0(2) # @__ssp_canary_word
141+
; AIX64-NEXT: ld 3, 0(31)
142+
; AIX64-NEXT: std 3, 128(1)
143+
; AIX64-NEXT: addi 3, 1, 124
144+
; AIX64-NEXT: bl .capture[PR]
145+
; AIX64-NEXT: nop
146+
; AIX64-NEXT: ld 3, 0(31)
147+
; AIX64-NEXT: ld 4, 128(1)
148+
; AIX64-NEXT: cmpld 3, 4
149+
; AIX64-NEXT: bne 0, L..BB0_2
150+
; AIX64-NEXT: # %bb.1:
151+
; AIX64-NEXT: ld 31, 136(1) # 8-byte Folded Reload
152+
; AIX64-NEXT: addi 1, 1, 144
153+
; AIX64-NEXT: ld 0, 16(1)
154+
; AIX64-NEXT: mtlr 0
155+
; AIX64-NEXT: blr
156+
; AIX64-NEXT: L..BB0_2:
157+
; AIX64-NEXT: bl .__stack_chk_fail[PR]
158+
; AIX64-NEXT: nop
159+
%alloca = alloca i32, align 4
160+
call void @capture(ptr %alloca)
161+
ret void
162+
}
163+
164+
declare void @capture(ptr)

llvm/test/CodeGen/RISCV/stack-protector-target.ll

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
; RUN: llc -mtriple=riscv64-linux < %s | FileCheck --check-prefix=LINUX-RISCV64 %s
66
; RUN: llc -mtriple=riscv64-fuchsia < %s | FileCheck --check-prefix=FUCHSIA-RISCV64 %s
77
; RUN: llc -mtriple=riscv64-android < %s | FileCheck --check-prefix=ANDROID-RISCV64 %s
8+
; RUN: llc -mtriple=riscv64-openbsd < %s | FileCheck --check-prefix=OPENBSD-RISCV64 %s
89

910
define void @func() sspreq nounwind {
1011
; LINUX-RISCV64-LABEL: func:
@@ -63,6 +64,29 @@ define void @func() sspreq nounwind {
6364
; ANDROID-RISCV64-NEXT: ret
6465
; ANDROID-RISCV64-NEXT: .LBB0_2: # %CallStackCheckFailBlk
6566
; ANDROID-RISCV64-NEXT: call __stack_chk_fail
67+
;
68+
; OPENBSD-RISCV64-LABEL: func:
69+
; OPENBSD-RISCV64: # %bb.0:
70+
; OPENBSD-RISCV64-NEXT: addi sp, sp, -32
71+
; OPENBSD-RISCV64-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
72+
; OPENBSD-RISCV64-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
73+
; OPENBSD-RISCV64-NEXT: lui s0, %hi(__guard_local)
74+
; OPENBSD-RISCV64-NEXT: ld a0, %lo(__guard_local)(s0)
75+
; OPENBSD-RISCV64-NEXT: sd a0, 8(sp)
76+
; OPENBSD-RISCV64-NEXT: addi a0, sp, 4
77+
; OPENBSD-RISCV64-NEXT: call capture
78+
; OPENBSD-RISCV64-NEXT: ld a0, %lo(__guard_local)(s0)
79+
; OPENBSD-RISCV64-NEXT: ld a1, 8(sp)
80+
; OPENBSD-RISCV64-NEXT: bne a0, a1, .LBB0_2
81+
; OPENBSD-RISCV64-NEXT: # %bb.1: # %SP_return
82+
; OPENBSD-RISCV64-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
83+
; OPENBSD-RISCV64-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
84+
; OPENBSD-RISCV64-NEXT: addi sp, sp, 32
85+
; OPENBSD-RISCV64-NEXT: ret
86+
; OPENBSD-RISCV64-NEXT: .LBB0_2: # %CallStackCheckFailBlk
87+
; OPENBSD-RISCV64-NEXT: lui a0, %hi(.LSSH)
88+
; OPENBSD-RISCV64-NEXT: addi a0, a0, %lo(.LSSH)
89+
; OPENBSD-RISCV64-NEXT: call __stack_smash_handler
6690
%1 = alloca i32, align 4
6791
call void @capture(ptr %1)
6892
ret void

0 commit comments

Comments
 (0)