From: Peter Collingbourne Date: Mon, 22 Jun 2015 20:26:54 +0000 (+0000) Subject: SafeStack: Create the unsafe stack pointer on demand. X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=47e71da4b3d2b7c6ed76c34ad45a0a90274a374b SafeStack: Create the unsafe stack pointer on demand. This avoids creating an unnecessary undefined reference on targets such as NVPTX that require such references to be declared in asm output. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240321 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Instrumentation/SafeStack.cpp b/lib/Transforms/Instrumentation/SafeStack.cpp index 13c54121831..6b185a2b127 100644 --- a/lib/Transforms/Instrumentation/SafeStack.cpp +++ b/lib/Transforms/Instrumentation/SafeStack.cpp @@ -165,7 +165,7 @@ class SafeStack : public FunctionPass { Type *Int32Ty; Type *Int8Ty; - Constant *UnsafeStackPtr; + Constant *UnsafeStackPtr = nullptr; /// Unsafe stack alignment. Each stack frame must ensure that the stack is /// aligned to this value. We need to re-align the unsafe stack if the @@ -232,8 +232,6 @@ public: Int32Ty = Type::getInt32Ty(M.getContext()); Int8Ty = Type::getInt8Ty(M.getContext()); - UnsafeStackPtr = getOrCreateUnsafeStackPtr(M); - return false; } @@ -576,6 +574,9 @@ bool SafeStack::runOnFunction(Function &F) { if (!StackRestorePoints.empty()) ++NumUnsafeStackRestorePointsFunctions; + if (!UnsafeStackPtr) + UnsafeStackPtr = getOrCreateUnsafeStackPtr(*F.getParent()); + // The top of the unsafe stack after all unsafe static allocas are allocated. Value *StaticTop = moveStaticAllocasToUnsafeStack(F, StaticAllocas, Returns); diff --git a/test/Transforms/SafeStack/no-attr.ll b/test/Transforms/SafeStack/no-attr.ll index ca3c21ab01b..d9bcefd3c84 100644 --- a/test/Transforms/SafeStack/no-attr.ll +++ b/test/Transforms/SafeStack/no-attr.ll @@ -6,6 +6,8 @@ ; no safestack attribute ; Requires no protector. +; CHECK-NOT: __safestack_unsafe_stack_ptr + ; CHECK: @foo define void @foo(i8* %a) nounwind uwtable { entry: