[llvm-branch-commits] [llvm] RuntimeLibcalls: Move __stack_chk_fail config to tablegen (PR #148789)
Matt Arsenault via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sun Aug 3 09:32:48 PDT 2025
https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/148789
>From b1e0832d78103e89100b470d4a39edc9e9e7a65a Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Tue, 15 Jul 2025 15:47:10 +0900
Subject: [PATCH 1/2] RuntimeLibcalls: Move __stack_chk_fail config to tablegen
---
llvm/include/llvm/IR/RuntimeLibcalls.td | 44 ++++++++++++++++---------
llvm/lib/IR/RuntimeLibcalls.cpp | 4 +--
2 files changed, 30 insertions(+), 18 deletions(-)
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.td b/llvm/include/llvm/IR/RuntimeLibcalls.td
index f8782d71ddf37..02b5d603a29f4 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,9 +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>;
@@ -955,6 +953,9 @@ 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>;
+
//--------------------------------------------------------------------
// compiler-rt/libgcc but 64-bit only, not available by default
//--------------------------------------------------------------------
@@ -1149,6 +1150,8 @@ 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
//===----------------------------------------------------------------------===//
@@ -1225,7 +1228,8 @@ def AArch64SystemLibrary : SystemRuntimeLibrary<
LibcallImpls<(add bzero), isOSDarwin>,
DarwinExp10, DarwinSinCosStret,
LibmHasSinCosF32, LibmHasSinCosF64, LibmHasSinCosF128,
- DefaultLibmExp10)
+ DefaultLibmExp10,
+ has__stack_chk_fail)
>;
// Prepend a # to every name
@@ -1241,7 +1245,7 @@ defset list<RuntimeLibcallImpl> WinArm64ECDefaultRuntimeLibcallImpls = {
def WindowsARM64ECSystemLibrary
: SystemRuntimeLibrary<isWindowsArm64EC,
- (add WinArm64ECDefaultRuntimeLibcallImpls)>;
+ (add WinArm64ECDefaultRuntimeLibcallImpls, __stack_chk_fail)>;
//===----------------------------------------------------------------------===//
// AMDGPU Runtime Libcalls
@@ -1501,7 +1505,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
@@ -1612,7 +1617,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
@@ -1622,7 +1627,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;
}
@@ -1914,8 +1920,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
)
>;
@@ -2006,7 +2014,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
@@ -2020,7 +2029,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
@@ -2087,7 +2097,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)
>;
//===----------------------------------------------------------------------===//
@@ -2147,7 +2158,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 =
@@ -2292,7 +2304,8 @@ def WasmSystemLibrary
(add DefaultRuntimeLibcallImpls, Int128RTLibcalls,
CompilerRTOnlyInt64Libcalls, CompilerRTOnlyInt128Libcalls,
exp10f, exp10,
- emscripten_return_address)>;
+ emscripten_return_address,
+ __stack_chk_fail)>;
//===----------------------------------------------------------------------===//
// Legacy Default Runtime Libcalls
@@ -2314,5 +2327,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);
>From a6d0dbeec8eef0bffa3aaf4f1480cabe95b5eeb0 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Sun, 3 Aug 2025 09:11:14 +0900
Subject: [PATCH 2/2] Remove from arm64ec case
---
llvm/include/llvm/IR/RuntimeLibcalls.td | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.td b/llvm/include/llvm/IR/RuntimeLibcalls.td
index 02b5d603a29f4..e31573b04cb4b 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.td
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.td
@@ -1245,7 +1245,7 @@ defset list<RuntimeLibcallImpl> WinArm64ECDefaultRuntimeLibcallImpls = {
def WindowsARM64ECSystemLibrary
: SystemRuntimeLibrary<isWindowsArm64EC,
- (add WinArm64ECDefaultRuntimeLibcallImpls, __stack_chk_fail)>;
+ (add WinArm64ECDefaultRuntimeLibcallImpls)>;
//===----------------------------------------------------------------------===//
// AMDGPU Runtime Libcalls
More information about the llvm-branch-commits
mailing list