Skip to content

RuntimeLibcalls: Add some tests for OpenBSD stack protectors #147888

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

arsenm
Copy link
Contributor

@arsenm arsenm commented Jul 10, 2025

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.

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.
@llvmbot
Copy link
Member

llvmbot commented Jul 10, 2025

@llvm/pr-subscribers-backend-powerpc

Author: Matt Arsenault (arsenm)

Changes

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.


Patch is 24.06 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/147888.diff

6 Files Affected:

  • (added) llvm/test/CodeGen/ARM/stack-protector-target.ll (+68)
  • (added) llvm/test/CodeGen/LoongArch/stack-protector-target.ll (+104)
  • (added) llvm/test/CodeGen/PowerPC/stack-protector-target.ll (+164)
  • (modified) llvm/test/CodeGen/RISCV/stack-protector-target.ll (+24)
  • (added) llvm/test/CodeGen/SPARC/stack-protector-target.ll (+141)
  • (added) llvm/test/CodeGen/X86/stack-protector-target-openbsd.ll (+81)
diff --git a/llvm/test/CodeGen/ARM/stack-protector-target.ll b/llvm/test/CodeGen/ARM/stack-protector-target.ll
new file mode 100644
index 00000000000000..a7ec0ec69bd2c5
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/stack-protector-target.ll
@@ -0,0 +1,68 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=arm-unknown-linux-eabi < %s | FileCheck -check-prefix=LINUX %s
+; RUN: llc -mtriple=arm-unknown-linux-gnueabi < %s | FileCheck -check-prefix=LINUX %s
+; RUN: llc -mtriple=arm-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD %s
+
+define void @func() sspreq nounwind {
+; LINUX-LABEL: func:
+; LINUX:       @ %bb.0:
+; LINUX-NEXT:    .save {r11, lr}
+; LINUX-NEXT:    push {r11, lr}
+; LINUX-NEXT:    .pad #8
+; LINUX-NEXT:    sub sp, sp, #8
+; LINUX-NEXT:    ldr r0, .LCPI0_0
+; LINUX-NEXT:    ldr r0, [r0]
+; LINUX-NEXT:    str r0, [sp, #4]
+; LINUX-NEXT:    mov r0, sp
+; LINUX-NEXT:    bl capture
+; LINUX-NEXT:    ldr r0, [sp, #4]
+; LINUX-NEXT:    ldr r1, .LCPI0_0
+; LINUX-NEXT:    ldr r1, [r1]
+; LINUX-NEXT:    cmp r1, r0
+; LINUX-NEXT:    addeq sp, sp, #8
+; LINUX-NEXT:    popeq {r11, lr}
+; LINUX-NEXT:    moveq pc, lr
+; LINUX-NEXT:  .LBB0_1:
+; LINUX-NEXT:    bl __stack_chk_fail
+; LINUX-NEXT:    .p2align 2
+; LINUX-NEXT:  @ %bb.2:
+; LINUX-NEXT:  .LCPI0_0:
+; LINUX-NEXT:    .long __stack_chk_guard
+;
+; OPENBSD-LABEL: func:
+; OPENBSD:       @ %bb.0:
+; OPENBSD-NEXT:    push {r4, lr}
+; OPENBSD-NEXT:    sub sp, sp, #8
+; OPENBSD-NEXT:    ldr r4, .LCPI0_0
+; OPENBSD-NEXT:    ldr r0, [r4]
+; OPENBSD-NEXT:    ldr r0, .LCPI0_2
+; OPENBSD-NEXT:    ldr r0, [r0]
+; OPENBSD-NEXT:    str r0, [sp, #4]
+; OPENBSD-NEXT:    mov r0, sp
+; OPENBSD-NEXT:    bl capture
+; OPENBSD-NEXT:    ldr r0, [r4]
+; OPENBSD-NEXT:    ldr r1, [sp, #4]
+; OPENBSD-NEXT:    cmp r0, r1
+; OPENBSD-NEXT:    addeq sp, sp, #8
+; OPENBSD-NEXT:    popeq {r4, lr}
+; OPENBSD-NEXT:    moveq pc, lr
+; OPENBSD-NEXT:  .LBB0_1: @ %CallStackCheckFailBlk
+; OPENBSD-NEXT:    ldr r0, .LCPI0_1
+; OPENBSD-NEXT:    bl __stack_smash_handler
+; OPENBSD-NEXT:    .p2align 2
+; OPENBSD-NEXT:  @ %bb.2:
+; OPENBSD-NEXT:  .LCPI0_0:
+; OPENBSD-NEXT:    .long __guard_local
+; OPENBSD-NEXT:  .LCPI0_1:
+; OPENBSD-NEXT:    .long .LSSH
+; OPENBSD-NEXT:  .LCPI0_2:
+; OPENBSD-NEXT:    .long __guard_local
+  %alloca = alloca i32, align 4
+  call void @capture(ptr %alloca)
+  ret void
+}
+
+declare void @capture(ptr)
+;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
+; EABI: {{.*}}
+; GNUEABI: {{.*}}
diff --git a/llvm/test/CodeGen/LoongArch/stack-protector-target.ll b/llvm/test/CodeGen/LoongArch/stack-protector-target.ll
new file mode 100644
index 00000000000000..ea4569e198d02f
--- /dev/null
+++ b/llvm/test/CodeGen/LoongArch/stack-protector-target.ll
@@ -0,0 +1,104 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=loongarch32-linux-gnu < %s | FileCheck -check-prefix=LINUX32 %s
+; RUN: llc -mtriple=loongarch64-linux-gnu < %s | FileCheck -check-prefix=LINUX64 %s
+; RUN: llc -mtriple=loongarch32-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD32 %s
+; RUN: llc -mtriple=loongarch64-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD64 %s
+
+define void @func() sspreq nounwind {
+; LINUX32-LABEL: func:
+; LINUX32:       # %bb.0:
+; LINUX32-NEXT:    addi.w $sp, $sp, -16
+; LINUX32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
+; LINUX32-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill
+; LINUX32-NEXT:    pcalau12i $fp, %pc_hi20(__stack_chk_guard)
+; LINUX32-NEXT:    ld.w $a0, $fp, %pc_lo12(__stack_chk_guard)
+; LINUX32-NEXT:    st.w $a0, $sp, 4
+; LINUX32-NEXT:    addi.w $a0, $sp, 0
+; LINUX32-NEXT:    bl capture
+; LINUX32-NEXT:    ld.w $a0, $fp, %pc_lo12(__stack_chk_guard)
+; LINUX32-NEXT:    ld.w $a1, $sp, 4
+; LINUX32-NEXT:    bne $a0, $a1, .LBB0_2
+; LINUX32-NEXT:  # %bb.1:
+; LINUX32-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload
+; LINUX32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
+; LINUX32-NEXT:    addi.w $sp, $sp, 16
+; LINUX32-NEXT:    ret
+; LINUX32-NEXT:  .LBB0_2:
+; LINUX32-NEXT:    bl __stack_chk_fail
+;
+; LINUX64-LABEL: func:
+; LINUX64:       # %bb.0:
+; LINUX64-NEXT:    addi.d $sp, $sp, -32
+; LINUX64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill
+; LINUX64-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill
+; LINUX64-NEXT:    pcalau12i $fp, %pc_hi20(__stack_chk_guard)
+; LINUX64-NEXT:    ld.d $a0, $fp, %pc_lo12(__stack_chk_guard)
+; LINUX64-NEXT:    st.d $a0, $sp, 8
+; LINUX64-NEXT:    addi.d $a0, $sp, 4
+; LINUX64-NEXT:    pcaddu18i $ra, %call36(capture)
+; LINUX64-NEXT:    jirl $ra, $ra, 0
+; LINUX64-NEXT:    ld.d $a0, $fp, %pc_lo12(__stack_chk_guard)
+; LINUX64-NEXT:    ld.d $a1, $sp, 8
+; LINUX64-NEXT:    bne $a0, $a1, .LBB0_2
+; LINUX64-NEXT:  # %bb.1:
+; LINUX64-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload
+; LINUX64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload
+; LINUX64-NEXT:    addi.d $sp, $sp, 32
+; LINUX64-NEXT:    ret
+; LINUX64-NEXT:  .LBB0_2:
+; LINUX64-NEXT:    pcaddu18i $ra, %call36(__stack_chk_fail)
+; LINUX64-NEXT:    jirl $ra, $ra, 0
+;
+; OPENBSD32-LABEL: func:
+; OPENBSD32:       # %bb.0:
+; OPENBSD32-NEXT:    addi.w $sp, $sp, -16
+; OPENBSD32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
+; OPENBSD32-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill
+; OPENBSD32-NEXT:    pcalau12i $fp, %pc_hi20(__guard_local)
+; OPENBSD32-NEXT:    ld.w $a0, $fp, %pc_lo12(__guard_local)
+; OPENBSD32-NEXT:    st.w $a0, $sp, 4
+; OPENBSD32-NEXT:    addi.w $a0, $sp, 0
+; OPENBSD32-NEXT:    bl capture
+; OPENBSD32-NEXT:    ld.w $a0, $fp, %pc_lo12(__guard_local)
+; OPENBSD32-NEXT:    ld.w $a1, $sp, 4
+; OPENBSD32-NEXT:    bne $a0, $a1, .LBB0_2
+; OPENBSD32-NEXT:  # %bb.1: # %SP_return
+; OPENBSD32-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload
+; OPENBSD32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
+; OPENBSD32-NEXT:    addi.w $sp, $sp, 16
+; OPENBSD32-NEXT:    ret
+; OPENBSD32-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD32-NEXT:    pcalau12i $a0, %pc_hi20(.LSSH)
+; OPENBSD32-NEXT:    addi.w $a0, $a0, %pc_lo12(.LSSH)
+; OPENBSD32-NEXT:    bl __stack_smash_handler
+;
+; OPENBSD64-LABEL: func:
+; OPENBSD64:       # %bb.0:
+; OPENBSD64-NEXT:    addi.d $sp, $sp, -32
+; OPENBSD64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill
+; OPENBSD64-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill
+; OPENBSD64-NEXT:    pcalau12i $fp, %pc_hi20(__guard_local)
+; OPENBSD64-NEXT:    ld.d $a0, $fp, %pc_lo12(__guard_local)
+; OPENBSD64-NEXT:    st.d $a0, $sp, 8
+; OPENBSD64-NEXT:    addi.d $a0, $sp, 4
+; OPENBSD64-NEXT:    pcaddu18i $ra, %call36(capture)
+; OPENBSD64-NEXT:    jirl $ra, $ra, 0
+; OPENBSD64-NEXT:    ld.d $a0, $fp, %pc_lo12(__guard_local)
+; OPENBSD64-NEXT:    ld.d $a1, $sp, 8
+; OPENBSD64-NEXT:    bne $a0, $a1, .LBB0_2
+; OPENBSD64-NEXT:  # %bb.1: # %SP_return
+; OPENBSD64-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload
+; OPENBSD64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload
+; OPENBSD64-NEXT:    addi.d $sp, $sp, 32
+; OPENBSD64-NEXT:    ret
+; OPENBSD64-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD64-NEXT:    pcalau12i $a0, %pc_hi20(.LSSH)
+; OPENBSD64-NEXT:    addi.d $a0, $a0, %pc_lo12(.LSSH)
+; OPENBSD64-NEXT:    pcaddu18i $ra, %call36(__stack_smash_handler)
+; OPENBSD64-NEXT:    jirl $ra, $ra, 0
+  %alloca = alloca i32, align 4
+  call void @capture(ptr %alloca)
+  ret void
+}
+
+declare void @capture(ptr)
diff --git a/llvm/test/CodeGen/PowerPC/stack-protector-target.ll b/llvm/test/CodeGen/PowerPC/stack-protector-target.ll
new file mode 100644
index 00000000000000..03ffa0b4c142b4
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/stack-protector-target.ll
@@ -0,0 +1,164 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=powerpc-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD32 %s
+; RUN: llc -mtriple=powerpc64-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD64 %s
+; RUN: llc -mtriple=powerpc-unknown-linux < %s | FileCheck -check-prefix=LINUX32 %s
+; RUN: llc -mtriple=powerpc64-unknown-linux < %s | FileCheck -check-prefix=LINUX64 %s
+; RUN: llc -mtriple=powerpc-ibm-aix-xcoff < %s | FileCheck -check-prefix=AIX32 %s
+; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff < %s | FileCheck -check-prefix=AIX64 %s
+
+define void @func() sspreq nounwind {
+; OPENBSD32-LABEL: func:
+; OPENBSD32:       # %bb.0:
+; OPENBSD32-NEXT:    mflr 0
+; OPENBSD32-NEXT:    stwu 1, -32(1)
+; OPENBSD32-NEXT:    stw 0, 36(1)
+; OPENBSD32-NEXT:    stw 30, 24(1) # 4-byte Folded Spill
+; OPENBSD32-NEXT:    lis 30, __guard_local@ha
+; OPENBSD32-NEXT:    lwz 3, __guard_local@l(30)
+; OPENBSD32-NEXT:    stw 3, 20(1)
+; OPENBSD32-NEXT:    addi 3, 1, 16
+; OPENBSD32-NEXT:    bl capture
+; OPENBSD32-NEXT:    lwz 3, __guard_local@l(30)
+; OPENBSD32-NEXT:    lwz 4, 20(1)
+; OPENBSD32-NEXT:    cmplw 3, 4
+; OPENBSD32-NEXT:    bne- 0, .LBB0_2
+; OPENBSD32-NEXT:  # %bb.1: # %SP_return
+; OPENBSD32-NEXT:    lwz 30, 24(1) # 4-byte Folded Reload
+; OPENBSD32-NEXT:    lwz 0, 36(1)
+; OPENBSD32-NEXT:    addi 1, 1, 32
+; OPENBSD32-NEXT:    mtlr 0
+; OPENBSD32-NEXT:    blr
+; OPENBSD32-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD32-NEXT:    lis 3, .LSSH@ha
+; OPENBSD32-NEXT:    la 3, .LSSH@l(3)
+; OPENBSD32-NEXT:    bl __stack_smash_handler
+;
+; OPENBSD64-LABEL: func:
+; OPENBSD64:       # %bb.0:
+; OPENBSD64-NEXT:    mflr 0
+; OPENBSD64-NEXT:    std 30, -16(1) # 8-byte Folded Spill
+; OPENBSD64-NEXT:    stdu 1, -64(1)
+; OPENBSD64-NEXT:    std 0, 80(1)
+; OPENBSD64-NEXT:    addis 30, 2, __guard_local@toc@ha
+; OPENBSD64-NEXT:    ld 3, __guard_local@toc@l(30)
+; OPENBSD64-NEXT:    std 3, 40(1)
+; OPENBSD64-NEXT:    addi 3, 1, 36
+; OPENBSD64-NEXT:    bl capture
+; OPENBSD64-NEXT:    nop
+; OPENBSD64-NEXT:    ld 3, __guard_local@toc@l(30)
+; OPENBSD64-NEXT:    ld 4, 40(1)
+; OPENBSD64-NEXT:    cmpld 3, 4
+; OPENBSD64-NEXT:    bne- 0, .LBB0_2
+; OPENBSD64-NEXT:  # %bb.1: # %SP_return
+; OPENBSD64-NEXT:    addi 1, 1, 64
+; OPENBSD64-NEXT:    ld 0, 16(1)
+; OPENBSD64-NEXT:    mtlr 0
+; OPENBSD64-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
+; OPENBSD64-NEXT:    blr
+; OPENBSD64-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD64-NEXT:    addis 3, 2, .LSSH@toc@ha
+; OPENBSD64-NEXT:    addi 3, 3, .LSSH@toc@l
+; OPENBSD64-NEXT:    bl __stack_smash_handler
+; OPENBSD64-NEXT:    nop
+;
+; LINUX32-LABEL: func:
+; LINUX32:       # %bb.0:
+; LINUX32-NEXT:    mflr 0
+; LINUX32-NEXT:    stwu 1, -16(1)
+; LINUX32-NEXT:    stw 0, 20(1)
+; LINUX32-NEXT:    lwz 3, -28680(2)
+; LINUX32-NEXT:    stw 3, 12(1)
+; LINUX32-NEXT:    addi 3, 1, 8
+; LINUX32-NEXT:    bl capture
+; LINUX32-NEXT:    lwz 3, 12(1)
+; LINUX32-NEXT:    lwz 4, -28680(2)
+; LINUX32-NEXT:    cmplw 4, 3
+; LINUX32-NEXT:    bne 0, .LBB0_2
+; LINUX32-NEXT:  # %bb.1:
+; LINUX32-NEXT:    lwz 0, 20(1)
+; LINUX32-NEXT:    addi 1, 1, 16
+; LINUX32-NEXT:    mtlr 0
+; LINUX32-NEXT:    blr
+; LINUX32-NEXT:  .LBB0_2:
+; LINUX32-NEXT:    bl __stack_chk_fail
+;
+; LINUX64-LABEL: func:
+; LINUX64:       # %bb.0:
+; LINUX64-NEXT:    mflr 0
+; LINUX64-NEXT:    stdu 1, -128(1)
+; LINUX64-NEXT:    std 0, 144(1)
+; LINUX64-NEXT:    ld 3, -28688(13)
+; LINUX64-NEXT:    std 3, 120(1)
+; LINUX64-NEXT:    addi 3, 1, 116
+; LINUX64-NEXT:    bl capture
+; LINUX64-NEXT:    nop
+; LINUX64-NEXT:    ld 3, 120(1)
+; LINUX64-NEXT:    ld 4, -28688(13)
+; LINUX64-NEXT:    cmpld 4, 3
+; LINUX64-NEXT:    bne 0, .LBB0_2
+; LINUX64-NEXT:  # %bb.1:
+; LINUX64-NEXT:    addi 1, 1, 128
+; LINUX64-NEXT:    ld 0, 16(1)
+; LINUX64-NEXT:    mtlr 0
+; LINUX64-NEXT:    blr
+; LINUX64-NEXT:  .LBB0_2:
+; LINUX64-NEXT:    bl __stack_chk_fail
+; LINUX64-NEXT:    nop
+;
+; AIX32-LABEL: func:
+; AIX32:       # %bb.0:
+; AIX32-NEXT:    mflr 0
+; AIX32-NEXT:    stwu 1, -80(1)
+; AIX32-NEXT:    stw 0, 88(1)
+; AIX32-NEXT:    stw 31, 76(1) # 4-byte Folded Spill
+; AIX32-NEXT:    lwz 31, L..C0(2) # @__ssp_canary_word
+; AIX32-NEXT:    lwz 3, 0(31)
+; AIX32-NEXT:    stw 3, 72(1)
+; AIX32-NEXT:    addi 3, 1, 68
+; AIX32-NEXT:    bl .capture[PR]
+; AIX32-NEXT:    nop
+; AIX32-NEXT:    lwz 3, 0(31)
+; AIX32-NEXT:    lwz 4, 72(1)
+; AIX32-NEXT:    cmplw 3, 4
+; AIX32-NEXT:    bne 0, L..BB0_2
+; AIX32-NEXT:  # %bb.1:
+; AIX32-NEXT:    lwz 31, 76(1) # 4-byte Folded Reload
+; AIX32-NEXT:    addi 1, 1, 80
+; AIX32-NEXT:    lwz 0, 8(1)
+; AIX32-NEXT:    mtlr 0
+; AIX32-NEXT:    blr
+; AIX32-NEXT:  L..BB0_2:
+; AIX32-NEXT:    bl .__stack_chk_fail[PR]
+; AIX32-NEXT:    nop
+;
+; AIX64-LABEL: func:
+; AIX64:       # %bb.0:
+; AIX64-NEXT:    mflr 0
+; AIX64-NEXT:    stdu 1, -144(1)
+; AIX64-NEXT:    std 0, 160(1)
+; AIX64-NEXT:    std 31, 136(1) # 8-byte Folded Spill
+; AIX64-NEXT:    ld 31, L..C0(2) # @__ssp_canary_word
+; AIX64-NEXT:    ld 3, 0(31)
+; AIX64-NEXT:    std 3, 128(1)
+; AIX64-NEXT:    addi 3, 1, 124
+; AIX64-NEXT:    bl .capture[PR]
+; AIX64-NEXT:    nop
+; AIX64-NEXT:    ld 3, 0(31)
+; AIX64-NEXT:    ld 4, 128(1)
+; AIX64-NEXT:    cmpld 3, 4
+; AIX64-NEXT:    bne 0, L..BB0_2
+; AIX64-NEXT:  # %bb.1:
+; AIX64-NEXT:    ld 31, 136(1) # 8-byte Folded Reload
+; AIX64-NEXT:    addi 1, 1, 144
+; AIX64-NEXT:    ld 0, 16(1)
+; AIX64-NEXT:    mtlr 0
+; AIX64-NEXT:    blr
+; AIX64-NEXT:  L..BB0_2:
+; AIX64-NEXT:    bl .__stack_chk_fail[PR]
+; AIX64-NEXT:    nop
+  %alloca = alloca i32, align 4
+  call void @capture(ptr %alloca)
+  ret void
+}
+
+declare void @capture(ptr)
diff --git a/llvm/test/CodeGen/RISCV/stack-protector-target.ll b/llvm/test/CodeGen/RISCV/stack-protector-target.ll
index a4bd0e9ceac988..b01b044db5d6f6 100644
--- a/llvm/test/CodeGen/RISCV/stack-protector-target.ll
+++ b/llvm/test/CodeGen/RISCV/stack-protector-target.ll
@@ -5,6 +5,7 @@
 ; RUN: llc -mtriple=riscv64-linux < %s | FileCheck --check-prefix=LINUX-RISCV64 %s
 ; RUN: llc -mtriple=riscv64-fuchsia < %s | FileCheck --check-prefix=FUCHSIA-RISCV64 %s
 ; RUN: llc -mtriple=riscv64-android < %s | FileCheck --check-prefix=ANDROID-RISCV64 %s
+; RUN: llc -mtriple=riscv64-openbsd < %s | FileCheck --check-prefix=OPENBSD-RISCV64 %s
 
 define void @func() sspreq nounwind {
 ; LINUX-RISCV64-LABEL: func:
@@ -63,6 +64,29 @@ define void @func() sspreq nounwind {
 ; ANDROID-RISCV64-NEXT:    ret
 ; ANDROID-RISCV64-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
 ; ANDROID-RISCV64-NEXT:    call __stack_chk_fail
+;
+; OPENBSD-RISCV64-LABEL: func:
+; OPENBSD-RISCV64:       # %bb.0:
+; OPENBSD-RISCV64-NEXT:    addi sp, sp, -32
+; OPENBSD-RISCV64-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
+; OPENBSD-RISCV64-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
+; OPENBSD-RISCV64-NEXT:    lui s0, %hi(__guard_local)
+; OPENBSD-RISCV64-NEXT:    ld a0, %lo(__guard_local)(s0)
+; OPENBSD-RISCV64-NEXT:    sd a0, 8(sp)
+; OPENBSD-RISCV64-NEXT:    addi a0, sp, 4
+; OPENBSD-RISCV64-NEXT:    call capture
+; OPENBSD-RISCV64-NEXT:    ld a0, %lo(__guard_local)(s0)
+; OPENBSD-RISCV64-NEXT:    ld a1, 8(sp)
+; OPENBSD-RISCV64-NEXT:    bne a0, a1, .LBB0_2
+; OPENBSD-RISCV64-NEXT:  # %bb.1: # %SP_return
+; OPENBSD-RISCV64-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
+; OPENBSD-RISCV64-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
+; OPENBSD-RISCV64-NEXT:    addi sp, sp, 32
+; OPENBSD-RISCV64-NEXT:    ret
+; OPENBSD-RISCV64-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD-RISCV64-NEXT:    lui a0, %hi(.LSSH)
+; OPENBSD-RISCV64-NEXT:    addi a0, a0, %lo(.LSSH)
+; OPENBSD-RISCV64-NEXT:    call __stack_smash_handler
   %1 = alloca i32, align 4
   call void @capture(ptr %1)
   ret void
diff --git a/llvm/test/CodeGen/SPARC/stack-protector-target.ll b/llvm/test/CodeGen/SPARC/stack-protector-target.ll
new file mode 100644
index 00000000000000..f0e9aa8986ab86
--- /dev/null
+++ b/llvm/test/CodeGen/SPARC/stack-protector-target.ll
@@ -0,0 +1,141 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=sparc-unknown-linux  < %s | FileCheck -check-prefix=LINUX32 %s
+; RUN: llc -mtriple=sparc64-unknown-linux  < %s | FileCheck -check-prefix=LINUX64 %s
+; RUN: llc -mtriple=sparc-unknown-solaris < %s | FileCheck -check-prefixes=SOLARIS32 %s
+; RUN: llc -mtriple=sparc64-unknown-solaris < %s | FileCheck -check-prefixes=SOLARIS64 %s
+; RUN: llc -mtriple=sparc-unknown-openbsd  < %s | FileCheck -check-prefix=OPENBSD32 %s
+; RUN: llc -mtriple=sparc64-unknown-openbsd  < %s | FileCheck -check-prefix=OPENBSD64 %s
+
+define void @func() sspreq nounwind {
+; LINUX32-LABEL: func:
+; LINUX32:       ! %bb.0:
+; LINUX32-NEXT:    save %sp, -104, %sp
+; LINUX32-NEXT:    ld [%g7+20], %i0
+; LINUX32-NEXT:    st %i0, [%fp+-4]
+; LINUX32-NEXT:    call capture
+; LINUX32-NEXT:    add %fp, -8, %o0
+; LINUX32-NEXT:    ld [%fp+-4], %i0
+; LINUX32-NEXT:    ld [%g7+20], %i1
+; LINUX32-NEXT:    cmp %i1, %i0
+; LINUX32-NEXT:    bne .LBB0_2
+; LINUX32-NEXT:    nop
+; LINUX32-NEXT:  ! %bb.1:
+; LINUX32-NEXT:    ret
+; LINUX32-NEXT:    restore
+; LINUX32-NEXT:  .LBB0_2:
+; LINUX32-NEXT:    call __stack_chk_fail
+; LINUX32-NEXT:    nop
+;
+; LINUX64-LABEL: func:
+; LINUX64:         .register %g7, #ignore
+; LINUX64-NEXT:  ! %bb.0:
+; LINUX64-NEXT:    save %sp, -192, %sp
+; LINUX64-NEXT:    ldx [%g7+40], %i0
+; LINUX64-NEXT:    stx %i0, [%fp+2039]
+; LINUX64-NEXT:    call capture
+; LINUX64-NEXT:    add %fp, 2035, %o0
+; LINUX64-NEXT:    ldx [%fp+2039], %i0
+; LINUX64-NEXT:    ldx [%g7+40], %i1
+; LINUX64-NEXT:    cmp %i1, %i0
+; LINUX64-NEXT:    bne %xcc, .LBB0_2
+; LINUX64-NEXT:    nop
+; LINUX64-NEXT:  ! %bb.1:
+; LINUX64-NEXT:    ret
+; LINUX64-NEXT:    restore
+; LINUX64-NEXT:  .LBB0_2:
+; LINUX64-NEXT:    call __stack_chk_fail
+; LINUX64-NEXT:    nop
+;
+; SOLARIS32-LABEL: func:
+; SOLARIS32:       ! %bb.0:
+; SOLARIS32-NEXT:    save %sp, -104, %sp
+; SOLARIS32-NEXT:    sethi %hi(__stack_chk_guard), %i0
+; SOLARIS32-NEXT:    ld [%i0+%lo(__stack_chk_guard)], %i1
+; SOLARIS32-NEXT:    st %i1, [%fp+-4]
+; SOLARIS32-NEXT:    call capture
+; SOLARIS32-NEXT:    add %fp, -8, %o0
+; SOLARIS32-NEXT:    ld [%i0+%lo(__stack_chk_guard)], %i0
+; SOLARIS32-NEXT:    ld [%fp+-4], %i1
+; SOLARIS32-NEXT:    cmp %i0, %i1
+; SOLARIS32-NEXT:    bne .LBB0_2
+; SOLARIS32-NEXT:    nop
+; SOLARIS32-NEXT:  ! %bb.1:
+; SOLARIS32-NEXT:    ret
+; SOLARIS32-NEXT:    restore
+; SOLARIS32-NEXT:  .LBB0_2:
+; SOLARIS32-NEXT:    call __stack_chk_fail
+; SOLARIS32-NEXT:    nop
+;
+; SOLARIS64-LABEL: func:
+; SOLARIS64:       ! %bb.0:
+; SOLARIS64-NEXT:    save %sp, -192, %sp
+; SOLARIS64-NEXT:    sethi %h44(__stack_chk_guard), %i0
+; SOLARIS64-NEXT:    add %i0, %m44(__stack_chk_guard), %i0
+; SOLARIS64-NEXT:    sllx %i0, 12, %i0
+; SOLARIS64-NEXT:    ldx [%i0+%l44(__stack_chk_guard)], %i1
+; SOLARIS64-NEXT:    stx %i1, [%fp+2039]
+; SOLARIS64-NEXT:    call capture
+; SOLARIS64-NEXT:    add %fp, 2035, %o0
+; SOLARIS64-NEXT:    ldx [%i0+%l44(__stack_chk_guard)], %i0
+; SOLARIS64-NEXT:    ldx [%fp+2039], %i1
+; SOLARIS64-NEXT:    cmp %i0, %i1
+; SOLARIS64-NEXT:    bne %xcc, .LBB0_2
+; SOLARIS64-NEXT:    nop
+; SOLARIS64-NEXT:  ! %bb.1:
+; SOLARIS64-NEXT:    ret
+; SOLARIS64-NEXT:    restore
+; SOLARIS64-NEXT:  .LBB0_2:
+; SOLARIS64-NEXT:    call __stack_chk_fail
+; SOLARIS64-NEXT:    nop
+;
+; OPENBSD32-LABEL: func:
+; OPENBSD32:       ! %bb.0:
+; OPENBSD32-NEXT:    save %sp, -104, %sp
+; OPENBSD32-NEXT:    sethi %hi(__guard_local), %i0
+; OPENBSD32-NEXT:    ld [%i0+%lo(__guard_local)], %i1
+; OPENBSD32-NEXT:    st %i1, [%fp+-4]
+; OPENBSD32-NEXT:    call capture
+; OPENBSD32-NEXT:    add %fp, -8, %o0
+; OPENBSD32-NEXT:    ld [%i0+%lo(__guard_local)], %i0
+; OPENBSD32-NEXT:    ld [%fp+-4], %i1
+; OPENBSD32-NEXT:    cmp %i0, %i1
+; OPENBSD32-NEXT:    bne .LBB0_2
+; OPENBSD32-NEXT:    nop
+; OPENBSD32-NEXT:  ! %bb.1: ! %SP_return
+; OPENBSD32-NEXT:    ret
+; OPENBSD32-NEXT:    restore
+; OPENBSD32-NEXT:  .LBB0_2: ! %CallStackCheckFailBlk
+; OPENBSD32-NEXT:    sethi %hi(.LSSH), %i0
+; OPENBSD32-NEXT:    call __stack_smash_handler
+; OPENBSD32-NEXT:    add %i0, %lo(.LSSH), %o0
+;
+; OPENBSD64-LABEL: func:
+; OPENBSD64:       ! %bb.0:
+; OPENBSD64-NEXT:    save %sp, -192, %sp
+; OPENBSD64-NEXT:    sethi %h44(__guard_local), %i0
+; OPENBSD64-NEXT:    add %i0, %m44(__guard_local), %i0
+; OPENBSD64-NEXT:    sllx %i0, 12, %i0
+; OPENBSD64-NEXT:    ldx [%i0+%l44(__guard_local)], %i1
+; OPENBSD64-NEXT:    stx %i1, [%fp+2039]
+; OPENBSD64-NEXT:    call capture
+; OPENBSD...
[truncated]

@llvmbot
Copy link
Member

llvmbot commented Jul 10, 2025

@llvm/pr-subscribers-backend-loongarch

Author: Matt Arsenault (arsenm)

Changes

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.


Patch is 24.06 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/147888.diff

6 Files Affected:

  • (added) llvm/test/CodeGen/ARM/stack-protector-target.ll (+68)
  • (added) llvm/test/CodeGen/LoongArch/stack-protector-target.ll (+104)
  • (added) llvm/test/CodeGen/PowerPC/stack-protector-target.ll (+164)
  • (modified) llvm/test/CodeGen/RISCV/stack-protector-target.ll (+24)
  • (added) llvm/test/CodeGen/SPARC/stack-protector-target.ll (+141)
  • (added) llvm/test/CodeGen/X86/stack-protector-target-openbsd.ll (+81)
diff --git a/llvm/test/CodeGen/ARM/stack-protector-target.ll b/llvm/test/CodeGen/ARM/stack-protector-target.ll
new file mode 100644
index 00000000000000..a7ec0ec69bd2c5
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/stack-protector-target.ll
@@ -0,0 +1,68 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=arm-unknown-linux-eabi < %s | FileCheck -check-prefix=LINUX %s
+; RUN: llc -mtriple=arm-unknown-linux-gnueabi < %s | FileCheck -check-prefix=LINUX %s
+; RUN: llc -mtriple=arm-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD %s
+
+define void @func() sspreq nounwind {
+; LINUX-LABEL: func:
+; LINUX:       @ %bb.0:
+; LINUX-NEXT:    .save {r11, lr}
+; LINUX-NEXT:    push {r11, lr}
+; LINUX-NEXT:    .pad #8
+; LINUX-NEXT:    sub sp, sp, #8
+; LINUX-NEXT:    ldr r0, .LCPI0_0
+; LINUX-NEXT:    ldr r0, [r0]
+; LINUX-NEXT:    str r0, [sp, #4]
+; LINUX-NEXT:    mov r0, sp
+; LINUX-NEXT:    bl capture
+; LINUX-NEXT:    ldr r0, [sp, #4]
+; LINUX-NEXT:    ldr r1, .LCPI0_0
+; LINUX-NEXT:    ldr r1, [r1]
+; LINUX-NEXT:    cmp r1, r0
+; LINUX-NEXT:    addeq sp, sp, #8
+; LINUX-NEXT:    popeq {r11, lr}
+; LINUX-NEXT:    moveq pc, lr
+; LINUX-NEXT:  .LBB0_1:
+; LINUX-NEXT:    bl __stack_chk_fail
+; LINUX-NEXT:    .p2align 2
+; LINUX-NEXT:  @ %bb.2:
+; LINUX-NEXT:  .LCPI0_0:
+; LINUX-NEXT:    .long __stack_chk_guard
+;
+; OPENBSD-LABEL: func:
+; OPENBSD:       @ %bb.0:
+; OPENBSD-NEXT:    push {r4, lr}
+; OPENBSD-NEXT:    sub sp, sp, #8
+; OPENBSD-NEXT:    ldr r4, .LCPI0_0
+; OPENBSD-NEXT:    ldr r0, [r4]
+; OPENBSD-NEXT:    ldr r0, .LCPI0_2
+; OPENBSD-NEXT:    ldr r0, [r0]
+; OPENBSD-NEXT:    str r0, [sp, #4]
+; OPENBSD-NEXT:    mov r0, sp
+; OPENBSD-NEXT:    bl capture
+; OPENBSD-NEXT:    ldr r0, [r4]
+; OPENBSD-NEXT:    ldr r1, [sp, #4]
+; OPENBSD-NEXT:    cmp r0, r1
+; OPENBSD-NEXT:    addeq sp, sp, #8
+; OPENBSD-NEXT:    popeq {r4, lr}
+; OPENBSD-NEXT:    moveq pc, lr
+; OPENBSD-NEXT:  .LBB0_1: @ %CallStackCheckFailBlk
+; OPENBSD-NEXT:    ldr r0, .LCPI0_1
+; OPENBSD-NEXT:    bl __stack_smash_handler
+; OPENBSD-NEXT:    .p2align 2
+; OPENBSD-NEXT:  @ %bb.2:
+; OPENBSD-NEXT:  .LCPI0_0:
+; OPENBSD-NEXT:    .long __guard_local
+; OPENBSD-NEXT:  .LCPI0_1:
+; OPENBSD-NEXT:    .long .LSSH
+; OPENBSD-NEXT:  .LCPI0_2:
+; OPENBSD-NEXT:    .long __guard_local
+  %alloca = alloca i32, align 4
+  call void @capture(ptr %alloca)
+  ret void
+}
+
+declare void @capture(ptr)
+;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
+; EABI: {{.*}}
+; GNUEABI: {{.*}}
diff --git a/llvm/test/CodeGen/LoongArch/stack-protector-target.ll b/llvm/test/CodeGen/LoongArch/stack-protector-target.ll
new file mode 100644
index 00000000000000..ea4569e198d02f
--- /dev/null
+++ b/llvm/test/CodeGen/LoongArch/stack-protector-target.ll
@@ -0,0 +1,104 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=loongarch32-linux-gnu < %s | FileCheck -check-prefix=LINUX32 %s
+; RUN: llc -mtriple=loongarch64-linux-gnu < %s | FileCheck -check-prefix=LINUX64 %s
+; RUN: llc -mtriple=loongarch32-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD32 %s
+; RUN: llc -mtriple=loongarch64-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD64 %s
+
+define void @func() sspreq nounwind {
+; LINUX32-LABEL: func:
+; LINUX32:       # %bb.0:
+; LINUX32-NEXT:    addi.w $sp, $sp, -16
+; LINUX32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
+; LINUX32-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill
+; LINUX32-NEXT:    pcalau12i $fp, %pc_hi20(__stack_chk_guard)
+; LINUX32-NEXT:    ld.w $a0, $fp, %pc_lo12(__stack_chk_guard)
+; LINUX32-NEXT:    st.w $a0, $sp, 4
+; LINUX32-NEXT:    addi.w $a0, $sp, 0
+; LINUX32-NEXT:    bl capture
+; LINUX32-NEXT:    ld.w $a0, $fp, %pc_lo12(__stack_chk_guard)
+; LINUX32-NEXT:    ld.w $a1, $sp, 4
+; LINUX32-NEXT:    bne $a0, $a1, .LBB0_2
+; LINUX32-NEXT:  # %bb.1:
+; LINUX32-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload
+; LINUX32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
+; LINUX32-NEXT:    addi.w $sp, $sp, 16
+; LINUX32-NEXT:    ret
+; LINUX32-NEXT:  .LBB0_2:
+; LINUX32-NEXT:    bl __stack_chk_fail
+;
+; LINUX64-LABEL: func:
+; LINUX64:       # %bb.0:
+; LINUX64-NEXT:    addi.d $sp, $sp, -32
+; LINUX64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill
+; LINUX64-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill
+; LINUX64-NEXT:    pcalau12i $fp, %pc_hi20(__stack_chk_guard)
+; LINUX64-NEXT:    ld.d $a0, $fp, %pc_lo12(__stack_chk_guard)
+; LINUX64-NEXT:    st.d $a0, $sp, 8
+; LINUX64-NEXT:    addi.d $a0, $sp, 4
+; LINUX64-NEXT:    pcaddu18i $ra, %call36(capture)
+; LINUX64-NEXT:    jirl $ra, $ra, 0
+; LINUX64-NEXT:    ld.d $a0, $fp, %pc_lo12(__stack_chk_guard)
+; LINUX64-NEXT:    ld.d $a1, $sp, 8
+; LINUX64-NEXT:    bne $a0, $a1, .LBB0_2
+; LINUX64-NEXT:  # %bb.1:
+; LINUX64-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload
+; LINUX64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload
+; LINUX64-NEXT:    addi.d $sp, $sp, 32
+; LINUX64-NEXT:    ret
+; LINUX64-NEXT:  .LBB0_2:
+; LINUX64-NEXT:    pcaddu18i $ra, %call36(__stack_chk_fail)
+; LINUX64-NEXT:    jirl $ra, $ra, 0
+;
+; OPENBSD32-LABEL: func:
+; OPENBSD32:       # %bb.0:
+; OPENBSD32-NEXT:    addi.w $sp, $sp, -16
+; OPENBSD32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
+; OPENBSD32-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill
+; OPENBSD32-NEXT:    pcalau12i $fp, %pc_hi20(__guard_local)
+; OPENBSD32-NEXT:    ld.w $a0, $fp, %pc_lo12(__guard_local)
+; OPENBSD32-NEXT:    st.w $a0, $sp, 4
+; OPENBSD32-NEXT:    addi.w $a0, $sp, 0
+; OPENBSD32-NEXT:    bl capture
+; OPENBSD32-NEXT:    ld.w $a0, $fp, %pc_lo12(__guard_local)
+; OPENBSD32-NEXT:    ld.w $a1, $sp, 4
+; OPENBSD32-NEXT:    bne $a0, $a1, .LBB0_2
+; OPENBSD32-NEXT:  # %bb.1: # %SP_return
+; OPENBSD32-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload
+; OPENBSD32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
+; OPENBSD32-NEXT:    addi.w $sp, $sp, 16
+; OPENBSD32-NEXT:    ret
+; OPENBSD32-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD32-NEXT:    pcalau12i $a0, %pc_hi20(.LSSH)
+; OPENBSD32-NEXT:    addi.w $a0, $a0, %pc_lo12(.LSSH)
+; OPENBSD32-NEXT:    bl __stack_smash_handler
+;
+; OPENBSD64-LABEL: func:
+; OPENBSD64:       # %bb.0:
+; OPENBSD64-NEXT:    addi.d $sp, $sp, -32
+; OPENBSD64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill
+; OPENBSD64-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill
+; OPENBSD64-NEXT:    pcalau12i $fp, %pc_hi20(__guard_local)
+; OPENBSD64-NEXT:    ld.d $a0, $fp, %pc_lo12(__guard_local)
+; OPENBSD64-NEXT:    st.d $a0, $sp, 8
+; OPENBSD64-NEXT:    addi.d $a0, $sp, 4
+; OPENBSD64-NEXT:    pcaddu18i $ra, %call36(capture)
+; OPENBSD64-NEXT:    jirl $ra, $ra, 0
+; OPENBSD64-NEXT:    ld.d $a0, $fp, %pc_lo12(__guard_local)
+; OPENBSD64-NEXT:    ld.d $a1, $sp, 8
+; OPENBSD64-NEXT:    bne $a0, $a1, .LBB0_2
+; OPENBSD64-NEXT:  # %bb.1: # %SP_return
+; OPENBSD64-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload
+; OPENBSD64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload
+; OPENBSD64-NEXT:    addi.d $sp, $sp, 32
+; OPENBSD64-NEXT:    ret
+; OPENBSD64-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD64-NEXT:    pcalau12i $a0, %pc_hi20(.LSSH)
+; OPENBSD64-NEXT:    addi.d $a0, $a0, %pc_lo12(.LSSH)
+; OPENBSD64-NEXT:    pcaddu18i $ra, %call36(__stack_smash_handler)
+; OPENBSD64-NEXT:    jirl $ra, $ra, 0
+  %alloca = alloca i32, align 4
+  call void @capture(ptr %alloca)
+  ret void
+}
+
+declare void @capture(ptr)
diff --git a/llvm/test/CodeGen/PowerPC/stack-protector-target.ll b/llvm/test/CodeGen/PowerPC/stack-protector-target.ll
new file mode 100644
index 00000000000000..03ffa0b4c142b4
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/stack-protector-target.ll
@@ -0,0 +1,164 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=powerpc-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD32 %s
+; RUN: llc -mtriple=powerpc64-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD64 %s
+; RUN: llc -mtriple=powerpc-unknown-linux < %s | FileCheck -check-prefix=LINUX32 %s
+; RUN: llc -mtriple=powerpc64-unknown-linux < %s | FileCheck -check-prefix=LINUX64 %s
+; RUN: llc -mtriple=powerpc-ibm-aix-xcoff < %s | FileCheck -check-prefix=AIX32 %s
+; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff < %s | FileCheck -check-prefix=AIX64 %s
+
+define void @func() sspreq nounwind {
+; OPENBSD32-LABEL: func:
+; OPENBSD32:       # %bb.0:
+; OPENBSD32-NEXT:    mflr 0
+; OPENBSD32-NEXT:    stwu 1, -32(1)
+; OPENBSD32-NEXT:    stw 0, 36(1)
+; OPENBSD32-NEXT:    stw 30, 24(1) # 4-byte Folded Spill
+; OPENBSD32-NEXT:    lis 30, __guard_local@ha
+; OPENBSD32-NEXT:    lwz 3, __guard_local@l(30)
+; OPENBSD32-NEXT:    stw 3, 20(1)
+; OPENBSD32-NEXT:    addi 3, 1, 16
+; OPENBSD32-NEXT:    bl capture
+; OPENBSD32-NEXT:    lwz 3, __guard_local@l(30)
+; OPENBSD32-NEXT:    lwz 4, 20(1)
+; OPENBSD32-NEXT:    cmplw 3, 4
+; OPENBSD32-NEXT:    bne- 0, .LBB0_2
+; OPENBSD32-NEXT:  # %bb.1: # %SP_return
+; OPENBSD32-NEXT:    lwz 30, 24(1) # 4-byte Folded Reload
+; OPENBSD32-NEXT:    lwz 0, 36(1)
+; OPENBSD32-NEXT:    addi 1, 1, 32
+; OPENBSD32-NEXT:    mtlr 0
+; OPENBSD32-NEXT:    blr
+; OPENBSD32-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD32-NEXT:    lis 3, .LSSH@ha
+; OPENBSD32-NEXT:    la 3, .LSSH@l(3)
+; OPENBSD32-NEXT:    bl __stack_smash_handler
+;
+; OPENBSD64-LABEL: func:
+; OPENBSD64:       # %bb.0:
+; OPENBSD64-NEXT:    mflr 0
+; OPENBSD64-NEXT:    std 30, -16(1) # 8-byte Folded Spill
+; OPENBSD64-NEXT:    stdu 1, -64(1)
+; OPENBSD64-NEXT:    std 0, 80(1)
+; OPENBSD64-NEXT:    addis 30, 2, __guard_local@toc@ha
+; OPENBSD64-NEXT:    ld 3, __guard_local@toc@l(30)
+; OPENBSD64-NEXT:    std 3, 40(1)
+; OPENBSD64-NEXT:    addi 3, 1, 36
+; OPENBSD64-NEXT:    bl capture
+; OPENBSD64-NEXT:    nop
+; OPENBSD64-NEXT:    ld 3, __guard_local@toc@l(30)
+; OPENBSD64-NEXT:    ld 4, 40(1)
+; OPENBSD64-NEXT:    cmpld 3, 4
+; OPENBSD64-NEXT:    bne- 0, .LBB0_2
+; OPENBSD64-NEXT:  # %bb.1: # %SP_return
+; OPENBSD64-NEXT:    addi 1, 1, 64
+; OPENBSD64-NEXT:    ld 0, 16(1)
+; OPENBSD64-NEXT:    mtlr 0
+; OPENBSD64-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
+; OPENBSD64-NEXT:    blr
+; OPENBSD64-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD64-NEXT:    addis 3, 2, .LSSH@toc@ha
+; OPENBSD64-NEXT:    addi 3, 3, .LSSH@toc@l
+; OPENBSD64-NEXT:    bl __stack_smash_handler
+; OPENBSD64-NEXT:    nop
+;
+; LINUX32-LABEL: func:
+; LINUX32:       # %bb.0:
+; LINUX32-NEXT:    mflr 0
+; LINUX32-NEXT:    stwu 1, -16(1)
+; LINUX32-NEXT:    stw 0, 20(1)
+; LINUX32-NEXT:    lwz 3, -28680(2)
+; LINUX32-NEXT:    stw 3, 12(1)
+; LINUX32-NEXT:    addi 3, 1, 8
+; LINUX32-NEXT:    bl capture
+; LINUX32-NEXT:    lwz 3, 12(1)
+; LINUX32-NEXT:    lwz 4, -28680(2)
+; LINUX32-NEXT:    cmplw 4, 3
+; LINUX32-NEXT:    bne 0, .LBB0_2
+; LINUX32-NEXT:  # %bb.1:
+; LINUX32-NEXT:    lwz 0, 20(1)
+; LINUX32-NEXT:    addi 1, 1, 16
+; LINUX32-NEXT:    mtlr 0
+; LINUX32-NEXT:    blr
+; LINUX32-NEXT:  .LBB0_2:
+; LINUX32-NEXT:    bl __stack_chk_fail
+;
+; LINUX64-LABEL: func:
+; LINUX64:       # %bb.0:
+; LINUX64-NEXT:    mflr 0
+; LINUX64-NEXT:    stdu 1, -128(1)
+; LINUX64-NEXT:    std 0, 144(1)
+; LINUX64-NEXT:    ld 3, -28688(13)
+; LINUX64-NEXT:    std 3, 120(1)
+; LINUX64-NEXT:    addi 3, 1, 116
+; LINUX64-NEXT:    bl capture
+; LINUX64-NEXT:    nop
+; LINUX64-NEXT:    ld 3, 120(1)
+; LINUX64-NEXT:    ld 4, -28688(13)
+; LINUX64-NEXT:    cmpld 4, 3
+; LINUX64-NEXT:    bne 0, .LBB0_2
+; LINUX64-NEXT:  # %bb.1:
+; LINUX64-NEXT:    addi 1, 1, 128
+; LINUX64-NEXT:    ld 0, 16(1)
+; LINUX64-NEXT:    mtlr 0
+; LINUX64-NEXT:    blr
+; LINUX64-NEXT:  .LBB0_2:
+; LINUX64-NEXT:    bl __stack_chk_fail
+; LINUX64-NEXT:    nop
+;
+; AIX32-LABEL: func:
+; AIX32:       # %bb.0:
+; AIX32-NEXT:    mflr 0
+; AIX32-NEXT:    stwu 1, -80(1)
+; AIX32-NEXT:    stw 0, 88(1)
+; AIX32-NEXT:    stw 31, 76(1) # 4-byte Folded Spill
+; AIX32-NEXT:    lwz 31, L..C0(2) # @__ssp_canary_word
+; AIX32-NEXT:    lwz 3, 0(31)
+; AIX32-NEXT:    stw 3, 72(1)
+; AIX32-NEXT:    addi 3, 1, 68
+; AIX32-NEXT:    bl .capture[PR]
+; AIX32-NEXT:    nop
+; AIX32-NEXT:    lwz 3, 0(31)
+; AIX32-NEXT:    lwz 4, 72(1)
+; AIX32-NEXT:    cmplw 3, 4
+; AIX32-NEXT:    bne 0, L..BB0_2
+; AIX32-NEXT:  # %bb.1:
+; AIX32-NEXT:    lwz 31, 76(1) # 4-byte Folded Reload
+; AIX32-NEXT:    addi 1, 1, 80
+; AIX32-NEXT:    lwz 0, 8(1)
+; AIX32-NEXT:    mtlr 0
+; AIX32-NEXT:    blr
+; AIX32-NEXT:  L..BB0_2:
+; AIX32-NEXT:    bl .__stack_chk_fail[PR]
+; AIX32-NEXT:    nop
+;
+; AIX64-LABEL: func:
+; AIX64:       # %bb.0:
+; AIX64-NEXT:    mflr 0
+; AIX64-NEXT:    stdu 1, -144(1)
+; AIX64-NEXT:    std 0, 160(1)
+; AIX64-NEXT:    std 31, 136(1) # 8-byte Folded Spill
+; AIX64-NEXT:    ld 31, L..C0(2) # @__ssp_canary_word
+; AIX64-NEXT:    ld 3, 0(31)
+; AIX64-NEXT:    std 3, 128(1)
+; AIX64-NEXT:    addi 3, 1, 124
+; AIX64-NEXT:    bl .capture[PR]
+; AIX64-NEXT:    nop
+; AIX64-NEXT:    ld 3, 0(31)
+; AIX64-NEXT:    ld 4, 128(1)
+; AIX64-NEXT:    cmpld 3, 4
+; AIX64-NEXT:    bne 0, L..BB0_2
+; AIX64-NEXT:  # %bb.1:
+; AIX64-NEXT:    ld 31, 136(1) # 8-byte Folded Reload
+; AIX64-NEXT:    addi 1, 1, 144
+; AIX64-NEXT:    ld 0, 16(1)
+; AIX64-NEXT:    mtlr 0
+; AIX64-NEXT:    blr
+; AIX64-NEXT:  L..BB0_2:
+; AIX64-NEXT:    bl .__stack_chk_fail[PR]
+; AIX64-NEXT:    nop
+  %alloca = alloca i32, align 4
+  call void @capture(ptr %alloca)
+  ret void
+}
+
+declare void @capture(ptr)
diff --git a/llvm/test/CodeGen/RISCV/stack-protector-target.ll b/llvm/test/CodeGen/RISCV/stack-protector-target.ll
index a4bd0e9ceac988..b01b044db5d6f6 100644
--- a/llvm/test/CodeGen/RISCV/stack-protector-target.ll
+++ b/llvm/test/CodeGen/RISCV/stack-protector-target.ll
@@ -5,6 +5,7 @@
 ; RUN: llc -mtriple=riscv64-linux < %s | FileCheck --check-prefix=LINUX-RISCV64 %s
 ; RUN: llc -mtriple=riscv64-fuchsia < %s | FileCheck --check-prefix=FUCHSIA-RISCV64 %s
 ; RUN: llc -mtriple=riscv64-android < %s | FileCheck --check-prefix=ANDROID-RISCV64 %s
+; RUN: llc -mtriple=riscv64-openbsd < %s | FileCheck --check-prefix=OPENBSD-RISCV64 %s
 
 define void @func() sspreq nounwind {
 ; LINUX-RISCV64-LABEL: func:
@@ -63,6 +64,29 @@ define void @func() sspreq nounwind {
 ; ANDROID-RISCV64-NEXT:    ret
 ; ANDROID-RISCV64-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
 ; ANDROID-RISCV64-NEXT:    call __stack_chk_fail
+;
+; OPENBSD-RISCV64-LABEL: func:
+; OPENBSD-RISCV64:       # %bb.0:
+; OPENBSD-RISCV64-NEXT:    addi sp, sp, -32
+; OPENBSD-RISCV64-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
+; OPENBSD-RISCV64-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
+; OPENBSD-RISCV64-NEXT:    lui s0, %hi(__guard_local)
+; OPENBSD-RISCV64-NEXT:    ld a0, %lo(__guard_local)(s0)
+; OPENBSD-RISCV64-NEXT:    sd a0, 8(sp)
+; OPENBSD-RISCV64-NEXT:    addi a0, sp, 4
+; OPENBSD-RISCV64-NEXT:    call capture
+; OPENBSD-RISCV64-NEXT:    ld a0, %lo(__guard_local)(s0)
+; OPENBSD-RISCV64-NEXT:    ld a1, 8(sp)
+; OPENBSD-RISCV64-NEXT:    bne a0, a1, .LBB0_2
+; OPENBSD-RISCV64-NEXT:  # %bb.1: # %SP_return
+; OPENBSD-RISCV64-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
+; OPENBSD-RISCV64-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
+; OPENBSD-RISCV64-NEXT:    addi sp, sp, 32
+; OPENBSD-RISCV64-NEXT:    ret
+; OPENBSD-RISCV64-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD-RISCV64-NEXT:    lui a0, %hi(.LSSH)
+; OPENBSD-RISCV64-NEXT:    addi a0, a0, %lo(.LSSH)
+; OPENBSD-RISCV64-NEXT:    call __stack_smash_handler
   %1 = alloca i32, align 4
   call void @capture(ptr %1)
   ret void
diff --git a/llvm/test/CodeGen/SPARC/stack-protector-target.ll b/llvm/test/CodeGen/SPARC/stack-protector-target.ll
new file mode 100644
index 00000000000000..f0e9aa8986ab86
--- /dev/null
+++ b/llvm/test/CodeGen/SPARC/stack-protector-target.ll
@@ -0,0 +1,141 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=sparc-unknown-linux  < %s | FileCheck -check-prefix=LINUX32 %s
+; RUN: llc -mtriple=sparc64-unknown-linux  < %s | FileCheck -check-prefix=LINUX64 %s
+; RUN: llc -mtriple=sparc-unknown-solaris < %s | FileCheck -check-prefixes=SOLARIS32 %s
+; RUN: llc -mtriple=sparc64-unknown-solaris < %s | FileCheck -check-prefixes=SOLARIS64 %s
+; RUN: llc -mtriple=sparc-unknown-openbsd  < %s | FileCheck -check-prefix=OPENBSD32 %s
+; RUN: llc -mtriple=sparc64-unknown-openbsd  < %s | FileCheck -check-prefix=OPENBSD64 %s
+
+define void @func() sspreq nounwind {
+; LINUX32-LABEL: func:
+; LINUX32:       ! %bb.0:
+; LINUX32-NEXT:    save %sp, -104, %sp
+; LINUX32-NEXT:    ld [%g7+20], %i0
+; LINUX32-NEXT:    st %i0, [%fp+-4]
+; LINUX32-NEXT:    call capture
+; LINUX32-NEXT:    add %fp, -8, %o0
+; LINUX32-NEXT:    ld [%fp+-4], %i0
+; LINUX32-NEXT:    ld [%g7+20], %i1
+; LINUX32-NEXT:    cmp %i1, %i0
+; LINUX32-NEXT:    bne .LBB0_2
+; LINUX32-NEXT:    nop
+; LINUX32-NEXT:  ! %bb.1:
+; LINUX32-NEXT:    ret
+; LINUX32-NEXT:    restore
+; LINUX32-NEXT:  .LBB0_2:
+; LINUX32-NEXT:    call __stack_chk_fail
+; LINUX32-NEXT:    nop
+;
+; LINUX64-LABEL: func:
+; LINUX64:         .register %g7, #ignore
+; LINUX64-NEXT:  ! %bb.0:
+; LINUX64-NEXT:    save %sp, -192, %sp
+; LINUX64-NEXT:    ldx [%g7+40], %i0
+; LINUX64-NEXT:    stx %i0, [%fp+2039]
+; LINUX64-NEXT:    call capture
+; LINUX64-NEXT:    add %fp, 2035, %o0
+; LINUX64-NEXT:    ldx [%fp+2039], %i0
+; LINUX64-NEXT:    ldx [%g7+40], %i1
+; LINUX64-NEXT:    cmp %i1, %i0
+; LINUX64-NEXT:    bne %xcc, .LBB0_2
+; LINUX64-NEXT:    nop
+; LINUX64-NEXT:  ! %bb.1:
+; LINUX64-NEXT:    ret
+; LINUX64-NEXT:    restore
+; LINUX64-NEXT:  .LBB0_2:
+; LINUX64-NEXT:    call __stack_chk_fail
+; LINUX64-NEXT:    nop
+;
+; SOLARIS32-LABEL: func:
+; SOLARIS32:       ! %bb.0:
+; SOLARIS32-NEXT:    save %sp, -104, %sp
+; SOLARIS32-NEXT:    sethi %hi(__stack_chk_guard), %i0
+; SOLARIS32-NEXT:    ld [%i0+%lo(__stack_chk_guard)], %i1
+; SOLARIS32-NEXT:    st %i1, [%fp+-4]
+; SOLARIS32-NEXT:    call capture
+; SOLARIS32-NEXT:    add %fp, -8, %o0
+; SOLARIS32-NEXT:    ld [%i0+%lo(__stack_chk_guard)], %i0
+; SOLARIS32-NEXT:    ld [%fp+-4], %i1
+; SOLARIS32-NEXT:    cmp %i0, %i1
+; SOLARIS32-NEXT:    bne .LBB0_2
+; SOLARIS32-NEXT:    nop
+; SOLARIS32-NEXT:  ! %bb.1:
+; SOLARIS32-NEXT:    ret
+; SOLARIS32-NEXT:    restore
+; SOLARIS32-NEXT:  .LBB0_2:
+; SOLARIS32-NEXT:    call __stack_chk_fail
+; SOLARIS32-NEXT:    nop
+;
+; SOLARIS64-LABEL: func:
+; SOLARIS64:       ! %bb.0:
+; SOLARIS64-NEXT:    save %sp, -192, %sp
+; SOLARIS64-NEXT:    sethi %h44(__stack_chk_guard), %i0
+; SOLARIS64-NEXT:    add %i0, %m44(__stack_chk_guard), %i0
+; SOLARIS64-NEXT:    sllx %i0, 12, %i0
+; SOLARIS64-NEXT:    ldx [%i0+%l44(__stack_chk_guard)], %i1
+; SOLARIS64-NEXT:    stx %i1, [%fp+2039]
+; SOLARIS64-NEXT:    call capture
+; SOLARIS64-NEXT:    add %fp, 2035, %o0
+; SOLARIS64-NEXT:    ldx [%i0+%l44(__stack_chk_guard)], %i0
+; SOLARIS64-NEXT:    ldx [%fp+2039], %i1
+; SOLARIS64-NEXT:    cmp %i0, %i1
+; SOLARIS64-NEXT:    bne %xcc, .LBB0_2
+; SOLARIS64-NEXT:    nop
+; SOLARIS64-NEXT:  ! %bb.1:
+; SOLARIS64-NEXT:    ret
+; SOLARIS64-NEXT:    restore
+; SOLARIS64-NEXT:  .LBB0_2:
+; SOLARIS64-NEXT:    call __stack_chk_fail
+; SOLARIS64-NEXT:    nop
+;
+; OPENBSD32-LABEL: func:
+; OPENBSD32:       ! %bb.0:
+; OPENBSD32-NEXT:    save %sp, -104, %sp
+; OPENBSD32-NEXT:    sethi %hi(__guard_local), %i0
+; OPENBSD32-NEXT:    ld [%i0+%lo(__guard_local)], %i1
+; OPENBSD32-NEXT:    st %i1, [%fp+-4]
+; OPENBSD32-NEXT:    call capture
+; OPENBSD32-NEXT:    add %fp, -8, %o0
+; OPENBSD32-NEXT:    ld [%i0+%lo(__guard_local)], %i0
+; OPENBSD32-NEXT:    ld [%fp+-4], %i1
+; OPENBSD32-NEXT:    cmp %i0, %i1
+; OPENBSD32-NEXT:    bne .LBB0_2
+; OPENBSD32-NEXT:    nop
+; OPENBSD32-NEXT:  ! %bb.1: ! %SP_return
+; OPENBSD32-NEXT:    ret
+; OPENBSD32-NEXT:    restore
+; OPENBSD32-NEXT:  .LBB0_2: ! %CallStackCheckFailBlk
+; OPENBSD32-NEXT:    sethi %hi(.LSSH), %i0
+; OPENBSD32-NEXT:    call __stack_smash_handler
+; OPENBSD32-NEXT:    add %i0, %lo(.LSSH), %o0
+;
+; OPENBSD64-LABEL: func:
+; OPENBSD64:       ! %bb.0:
+; OPENBSD64-NEXT:    save %sp, -192, %sp
+; OPENBSD64-NEXT:    sethi %h44(__guard_local), %i0
+; OPENBSD64-NEXT:    add %i0, %m44(__guard_local), %i0
+; OPENBSD64-NEXT:    sllx %i0, 12, %i0
+; OPENBSD64-NEXT:    ldx [%i0+%l44(__guard_local)], %i1
+; OPENBSD64-NEXT:    stx %i1, [%fp+2039]
+; OPENBSD64-NEXT:    call capture
+; OPENBSD...
[truncated]

@llvmbot
Copy link
Member

llvmbot commented Jul 10, 2025

@llvm/pr-subscribers-backend-arm

Author: Matt Arsenault (arsenm)

Changes

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.


Patch is 24.05 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/147888.diff

6 Files Affected:

  • (added) llvm/test/CodeGen/ARM/stack-protector-target.ll (+68)
  • (added) llvm/test/CodeGen/LoongArch/stack-protector-target.ll (+104)
  • (added) llvm/test/CodeGen/PowerPC/stack-protector-target.ll (+164)
  • (modified) llvm/test/CodeGen/RISCV/stack-protector-target.ll (+24)
  • (added) llvm/test/CodeGen/SPARC/stack-protector-target.ll (+141)
  • (added) llvm/test/CodeGen/X86/stack-protector-target-openbsd.ll (+81)
diff --git a/llvm/test/CodeGen/ARM/stack-protector-target.ll b/llvm/test/CodeGen/ARM/stack-protector-target.ll
new file mode 100644
index 0000000000000..a7ec0ec69bd2c
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/stack-protector-target.ll
@@ -0,0 +1,68 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=arm-unknown-linux-eabi < %s | FileCheck -check-prefix=LINUX %s
+; RUN: llc -mtriple=arm-unknown-linux-gnueabi < %s | FileCheck -check-prefix=LINUX %s
+; RUN: llc -mtriple=arm-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD %s
+
+define void @func() sspreq nounwind {
+; LINUX-LABEL: func:
+; LINUX:       @ %bb.0:
+; LINUX-NEXT:    .save {r11, lr}
+; LINUX-NEXT:    push {r11, lr}
+; LINUX-NEXT:    .pad #8
+; LINUX-NEXT:    sub sp, sp, #8
+; LINUX-NEXT:    ldr r0, .LCPI0_0
+; LINUX-NEXT:    ldr r0, [r0]
+; LINUX-NEXT:    str r0, [sp, #4]
+; LINUX-NEXT:    mov r0, sp
+; LINUX-NEXT:    bl capture
+; LINUX-NEXT:    ldr r0, [sp, #4]
+; LINUX-NEXT:    ldr r1, .LCPI0_0
+; LINUX-NEXT:    ldr r1, [r1]
+; LINUX-NEXT:    cmp r1, r0
+; LINUX-NEXT:    addeq sp, sp, #8
+; LINUX-NEXT:    popeq {r11, lr}
+; LINUX-NEXT:    moveq pc, lr
+; LINUX-NEXT:  .LBB0_1:
+; LINUX-NEXT:    bl __stack_chk_fail
+; LINUX-NEXT:    .p2align 2
+; LINUX-NEXT:  @ %bb.2:
+; LINUX-NEXT:  .LCPI0_0:
+; LINUX-NEXT:    .long __stack_chk_guard
+;
+; OPENBSD-LABEL: func:
+; OPENBSD:       @ %bb.0:
+; OPENBSD-NEXT:    push {r4, lr}
+; OPENBSD-NEXT:    sub sp, sp, #8
+; OPENBSD-NEXT:    ldr r4, .LCPI0_0
+; OPENBSD-NEXT:    ldr r0, [r4]
+; OPENBSD-NEXT:    ldr r0, .LCPI0_2
+; OPENBSD-NEXT:    ldr r0, [r0]
+; OPENBSD-NEXT:    str r0, [sp, #4]
+; OPENBSD-NEXT:    mov r0, sp
+; OPENBSD-NEXT:    bl capture
+; OPENBSD-NEXT:    ldr r0, [r4]
+; OPENBSD-NEXT:    ldr r1, [sp, #4]
+; OPENBSD-NEXT:    cmp r0, r1
+; OPENBSD-NEXT:    addeq sp, sp, #8
+; OPENBSD-NEXT:    popeq {r4, lr}
+; OPENBSD-NEXT:    moveq pc, lr
+; OPENBSD-NEXT:  .LBB0_1: @ %CallStackCheckFailBlk
+; OPENBSD-NEXT:    ldr r0, .LCPI0_1
+; OPENBSD-NEXT:    bl __stack_smash_handler
+; OPENBSD-NEXT:    .p2align 2
+; OPENBSD-NEXT:  @ %bb.2:
+; OPENBSD-NEXT:  .LCPI0_0:
+; OPENBSD-NEXT:    .long __guard_local
+; OPENBSD-NEXT:  .LCPI0_1:
+; OPENBSD-NEXT:    .long .LSSH
+; OPENBSD-NEXT:  .LCPI0_2:
+; OPENBSD-NEXT:    .long __guard_local
+  %alloca = alloca i32, align 4
+  call void @capture(ptr %alloca)
+  ret void
+}
+
+declare void @capture(ptr)
+;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
+; EABI: {{.*}}
+; GNUEABI: {{.*}}
diff --git a/llvm/test/CodeGen/LoongArch/stack-protector-target.ll b/llvm/test/CodeGen/LoongArch/stack-protector-target.ll
new file mode 100644
index 0000000000000..ea4569e198d02
--- /dev/null
+++ b/llvm/test/CodeGen/LoongArch/stack-protector-target.ll
@@ -0,0 +1,104 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=loongarch32-linux-gnu < %s | FileCheck -check-prefix=LINUX32 %s
+; RUN: llc -mtriple=loongarch64-linux-gnu < %s | FileCheck -check-prefix=LINUX64 %s
+; RUN: llc -mtriple=loongarch32-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD32 %s
+; RUN: llc -mtriple=loongarch64-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD64 %s
+
+define void @func() sspreq nounwind {
+; LINUX32-LABEL: func:
+; LINUX32:       # %bb.0:
+; LINUX32-NEXT:    addi.w $sp, $sp, -16
+; LINUX32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
+; LINUX32-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill
+; LINUX32-NEXT:    pcalau12i $fp, %pc_hi20(__stack_chk_guard)
+; LINUX32-NEXT:    ld.w $a0, $fp, %pc_lo12(__stack_chk_guard)
+; LINUX32-NEXT:    st.w $a0, $sp, 4
+; LINUX32-NEXT:    addi.w $a0, $sp, 0
+; LINUX32-NEXT:    bl capture
+; LINUX32-NEXT:    ld.w $a0, $fp, %pc_lo12(__stack_chk_guard)
+; LINUX32-NEXT:    ld.w $a1, $sp, 4
+; LINUX32-NEXT:    bne $a0, $a1, .LBB0_2
+; LINUX32-NEXT:  # %bb.1:
+; LINUX32-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload
+; LINUX32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
+; LINUX32-NEXT:    addi.w $sp, $sp, 16
+; LINUX32-NEXT:    ret
+; LINUX32-NEXT:  .LBB0_2:
+; LINUX32-NEXT:    bl __stack_chk_fail
+;
+; LINUX64-LABEL: func:
+; LINUX64:       # %bb.0:
+; LINUX64-NEXT:    addi.d $sp, $sp, -32
+; LINUX64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill
+; LINUX64-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill
+; LINUX64-NEXT:    pcalau12i $fp, %pc_hi20(__stack_chk_guard)
+; LINUX64-NEXT:    ld.d $a0, $fp, %pc_lo12(__stack_chk_guard)
+; LINUX64-NEXT:    st.d $a0, $sp, 8
+; LINUX64-NEXT:    addi.d $a0, $sp, 4
+; LINUX64-NEXT:    pcaddu18i $ra, %call36(capture)
+; LINUX64-NEXT:    jirl $ra, $ra, 0
+; LINUX64-NEXT:    ld.d $a0, $fp, %pc_lo12(__stack_chk_guard)
+; LINUX64-NEXT:    ld.d $a1, $sp, 8
+; LINUX64-NEXT:    bne $a0, $a1, .LBB0_2
+; LINUX64-NEXT:  # %bb.1:
+; LINUX64-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload
+; LINUX64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload
+; LINUX64-NEXT:    addi.d $sp, $sp, 32
+; LINUX64-NEXT:    ret
+; LINUX64-NEXT:  .LBB0_2:
+; LINUX64-NEXT:    pcaddu18i $ra, %call36(__stack_chk_fail)
+; LINUX64-NEXT:    jirl $ra, $ra, 0
+;
+; OPENBSD32-LABEL: func:
+; OPENBSD32:       # %bb.0:
+; OPENBSD32-NEXT:    addi.w $sp, $sp, -16
+; OPENBSD32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
+; OPENBSD32-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill
+; OPENBSD32-NEXT:    pcalau12i $fp, %pc_hi20(__guard_local)
+; OPENBSD32-NEXT:    ld.w $a0, $fp, %pc_lo12(__guard_local)
+; OPENBSD32-NEXT:    st.w $a0, $sp, 4
+; OPENBSD32-NEXT:    addi.w $a0, $sp, 0
+; OPENBSD32-NEXT:    bl capture
+; OPENBSD32-NEXT:    ld.w $a0, $fp, %pc_lo12(__guard_local)
+; OPENBSD32-NEXT:    ld.w $a1, $sp, 4
+; OPENBSD32-NEXT:    bne $a0, $a1, .LBB0_2
+; OPENBSD32-NEXT:  # %bb.1: # %SP_return
+; OPENBSD32-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload
+; OPENBSD32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
+; OPENBSD32-NEXT:    addi.w $sp, $sp, 16
+; OPENBSD32-NEXT:    ret
+; OPENBSD32-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD32-NEXT:    pcalau12i $a0, %pc_hi20(.LSSH)
+; OPENBSD32-NEXT:    addi.w $a0, $a0, %pc_lo12(.LSSH)
+; OPENBSD32-NEXT:    bl __stack_smash_handler
+;
+; OPENBSD64-LABEL: func:
+; OPENBSD64:       # %bb.0:
+; OPENBSD64-NEXT:    addi.d $sp, $sp, -32
+; OPENBSD64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill
+; OPENBSD64-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill
+; OPENBSD64-NEXT:    pcalau12i $fp, %pc_hi20(__guard_local)
+; OPENBSD64-NEXT:    ld.d $a0, $fp, %pc_lo12(__guard_local)
+; OPENBSD64-NEXT:    st.d $a0, $sp, 8
+; OPENBSD64-NEXT:    addi.d $a0, $sp, 4
+; OPENBSD64-NEXT:    pcaddu18i $ra, %call36(capture)
+; OPENBSD64-NEXT:    jirl $ra, $ra, 0
+; OPENBSD64-NEXT:    ld.d $a0, $fp, %pc_lo12(__guard_local)
+; OPENBSD64-NEXT:    ld.d $a1, $sp, 8
+; OPENBSD64-NEXT:    bne $a0, $a1, .LBB0_2
+; OPENBSD64-NEXT:  # %bb.1: # %SP_return
+; OPENBSD64-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload
+; OPENBSD64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload
+; OPENBSD64-NEXT:    addi.d $sp, $sp, 32
+; OPENBSD64-NEXT:    ret
+; OPENBSD64-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD64-NEXT:    pcalau12i $a0, %pc_hi20(.LSSH)
+; OPENBSD64-NEXT:    addi.d $a0, $a0, %pc_lo12(.LSSH)
+; OPENBSD64-NEXT:    pcaddu18i $ra, %call36(__stack_smash_handler)
+; OPENBSD64-NEXT:    jirl $ra, $ra, 0
+  %alloca = alloca i32, align 4
+  call void @capture(ptr %alloca)
+  ret void
+}
+
+declare void @capture(ptr)
diff --git a/llvm/test/CodeGen/PowerPC/stack-protector-target.ll b/llvm/test/CodeGen/PowerPC/stack-protector-target.ll
new file mode 100644
index 0000000000000..03ffa0b4c142b
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/stack-protector-target.ll
@@ -0,0 +1,164 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=powerpc-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD32 %s
+; RUN: llc -mtriple=powerpc64-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD64 %s
+; RUN: llc -mtriple=powerpc-unknown-linux < %s | FileCheck -check-prefix=LINUX32 %s
+; RUN: llc -mtriple=powerpc64-unknown-linux < %s | FileCheck -check-prefix=LINUX64 %s
+; RUN: llc -mtriple=powerpc-ibm-aix-xcoff < %s | FileCheck -check-prefix=AIX32 %s
+; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff < %s | FileCheck -check-prefix=AIX64 %s
+
+define void @func() sspreq nounwind {
+; OPENBSD32-LABEL: func:
+; OPENBSD32:       # %bb.0:
+; OPENBSD32-NEXT:    mflr 0
+; OPENBSD32-NEXT:    stwu 1, -32(1)
+; OPENBSD32-NEXT:    stw 0, 36(1)
+; OPENBSD32-NEXT:    stw 30, 24(1) # 4-byte Folded Spill
+; OPENBSD32-NEXT:    lis 30, __guard_local@ha
+; OPENBSD32-NEXT:    lwz 3, __guard_local@l(30)
+; OPENBSD32-NEXT:    stw 3, 20(1)
+; OPENBSD32-NEXT:    addi 3, 1, 16
+; OPENBSD32-NEXT:    bl capture
+; OPENBSD32-NEXT:    lwz 3, __guard_local@l(30)
+; OPENBSD32-NEXT:    lwz 4, 20(1)
+; OPENBSD32-NEXT:    cmplw 3, 4
+; OPENBSD32-NEXT:    bne- 0, .LBB0_2
+; OPENBSD32-NEXT:  # %bb.1: # %SP_return
+; OPENBSD32-NEXT:    lwz 30, 24(1) # 4-byte Folded Reload
+; OPENBSD32-NEXT:    lwz 0, 36(1)
+; OPENBSD32-NEXT:    addi 1, 1, 32
+; OPENBSD32-NEXT:    mtlr 0
+; OPENBSD32-NEXT:    blr
+; OPENBSD32-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD32-NEXT:    lis 3, .LSSH@ha
+; OPENBSD32-NEXT:    la 3, .LSSH@l(3)
+; OPENBSD32-NEXT:    bl __stack_smash_handler
+;
+; OPENBSD64-LABEL: func:
+; OPENBSD64:       # %bb.0:
+; OPENBSD64-NEXT:    mflr 0
+; OPENBSD64-NEXT:    std 30, -16(1) # 8-byte Folded Spill
+; OPENBSD64-NEXT:    stdu 1, -64(1)
+; OPENBSD64-NEXT:    std 0, 80(1)
+; OPENBSD64-NEXT:    addis 30, 2, __guard_local@toc@ha
+; OPENBSD64-NEXT:    ld 3, __guard_local@toc@l(30)
+; OPENBSD64-NEXT:    std 3, 40(1)
+; OPENBSD64-NEXT:    addi 3, 1, 36
+; OPENBSD64-NEXT:    bl capture
+; OPENBSD64-NEXT:    nop
+; OPENBSD64-NEXT:    ld 3, __guard_local@toc@l(30)
+; OPENBSD64-NEXT:    ld 4, 40(1)
+; OPENBSD64-NEXT:    cmpld 3, 4
+; OPENBSD64-NEXT:    bne- 0, .LBB0_2
+; OPENBSD64-NEXT:  # %bb.1: # %SP_return
+; OPENBSD64-NEXT:    addi 1, 1, 64
+; OPENBSD64-NEXT:    ld 0, 16(1)
+; OPENBSD64-NEXT:    mtlr 0
+; OPENBSD64-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
+; OPENBSD64-NEXT:    blr
+; OPENBSD64-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD64-NEXT:    addis 3, 2, .LSSH@toc@ha
+; OPENBSD64-NEXT:    addi 3, 3, .LSSH@toc@l
+; OPENBSD64-NEXT:    bl __stack_smash_handler
+; OPENBSD64-NEXT:    nop
+;
+; LINUX32-LABEL: func:
+; LINUX32:       # %bb.0:
+; LINUX32-NEXT:    mflr 0
+; LINUX32-NEXT:    stwu 1, -16(1)
+; LINUX32-NEXT:    stw 0, 20(1)
+; LINUX32-NEXT:    lwz 3, -28680(2)
+; LINUX32-NEXT:    stw 3, 12(1)
+; LINUX32-NEXT:    addi 3, 1, 8
+; LINUX32-NEXT:    bl capture
+; LINUX32-NEXT:    lwz 3, 12(1)
+; LINUX32-NEXT:    lwz 4, -28680(2)
+; LINUX32-NEXT:    cmplw 4, 3
+; LINUX32-NEXT:    bne 0, .LBB0_2
+; LINUX32-NEXT:  # %bb.1:
+; LINUX32-NEXT:    lwz 0, 20(1)
+; LINUX32-NEXT:    addi 1, 1, 16
+; LINUX32-NEXT:    mtlr 0
+; LINUX32-NEXT:    blr
+; LINUX32-NEXT:  .LBB0_2:
+; LINUX32-NEXT:    bl __stack_chk_fail
+;
+; LINUX64-LABEL: func:
+; LINUX64:       # %bb.0:
+; LINUX64-NEXT:    mflr 0
+; LINUX64-NEXT:    stdu 1, -128(1)
+; LINUX64-NEXT:    std 0, 144(1)
+; LINUX64-NEXT:    ld 3, -28688(13)
+; LINUX64-NEXT:    std 3, 120(1)
+; LINUX64-NEXT:    addi 3, 1, 116
+; LINUX64-NEXT:    bl capture
+; LINUX64-NEXT:    nop
+; LINUX64-NEXT:    ld 3, 120(1)
+; LINUX64-NEXT:    ld 4, -28688(13)
+; LINUX64-NEXT:    cmpld 4, 3
+; LINUX64-NEXT:    bne 0, .LBB0_2
+; LINUX64-NEXT:  # %bb.1:
+; LINUX64-NEXT:    addi 1, 1, 128
+; LINUX64-NEXT:    ld 0, 16(1)
+; LINUX64-NEXT:    mtlr 0
+; LINUX64-NEXT:    blr
+; LINUX64-NEXT:  .LBB0_2:
+; LINUX64-NEXT:    bl __stack_chk_fail
+; LINUX64-NEXT:    nop
+;
+; AIX32-LABEL: func:
+; AIX32:       # %bb.0:
+; AIX32-NEXT:    mflr 0
+; AIX32-NEXT:    stwu 1, -80(1)
+; AIX32-NEXT:    stw 0, 88(1)
+; AIX32-NEXT:    stw 31, 76(1) # 4-byte Folded Spill
+; AIX32-NEXT:    lwz 31, L..C0(2) # @__ssp_canary_word
+; AIX32-NEXT:    lwz 3, 0(31)
+; AIX32-NEXT:    stw 3, 72(1)
+; AIX32-NEXT:    addi 3, 1, 68
+; AIX32-NEXT:    bl .capture[PR]
+; AIX32-NEXT:    nop
+; AIX32-NEXT:    lwz 3, 0(31)
+; AIX32-NEXT:    lwz 4, 72(1)
+; AIX32-NEXT:    cmplw 3, 4
+; AIX32-NEXT:    bne 0, L..BB0_2
+; AIX32-NEXT:  # %bb.1:
+; AIX32-NEXT:    lwz 31, 76(1) # 4-byte Folded Reload
+; AIX32-NEXT:    addi 1, 1, 80
+; AIX32-NEXT:    lwz 0, 8(1)
+; AIX32-NEXT:    mtlr 0
+; AIX32-NEXT:    blr
+; AIX32-NEXT:  L..BB0_2:
+; AIX32-NEXT:    bl .__stack_chk_fail[PR]
+; AIX32-NEXT:    nop
+;
+; AIX64-LABEL: func:
+; AIX64:       # %bb.0:
+; AIX64-NEXT:    mflr 0
+; AIX64-NEXT:    stdu 1, -144(1)
+; AIX64-NEXT:    std 0, 160(1)
+; AIX64-NEXT:    std 31, 136(1) # 8-byte Folded Spill
+; AIX64-NEXT:    ld 31, L..C0(2) # @__ssp_canary_word
+; AIX64-NEXT:    ld 3, 0(31)
+; AIX64-NEXT:    std 3, 128(1)
+; AIX64-NEXT:    addi 3, 1, 124
+; AIX64-NEXT:    bl .capture[PR]
+; AIX64-NEXT:    nop
+; AIX64-NEXT:    ld 3, 0(31)
+; AIX64-NEXT:    ld 4, 128(1)
+; AIX64-NEXT:    cmpld 3, 4
+; AIX64-NEXT:    bne 0, L..BB0_2
+; AIX64-NEXT:  # %bb.1:
+; AIX64-NEXT:    ld 31, 136(1) # 8-byte Folded Reload
+; AIX64-NEXT:    addi 1, 1, 144
+; AIX64-NEXT:    ld 0, 16(1)
+; AIX64-NEXT:    mtlr 0
+; AIX64-NEXT:    blr
+; AIX64-NEXT:  L..BB0_2:
+; AIX64-NEXT:    bl .__stack_chk_fail[PR]
+; AIX64-NEXT:    nop
+  %alloca = alloca i32, align 4
+  call void @capture(ptr %alloca)
+  ret void
+}
+
+declare void @capture(ptr)
diff --git a/llvm/test/CodeGen/RISCV/stack-protector-target.ll b/llvm/test/CodeGen/RISCV/stack-protector-target.ll
index a4bd0e9ceac98..b01b044db5d6f 100644
--- a/llvm/test/CodeGen/RISCV/stack-protector-target.ll
+++ b/llvm/test/CodeGen/RISCV/stack-protector-target.ll
@@ -5,6 +5,7 @@
 ; RUN: llc -mtriple=riscv64-linux < %s | FileCheck --check-prefix=LINUX-RISCV64 %s
 ; RUN: llc -mtriple=riscv64-fuchsia < %s | FileCheck --check-prefix=FUCHSIA-RISCV64 %s
 ; RUN: llc -mtriple=riscv64-android < %s | FileCheck --check-prefix=ANDROID-RISCV64 %s
+; RUN: llc -mtriple=riscv64-openbsd < %s | FileCheck --check-prefix=OPENBSD-RISCV64 %s
 
 define void @func() sspreq nounwind {
 ; LINUX-RISCV64-LABEL: func:
@@ -63,6 +64,29 @@ define void @func() sspreq nounwind {
 ; ANDROID-RISCV64-NEXT:    ret
 ; ANDROID-RISCV64-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
 ; ANDROID-RISCV64-NEXT:    call __stack_chk_fail
+;
+; OPENBSD-RISCV64-LABEL: func:
+; OPENBSD-RISCV64:       # %bb.0:
+; OPENBSD-RISCV64-NEXT:    addi sp, sp, -32
+; OPENBSD-RISCV64-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
+; OPENBSD-RISCV64-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
+; OPENBSD-RISCV64-NEXT:    lui s0, %hi(__guard_local)
+; OPENBSD-RISCV64-NEXT:    ld a0, %lo(__guard_local)(s0)
+; OPENBSD-RISCV64-NEXT:    sd a0, 8(sp)
+; OPENBSD-RISCV64-NEXT:    addi a0, sp, 4
+; OPENBSD-RISCV64-NEXT:    call capture
+; OPENBSD-RISCV64-NEXT:    ld a0, %lo(__guard_local)(s0)
+; OPENBSD-RISCV64-NEXT:    ld a1, 8(sp)
+; OPENBSD-RISCV64-NEXT:    bne a0, a1, .LBB0_2
+; OPENBSD-RISCV64-NEXT:  # %bb.1: # %SP_return
+; OPENBSD-RISCV64-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
+; OPENBSD-RISCV64-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
+; OPENBSD-RISCV64-NEXT:    addi sp, sp, 32
+; OPENBSD-RISCV64-NEXT:    ret
+; OPENBSD-RISCV64-NEXT:  .LBB0_2: # %CallStackCheckFailBlk
+; OPENBSD-RISCV64-NEXT:    lui a0, %hi(.LSSH)
+; OPENBSD-RISCV64-NEXT:    addi a0, a0, %lo(.LSSH)
+; OPENBSD-RISCV64-NEXT:    call __stack_smash_handler
   %1 = alloca i32, align 4
   call void @capture(ptr %1)
   ret void
diff --git a/llvm/test/CodeGen/SPARC/stack-protector-target.ll b/llvm/test/CodeGen/SPARC/stack-protector-target.ll
new file mode 100644
index 0000000000000..f0e9aa8986ab8
--- /dev/null
+++ b/llvm/test/CodeGen/SPARC/stack-protector-target.ll
@@ -0,0 +1,141 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=sparc-unknown-linux  < %s | FileCheck -check-prefix=LINUX32 %s
+; RUN: llc -mtriple=sparc64-unknown-linux  < %s | FileCheck -check-prefix=LINUX64 %s
+; RUN: llc -mtriple=sparc-unknown-solaris < %s | FileCheck -check-prefixes=SOLARIS32 %s
+; RUN: llc -mtriple=sparc64-unknown-solaris < %s | FileCheck -check-prefixes=SOLARIS64 %s
+; RUN: llc -mtriple=sparc-unknown-openbsd  < %s | FileCheck -check-prefix=OPENBSD32 %s
+; RUN: llc -mtriple=sparc64-unknown-openbsd  < %s | FileCheck -check-prefix=OPENBSD64 %s
+
+define void @func() sspreq nounwind {
+; LINUX32-LABEL: func:
+; LINUX32:       ! %bb.0:
+; LINUX32-NEXT:    save %sp, -104, %sp
+; LINUX32-NEXT:    ld [%g7+20], %i0
+; LINUX32-NEXT:    st %i0, [%fp+-4]
+; LINUX32-NEXT:    call capture
+; LINUX32-NEXT:    add %fp, -8, %o0
+; LINUX32-NEXT:    ld [%fp+-4], %i0
+; LINUX32-NEXT:    ld [%g7+20], %i1
+; LINUX32-NEXT:    cmp %i1, %i0
+; LINUX32-NEXT:    bne .LBB0_2
+; LINUX32-NEXT:    nop
+; LINUX32-NEXT:  ! %bb.1:
+; LINUX32-NEXT:    ret
+; LINUX32-NEXT:    restore
+; LINUX32-NEXT:  .LBB0_2:
+; LINUX32-NEXT:    call __stack_chk_fail
+; LINUX32-NEXT:    nop
+;
+; LINUX64-LABEL: func:
+; LINUX64:         .register %g7, #ignore
+; LINUX64-NEXT:  ! %bb.0:
+; LINUX64-NEXT:    save %sp, -192, %sp
+; LINUX64-NEXT:    ldx [%g7+40], %i0
+; LINUX64-NEXT:    stx %i0, [%fp+2039]
+; LINUX64-NEXT:    call capture
+; LINUX64-NEXT:    add %fp, 2035, %o0
+; LINUX64-NEXT:    ldx [%fp+2039], %i0
+; LINUX64-NEXT:    ldx [%g7+40], %i1
+; LINUX64-NEXT:    cmp %i1, %i0
+; LINUX64-NEXT:    bne %xcc, .LBB0_2
+; LINUX64-NEXT:    nop
+; LINUX64-NEXT:  ! %bb.1:
+; LINUX64-NEXT:    ret
+; LINUX64-NEXT:    restore
+; LINUX64-NEXT:  .LBB0_2:
+; LINUX64-NEXT:    call __stack_chk_fail
+; LINUX64-NEXT:    nop
+;
+; SOLARIS32-LABEL: func:
+; SOLARIS32:       ! %bb.0:
+; SOLARIS32-NEXT:    save %sp, -104, %sp
+; SOLARIS32-NEXT:    sethi %hi(__stack_chk_guard), %i0
+; SOLARIS32-NEXT:    ld [%i0+%lo(__stack_chk_guard)], %i1
+; SOLARIS32-NEXT:    st %i1, [%fp+-4]
+; SOLARIS32-NEXT:    call capture
+; SOLARIS32-NEXT:    add %fp, -8, %o0
+; SOLARIS32-NEXT:    ld [%i0+%lo(__stack_chk_guard)], %i0
+; SOLARIS32-NEXT:    ld [%fp+-4], %i1
+; SOLARIS32-NEXT:    cmp %i0, %i1
+; SOLARIS32-NEXT:    bne .LBB0_2
+; SOLARIS32-NEXT:    nop
+; SOLARIS32-NEXT:  ! %bb.1:
+; SOLARIS32-NEXT:    ret
+; SOLARIS32-NEXT:    restore
+; SOLARIS32-NEXT:  .LBB0_2:
+; SOLARIS32-NEXT:    call __stack_chk_fail
+; SOLARIS32-NEXT:    nop
+;
+; SOLARIS64-LABEL: func:
+; SOLARIS64:       ! %bb.0:
+; SOLARIS64-NEXT:    save %sp, -192, %sp
+; SOLARIS64-NEXT:    sethi %h44(__stack_chk_guard), %i0
+; SOLARIS64-NEXT:    add %i0, %m44(__stack_chk_guard), %i0
+; SOLARIS64-NEXT:    sllx %i0, 12, %i0
+; SOLARIS64-NEXT:    ldx [%i0+%l44(__stack_chk_guard)], %i1
+; SOLARIS64-NEXT:    stx %i1, [%fp+2039]
+; SOLARIS64-NEXT:    call capture
+; SOLARIS64-NEXT:    add %fp, 2035, %o0
+; SOLARIS64-NEXT:    ldx [%i0+%l44(__stack_chk_guard)], %i0
+; SOLARIS64-NEXT:    ldx [%fp+2039], %i1
+; SOLARIS64-NEXT:    cmp %i0, %i1
+; SOLARIS64-NEXT:    bne %xcc, .LBB0_2
+; SOLARIS64-NEXT:    nop
+; SOLARIS64-NEXT:  ! %bb.1:
+; SOLARIS64-NEXT:    ret
+; SOLARIS64-NEXT:    restore
+; SOLARIS64-NEXT:  .LBB0_2:
+; SOLARIS64-NEXT:    call __stack_chk_fail
+; SOLARIS64-NEXT:    nop
+;
+; OPENBSD32-LABEL: func:
+; OPENBSD32:       ! %bb.0:
+; OPENBSD32-NEXT:    save %sp, -104, %sp
+; OPENBSD32-NEXT:    sethi %hi(__guard_local), %i0
+; OPENBSD32-NEXT:    ld [%i0+%lo(__guard_local)], %i1
+; OPENBSD32-NEXT:    st %i1, [%fp+-4]
+; OPENBSD32-NEXT:    call capture
+; OPENBSD32-NEXT:    add %fp, -8, %o0
+; OPENBSD32-NEXT:    ld [%i0+%lo(__guard_local)], %i0
+; OPENBSD32-NEXT:    ld [%fp+-4], %i1
+; OPENBSD32-NEXT:    cmp %i0, %i1
+; OPENBSD32-NEXT:    bne .LBB0_2
+; OPENBSD32-NEXT:    nop
+; OPENBSD32-NEXT:  ! %bb.1: ! %SP_return
+; OPENBSD32-NEXT:    ret
+; OPENBSD32-NEXT:    restore
+; OPENBSD32-NEXT:  .LBB0_2: ! %CallStackCheckFailBlk
+; OPENBSD32-NEXT:    sethi %hi(.LSSH), %i0
+; OPENBSD32-NEXT:    call __stack_smash_handler
+; OPENBSD32-NEXT:    add %i0, %lo(.LSSH), %o0
+;
+; OPENBSD64-LABEL: func:
+; OPENBSD64:       ! %bb.0:
+; OPENBSD64-NEXT:    save %sp, -192, %sp
+; OPENBSD64-NEXT:    sethi %h44(__guard_local), %i0
+; OPENBSD64-NEXT:    add %i0, %m44(__guard_local), %i0
+; OPENBSD64-NEXT:    sllx %i0, 12, %i0
+; OPENBSD64-NEXT:    ldx [%i0+%l44(__guard_local)], %i1
+; OPENBSD64-NEXT:    stx %i1, [%fp+2039]
+; OPENBSD64-NEXT:    call capture
+; OPENBSD64-NEXT:  ...
[truncated]

Copy link
Contributor

@ilovepi ilovepi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Contributor Author

arsenm commented Jul 15, 2025

Merge activity

  • Jul 15, 6:49 AM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Jul 15, 6:50 AM UTC: @arsenm merged this pull request with Graphite.

@arsenm arsenm merged commit 3d50e1f into main Jul 15, 2025
16 of 17 checks passed
@arsenm arsenm deleted the users/arsenm/runtime-libcalls/add-openbsd-stack-protector-tests branch July 15, 2025 06:50
@llvm-ci
Copy link
Collaborator

llvm-ci commented Jul 15, 2025

LLVM Buildbot has detected a new failure on builder clang-hip-vega20 running on hip-vega20-0 while building llvm at step 3 "annotate".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/123/builds/23368

Here is the relevant piece of the build log for the reference
Step 3 (annotate) failure: '../llvm-zorg/zorg/buildbot/builders/annotated/hip-build.sh --jobs=' (failure)
...
[57/59] Linking CXX executable External/HIP/cmath-hip-6.3.0
[58/59] Building CXX object External/HIP/CMakeFiles/TheNextWeek-hip-6.3.0.dir/workload/ray-tracing/TheNextWeek/main.cc.o
[59/59] Linking CXX executable External/HIP/TheNextWeek-hip-6.3.0
@@@BUILD_STEP Testing HIP test-suite@@@
+ build_step 'Testing HIP test-suite'
+ echo '@@@BUILD_STEP Testing HIP test-suite@@@'
+ ninja check-hip-simple
[0/1] cd /home/botworker/bbot/clang-hip-vega20/botworker/clang-hip-vega20/test-suite-build/External/HIP && /home/botworker/bbot/clang-hip-vega20/botworker/clang-hip-vega20/llvm/bin/llvm-lit -sv array-hip-6.3.0.test empty-hip-6.3.0.test with-fopenmp-hip-6.3.0.test saxpy-hip-6.3.0.test memmove-hip-6.3.0.test split-kernel-args-hip-6.3.0.test builtin-logb-scalbn-hip-6.3.0.test TheNextWeek-hip-6.3.0.test algorithm-hip-6.3.0.test cmath-hip-6.3.0.test complex-hip-6.3.0.test math_h-hip-6.3.0.test new-hip-6.3.0.test blender.test
-- Testing: 14 tests, 14 workers --
Testing:  0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90
FAIL: test-suite :: External/HIP/blender.test (14 of 14)
******************** TEST 'test-suite :: External/HIP/blender.test' FAILED ********************

/home/botworker/bbot/clang-hip-vega20/botworker/clang-hip-vega20/test-suite-build/tools/timeit-target --timeout 7200 --limit-core 0 --limit-cpu 7200 --limit-file-size 209715200 --limit-rss-size 838860800 --append-exitstatus --redirect-output /home/botworker/bbot/clang-hip-vega20/botworker/clang-hip-vega20/test-suite-build/External/HIP/Output/blender.test.out --redirect-input /dev/null --summary /home/botworker/bbot/clang-hip-vega20/botworker/clang-hip-vega20/test-suite-build/External/HIP/Output/blender.test.time /bin/bash test_blender.sh
/bin/bash verify_blender.sh /home/botworker/bbot/clang-hip-vega20/botworker/clang-hip-vega20/test-suite-build/External/HIP/Output/blender.test.out
Begin Blender test.
TEST_SUITE_HIP_ROOT=/opt/botworker/llvm/External/hip
Render /opt/botworker/llvm/External/hip/Blender_Scenes/290skydemo_release.blend
Blender 4.1.1 (hash e1743a0317bc built 2024-04-15 23:47:45)
Read blend: "/opt/botworker/llvm/External/hip/Blender_Scenes/290skydemo_release.blend"
Could not open as Ogawa file from provided streams.
Unable to open /opt/botworker/llvm/External/hip/Blender_Scenes/290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.002", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.003", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.004", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.001", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
Could not open as Ogawa file from provided streams.
Unable to open /opt/botworker/llvm/External/hip/Blender_Scenes/290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.003", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.004", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.001", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.002", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
I0715 06:56:58.827813 139656 device.cpp:39] HIPEW initialization succeeded
I0715 06:56:58.829917 139656 device.cpp:45] Found HIPCC hipcc
I0715 06:56:58.899204 139656 device.cpp:207] Device has compute preemption or is not used for display.
I0715 06:56:58.899312 139656 device.cpp:211] Added device "" with id "HIP__0000:a3:00".
I0715 06:56:58.899397 139656 device.cpp:568] Mapped host memory limit set to 536,444,985,344 bytes. (499.60G)
I0715 06:56:58.899643 139656 device_impl.cpp:63] Using AVX2 CPU kernels.
Fra:1 Mem:524.00M (Peak 524.70M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Eyepiece_rim
Fra:1 Mem:524.00M (Peak 524.70M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Rivets.019
Fra:1 Mem:524.02M (Peak 524.70M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Curve_Cables.004
Fra:1 Mem:524.19M (Peak 524.70M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Rivets.021
Fra:1 Mem:525.65M (Peak 525.65M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Curve_Wires
Fra:1 Mem:525.69M (Peak 525.69M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Rivets.022
Fra:1 Mem:525.91M (Peak 525.91M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Rivets.023
Fra:1 Mem:526.09M (Peak 526.09M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Rivets.026
Fra:1 Mem:526.44M (Peak 526.44M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Curve_wires
Step 12 (Testing HIP test-suite) failure: Testing HIP test-suite (failure)
@@@BUILD_STEP Testing HIP test-suite@@@
+ build_step 'Testing HIP test-suite'
+ echo '@@@BUILD_STEP Testing HIP test-suite@@@'
+ ninja check-hip-simple
[0/1] cd /home/botworker/bbot/clang-hip-vega20/botworker/clang-hip-vega20/test-suite-build/External/HIP && /home/botworker/bbot/clang-hip-vega20/botworker/clang-hip-vega20/llvm/bin/llvm-lit -sv array-hip-6.3.0.test empty-hip-6.3.0.test with-fopenmp-hip-6.3.0.test saxpy-hip-6.3.0.test memmove-hip-6.3.0.test split-kernel-args-hip-6.3.0.test builtin-logb-scalbn-hip-6.3.0.test TheNextWeek-hip-6.3.0.test algorithm-hip-6.3.0.test cmath-hip-6.3.0.test complex-hip-6.3.0.test math_h-hip-6.3.0.test new-hip-6.3.0.test blender.test
-- Testing: 14 tests, 14 workers --
Testing:  0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90
FAIL: test-suite :: External/HIP/blender.test (14 of 14)
******************** TEST 'test-suite :: External/HIP/blender.test' FAILED ********************

/home/botworker/bbot/clang-hip-vega20/botworker/clang-hip-vega20/test-suite-build/tools/timeit-target --timeout 7200 --limit-core 0 --limit-cpu 7200 --limit-file-size 209715200 --limit-rss-size 838860800 --append-exitstatus --redirect-output /home/botworker/bbot/clang-hip-vega20/botworker/clang-hip-vega20/test-suite-build/External/HIP/Output/blender.test.out --redirect-input /dev/null --summary /home/botworker/bbot/clang-hip-vega20/botworker/clang-hip-vega20/test-suite-build/External/HIP/Output/blender.test.time /bin/bash test_blender.sh
/bin/bash verify_blender.sh /home/botworker/bbot/clang-hip-vega20/botworker/clang-hip-vega20/test-suite-build/External/HIP/Output/blender.test.out
Begin Blender test.
TEST_SUITE_HIP_ROOT=/opt/botworker/llvm/External/hip
Render /opt/botworker/llvm/External/hip/Blender_Scenes/290skydemo_release.blend
Blender 4.1.1 (hash e1743a0317bc built 2024-04-15 23:47:45)
Read blend: "/opt/botworker/llvm/External/hip/Blender_Scenes/290skydemo_release.blend"
Could not open as Ogawa file from provided streams.
Unable to open /opt/botworker/llvm/External/hip/Blender_Scenes/290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.002", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.003", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.004", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.001", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
Could not open as Ogawa file from provided streams.
Unable to open /opt/botworker/llvm/External/hip/Blender_Scenes/290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.003", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.004", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.001", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
WARN (bke.modifier): source/blender/blenkernel/intern/modifier.cc:425 BKE_modifier_set_error: Object: "GEO-flag.002", Modifier: "MeshSequenceCache", Could not create reader for file //290skydemo2_flags.abc
I0715 06:56:58.827813 139656 device.cpp:39] HIPEW initialization succeeded
I0715 06:56:58.829917 139656 device.cpp:45] Found HIPCC hipcc
I0715 06:56:58.899204 139656 device.cpp:207] Device has compute preemption or is not used for display.
I0715 06:56:58.899312 139656 device.cpp:211] Added device "" with id "HIP__0000:a3:00".
I0715 06:56:58.899397 139656 device.cpp:568] Mapped host memory limit set to 536,444,985,344 bytes. (499.60G)
I0715 06:56:58.899643 139656 device_impl.cpp:63] Using AVX2 CPU kernels.
Fra:1 Mem:524.00M (Peak 524.70M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Eyepiece_rim
Fra:1 Mem:524.00M (Peak 524.70M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Rivets.019
Fra:1 Mem:524.02M (Peak 524.70M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Curve_Cables.004
Fra:1 Mem:524.19M (Peak 524.70M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Rivets.021
Fra:1 Mem:525.65M (Peak 525.65M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Curve_Wires
Fra:1 Mem:525.69M (Peak 525.69M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Rivets.022
Fra:1 Mem:525.91M (Peak 525.91M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Rivets.023
Fra:1 Mem:526.09M (Peak 526.09M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Rivets.026
Fra:1 Mem:526.44M (Peak 526.44M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Curve_wires
Fra:1 Mem:526.66M (Peak 526.66M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Hoses.003
Fra:1 Mem:527.40M (Peak 527.40M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Curve_Connectors
Fra:1 Mem:527.45M (Peak 527.56M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | GEO-Curve_Connectors.001
Fra:1 Mem:528.03M (Peak 528.03M) | Time:00:00.74 | Mem:0.00M, Peak:0.00M | Scene, View Layer | Synchronizing object | ENV-fog

@llvm-ci
Copy link
Collaborator

llvm-ci commented Jul 15, 2025

LLVM Buildbot has detected a new failure on builder lldb-remote-linux-ubuntu running on as-builder-9 while building llvm at step 16 "test-check-lldb-api".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/195/builds/11853

Here is the relevant piece of the build log for the reference
Step 16 (test-check-lldb-api) failure: Test just built components: check-lldb-api completed (failure)
******************** TEST 'lldb-api :: functionalities/thread/concurrent_events/TestConcurrentManyCrash.py' FAILED ********************
Script:
--
/usr/bin/python3.12 /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/llvm-project/lldb/test/API/dotest.py -u CXXFLAGS -u CFLAGS --env LLVM_LIBS_DIR=/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./lib --env LLVM_INCLUDE_DIR=/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/include --env LLVM_TOOLS_DIR=/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./bin --libcxx-include-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/include/c++/v1 --libcxx-include-target-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/include/aarch64-unknown-linux-gnu/c++/v1 --libcxx-library-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./lib/aarch64-unknown-linux-gnu --arch aarch64 --build-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/lldb-test-build.noindex --lldb-module-cache-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/lldb-test-build.noindex/module-cache-lldb/lldb-api --clang-module-cache-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/lldb-test-build.noindex/module-cache-clang/lldb-api --executable /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./bin/lldb --compiler /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/bin/clang --dsymutil /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./bin/dsymutil --make /usr/bin/gmake --llvm-tools-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./bin --lldb-obj-root /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/tools/lldb --lldb-libs-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./lib --cmake-build-type Release --platform-url connect://jetson-agx-2198.lab.llvm.org:1234 --platform-working-dir /home/ubuntu/lldb-tests --sysroot /mnt/fs/jetson-agx-ubuntu --env ARCH_CFLAGS=-mcpu=cortex-a78 --platform-name remote-linux --skip-category=lldb-server /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/llvm-project/lldb/test/API/functionalities/thread/concurrent_events -p TestConcurrentManyCrash.py
--
Exit Code: 1

Command Output (stdout):
--
lldb version 21.0.0git (https://github.com/llvm/llvm-project.git revision 3d50e1f3e83eaa77a09ab8336fac45a52ee9c1e5)
  clang revision 3d50e1f3e83eaa77a09ab8336fac45a52ee9c1e5
  llvm revision 3d50e1f3e83eaa77a09ab8336fac45a52ee9c1e5
Setting up remote platform 'remote-linux'
Connecting to remote platform 'remote-linux' at 'connect://jetson-agx-2198.lab.llvm.org:1234'...
Connected.
Setting remote platform working directory to '/home/ubuntu/lldb-tests'...
Skipping the following test categories: ['lldb-server', 'msvcstl', 'dsym', 'gmodules', 'debugserver', 'objc', 'lldb-dap']

--
Command Output (stderr):
--
WARNING:root:Custom libc++ is not supported for remote runs: ignoring --libcxx arguments
FAIL: LLDB (/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/bin/clang-aarch64) :: test (TestConcurrentManyCrash.ConcurrentManyCrash.test)
======================================================================
FAIL: test (TestConcurrentManyCrash.ConcurrentManyCrash.test)
   Test 100 threads that cause a segfault.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/llvm-project/lldb/packages/Python/lldbsuite/test/decorators.py", line 149, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/llvm-project/lldb/test/API/functionalities/thread/concurrent_events/TestConcurrentManyCrash.py", line 13, in test
    self.do_thread_actions(num_crash_threads=100)
  File "/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/llvm-project/lldb/packages/Python/lldbsuite/test/concurrent_base.py", line 225, in do_thread_actions
    self.assertEqual(
AssertionError: 1 != 101 : Expected to see 101 threads, but seeing 1. Details:
thread 1 running due to none at
	
Config=aarch64-/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/bin/clang
----------------------------------------------------------------------
Ran 1 test in 10.567s

FAILED (failures=1)

--

********************


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants