llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-nvptx Author: Matt Arsenault (arsenm) <details> <summary>Changes</summary> Start using RuntimeLibcalls in the base implementation of getSafeStackPointerLocation instead of hardcoding the function names. --- Full diff: https://github.com/llvm/llvm-project/pull/147917.diff 2 Files Affected: - (modified) llvm/lib/CodeGen/TargetLoweringBase.cpp (+14-3) - (modified) llvm/test/Transforms/SafeStack/NVPTX/safestack-pointer-address-libcall-error.ll (+4-2) ``````````diff diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp index 0a077b7b61437..7e730621e4203 100644 --- a/llvm/lib/CodeGen/TargetLoweringBase.cpp +++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp @@ -1965,15 +1965,26 @@ TargetLoweringBase::getDefaultSafeStackPointerLocation(IRBuilderBase &IRB, Value * TargetLoweringBase::getSafeStackPointerLocation(IRBuilderBase &IRB) const { + // FIXME: Can this triple check be replaced with SAFESTACK_POINTER_ADDRESS + // being available? if (!TM.getTargetTriple().isAndroid()) return getDefaultSafeStackPointerLocation(IRB, true); - // Android provides a libc function to retrieve the address of the current - // thread's unsafe stack pointer. Module *M = IRB.GetInsertBlock()->getParent()->getParent(); auto *PtrTy = PointerType::getUnqual(M->getContext()); + + const char *SafestackPointerAddressName = + getLibcallName(RTLIB::SAFESTACK_POINTER_ADDRESS); + if (!SafestackPointerAddressName) { + M->getContext().emitError( + "no libcall available for safestack pointer address"); + return PoisonValue::get(PtrTy); + } + + // Android provides a libc function to retrieve the address of the current + // thread's unsafe stack pointer. FunctionCallee Fn = - M->getOrInsertFunction("__safestack_pointer_address", PtrTy); + M->getOrInsertFunction(SafestackPointerAddressName, PtrTy); return IRB.CreateCall(Fn); } diff --git a/llvm/test/Transforms/SafeStack/NVPTX/safestack-pointer-address-libcall-error.ll b/llvm/test/Transforms/SafeStack/NVPTX/safestack-pointer-address-libcall-error.ll index 9bf84585e5468..d3ea974fca0cf 100644 --- a/llvm/test/Transforms/SafeStack/NVPTX/safestack-pointer-address-libcall-error.ll +++ b/llvm/test/Transforms/SafeStack/NVPTX/safestack-pointer-address-libcall-error.ll @@ -1,6 +1,8 @@ -; RUN: not opt -disable-output -mtriple=nvptx64-- -safestack-use-pointer-address -mcpu=sm_90 -passes=safe-stack %s 2>&1 | FileCheck %s +; RUN: not opt -disable-output -mtriple=nvptx64-- -safestack-use-pointer-address -mcpu=sm_90 -passes=safe-stack %s 2>&1 | FileCheck -check-prefix=ERR1 %s +; RUN: not opt -disable-output -mtriple=nvptx64-unknown-android -mcpu=sm_90 -passes=safe-stack %s 2>&1 | FileCheck -check-prefix=ERR2 %s -; CHECK: error: no libcall available for safestack pointer address +; ERR1: error: no libcall available for safestack pointer address +; ERR2: error: no libcall available for stackprotector check fail define void @foo(i32 %t) #0 { %vla = alloca i32, i32 %t, align 4 call void @baz(ptr %vla) `````````` </details> https://github.com/llvm/llvm-project/pull/147917 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits