https://github.com/arsenm updated 
https://github.com/llvm/llvm-project/pull/148789

>From 7bf2a698f2f922bda09f438ff3b77bd886fcd0d1 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <matthew.arsena...@amd.com>
Date: Tue, 15 Jul 2025 15:47:10 +0900
Subject: [PATCH] RuntimeLibcalls: Move __stack_chk_fail config to tablegen

---
 llvm/include/llvm/IR/RuntimeLibcalls.td | 49 ++++++++++++++++---------
 llvm/lib/IR/RuntimeLibcalls.cpp         |  4 +-
 2 files changed, 32 insertions(+), 21 deletions(-)

diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.td 
b/llvm/include/llvm/IR/RuntimeLibcalls.td
index fba478df7715d..42c9dff9fb953 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.td
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.td
@@ -18,6 +18,7 @@ class DuplicateLibcallImplWithPrefix<RuntimeLibcallImpl Impl, 
string prefix>
 /// Libcall Predicates
 def isOSDarwin : RuntimeLibcallPredicate<"TT.isOSDarwin()">;
 def isOSOpenBSD : RuntimeLibcallPredicate<"TT.isOSOpenBSD()">;
+def isNotOSOpenBSD : RuntimeLibcallPredicate<"!TT.isOSOpenBSD()">;
 def isOSWindows : RuntimeLibcallPredicate<"TT.isOSWindows()">;
 def isNotOSWindows : RuntimeLibcallPredicate<"!TT.isOSWindows()">;
 def isNotOSMSVCRT : RuntimeLibcallPredicate<"!TT.isOSMSVCRT()">;
@@ -705,12 +706,6 @@ foreach lc = LibCalls__atomic in {
   def __#!tolower(!cast<string>(lc)) : RuntimeLibcallImpl<lc>;
 }
 
-// Stack Protector Fail
-def __stack_chk_fail : RuntimeLibcallImpl<STACKPROTECTOR_CHECK_FAIL>;
-
-// Safe stack.
-def __safestack_pointer_address : 
RuntimeLibcallImpl<SAFESTACK_POINTER_ADDRESS>;
-
 // Deoptimization
 def __llvm_deoptimize : RuntimeLibcallImpl<DEOPTIMIZE>;
 
@@ -955,6 +950,12 @@ def exp10l_f80 : RuntimeLibcallImpl<EXP10_F80, "exp10l">;
 def exp10l_f128 : RuntimeLibcallImpl<EXP10_F128, "exp10l">;
 def exp10l_ppcf128 : RuntimeLibcallImpl<EXP10_PPCF128, "exp10l">;
 
+// Stack Protector Fail
+def __stack_chk_fail : RuntimeLibcallImpl<STACKPROTECTOR_CHECK_FAIL>;
+
+// Safe stack.
+def __safestack_pointer_address : 
RuntimeLibcallImpl<SAFESTACK_POINTER_ADDRESS>;
+
 //--------------------------------------------------------------------
 // compiler-rt/libgcc but 64-bit only, not available by default
 //--------------------------------------------------------------------
@@ -1144,6 +1145,7 @@ defvar LibmHasLdexpF80 = LibcallImpls<(add ldexp_f80), 
isNotOSWindowsOrIsCygwinM
 defvar LibmHasFrexpF128 = LibcallImpls<(add frexp_f128), 
isNotOSWindowsOrIsCygwinMinGW>;
 defvar LibmHasLdexpF128 = LibcallImpls<(add ldexp_f128), 
isNotOSWindowsOrIsCygwinMinGW>;
 
+defvar has__stack_chk_fail = LibcallImpls<(add __stack_chk_fail), 
isNotOSOpenBSD>;
 
 
//===----------------------------------------------------------------------===//
 // Objective-C Runtime Libcalls
@@ -1221,7 +1223,8 @@ def AArch64SystemLibrary : SystemRuntimeLibrary<
        LibcallImpls<(add bzero), isOSDarwin>,
        DarwinExp10, DarwinSinCosStret,
        LibmHasSinCosF32, LibmHasSinCosF64, LibmHasSinCosF128,
-       LibmHasExp10F32, LibmHasExp10F64, LibmHasExp10F128)
+       LibmHasExp10F32, LibmHasExp10F64, LibmHasExp10F128,
+       has__stack_chk_fail)
 >;
 
 // Prepend a # to every name
@@ -1237,7 +1240,7 @@ defset list<RuntimeLibcallImpl> 
WinArm64ECDefaultRuntimeLibcallImpls = {
 
 def WindowsARM64ECSystemLibrary
     : SystemRuntimeLibrary<isWindowsArm64EC,
-                           (add WinArm64ECDefaultRuntimeLibcallImpls)>;
+                           (add WinArm64ECDefaultRuntimeLibcallImpls, 
__stack_chk_fail)>;
 
 
//===----------------------------------------------------------------------===//
 // AMDGPU Runtime Libcalls
@@ -1497,7 +1500,8 @@ def ARMSystemLibrary
            // Use divmod compiler-rt calls for iOS 5.0 and later.
            LibcallImpls<(add __divmodsi4, __udivmodsi4),
                         RuntimeLibcallPredicate<[{TT.isOSBinFormatMachO() &&
-                                                  (!TT.isiOS() || 
!TT.isOSVersionLT(5, 0))}]>>)> {
+                                                  (!TT.isiOS() || 
!TT.isOSVersionLT(5, 0))}]>>,
+           has__stack_chk_fail)> {
   let DefaultLibcallCallingConv = LibcallCallingConv<[{
      (!TT.isOSDarwin() && !TT.isiOS() && !TT.isWatchOS() && !TT.isDriverKit()) 
?
         (FloatABI == FloatABI::Hard ? CallingConv::ARM_AAPCS_VFP
@@ -1608,7 +1612,7 @@ def HexagonSystemLibrary
     __umoddi3, __divdf3, __muldf3, __divsi3, __subdf3, sqrtf,
     __divdi3, __umodsi3, __moddi3, __modsi3), HexagonLibcalls,
     LibmHasSinCosF32, LibmHasSinCosF64, LibmHasSinCosF128,
-    exp10f, exp10, exp10l_f128)>;
+    exp10f, exp10, exp10l_f128, __stack_chk_fail)>;
 
 
//===----------------------------------------------------------------------===//
 // Lanai Runtime Libcalls
@@ -1618,7 +1622,8 @@ def isLanai : RuntimeLibcallPredicate<"TT.getArch() == 
Triple::lanai">;
 
 // Use fast calling convention for library functions.
 def LanaiSystemLibrary
-    : SystemRuntimeLibrary<isLanai, (add DefaultRuntimeLibcallImpls)> {
+    : SystemRuntimeLibrary<isLanai, (add DefaultRuntimeLibcallImpls,
+                                         __stack_chk_fail)> {
   let DefaultLibcallCallingConv = FASTCC;
 }
 
@@ -1910,8 +1915,10 @@ def MSP430SystemLibrary
       // TODO: __mspabi_[srli/srai/slli] ARE implemented in libgcc
       __mspabi_srll,
       __mspabi_sral,
-      __mspabi_slll
+      __mspabi_slll,
       // __mspabi_[srlll/srall/sllll/rlli/rlll] are NOT implemented in libgcc
+
+      __stack_chk_fail
   )
 >;
 
@@ -2002,7 +2009,8 @@ def PPCSystemLibrary
            LibmHasSinCosF32, LibmHasSinCosF64, LibmHasSinCosF128,
            LibmHasSinCosPPCF128,
            AvailableIf<memcpy, isNotAIX>,
-           LibcallImpls<(add Int128RTLibcalls), isPPC64>)>;
+           LibcallImpls<(add Int128RTLibcalls), isPPC64>,
+           has__stack_chk_fail)>;
 
 
//===----------------------------------------------------------------------===//
 // RISCV Runtime Libcalls
@@ -2016,7 +2024,8 @@ def RISCVSystemLibrary
       (add DefaultRuntimeLibcallImpls,
            exp10f, exp10, exp10l_f128,
            __riscv_flush_icache,
-           LibcallImpls<(add Int128RTLibcalls), isRISCV64>)>;
+           LibcallImpls<(add Int128RTLibcalls), isRISCV64>,
+           has__stack_chk_fail)>;
 
 
//===----------------------------------------------------------------------===//
 // SPARC Runtime Libcalls
@@ -2083,7 +2092,8 @@ def SPARCSystemLibrary
             sparc_umul, sparc_div, sparc_udiv, sparc_rem, sparc_urem,
        LibcallImpls<(add _Q_qtoll, _Q_qtoull, _Q_lltoq, _Q_ulltoq), isSPARC32>,
        LibcallImpls<(add SPARC64_MulDivCalls, Int128RTLibcalls), isSPARC64>,
-       LibmHasSinCosF32, LibmHasSinCosF64, LibmHasSinCosF128)
+       LibmHasSinCosF32, LibmHasSinCosF64, LibmHasSinCosF128,
+       has__stack_chk_fail)
 >;
 
 
//===----------------------------------------------------------------------===//
@@ -2143,7 +2153,8 @@ defvar X86CommonLibcalls =
        LibcallImpls<(add MostPowI), isNotOSMSVCRT>,
        // FIXME: MSVCRT doesn't have powi. The f128 case is added as a
        // hack for one test relying on it.
-       __powitf2_f128
+       __powitf2_f128,
+       has__stack_chk_fail
 );
 
 defvar Windows32DivRemMulCalls =
@@ -2288,7 +2299,8 @@ def WasmSystemLibrary
       (add DefaultRuntimeLibcallImpls, Int128RTLibcalls,
            CompilerRTOnlyInt64Libcalls, CompilerRTOnlyInt128Libcalls,
            exp10f, exp10,
-           emscripten_return_address)>;
+           emscripten_return_address,
+           __stack_chk_fail)>;
 
 
//===----------------------------------------------------------------------===//
 // Legacy Default Runtime Libcalls
@@ -2310,5 +2322,6 @@ def LegacyDefaultSystemLibrary
          LibmHasSinCosF32, LibmHasSinCosF64, LibmHasSinCosF128,
          exp10f, exp10, exp10l_f128,
          __powisf2, __powidf2, __powitf2_f128,
-         LibcallImpls<(add Int128RTLibcalls), isArch64Bit>
+         LibcallImpls<(add Int128RTLibcalls), isArch64Bit>,
+         has__stack_chk_fail
 )>;
diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index 5340f11e0c112..bfe2a3d6af867 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -78,10 +78,8 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
       setLibcallImpl(RTLIB::UNWIND_RESUME, RTLIB::_Unwind_SjLj_Resume);
   }
 
-  if (TT.isOSOpenBSD()) {
-    setLibcallImpl(RTLIB::STACKPROTECTOR_CHECK_FAIL, RTLIB::Unsupported);
+  if (TT.isOSOpenBSD())
     setLibcallImpl(RTLIB::STACK_SMASH_HANDLER, RTLIB::__stack_smash_handler);
-  }
 
   if (TT.isARM() || TT.isThumb()) {
     setARMLibcallNames(*this, TT, FloatABI, EABIVersion);

_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to