mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 15:17:25 +00:00
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
This commit is contained in:
@@ -165,7 +165,7 @@ class SafeStack : public FunctionPass {
|
|||||||
Type *Int32Ty;
|
Type *Int32Ty;
|
||||||
Type *Int8Ty;
|
Type *Int8Ty;
|
||||||
|
|
||||||
Constant *UnsafeStackPtr;
|
Constant *UnsafeStackPtr = nullptr;
|
||||||
|
|
||||||
/// Unsafe stack alignment. Each stack frame must ensure that the stack is
|
/// 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
|
/// aligned to this value. We need to re-align the unsafe stack if the
|
||||||
@@ -232,8 +232,6 @@ public:
|
|||||||
Int32Ty = Type::getInt32Ty(M.getContext());
|
Int32Ty = Type::getInt32Ty(M.getContext());
|
||||||
Int8Ty = Type::getInt8Ty(M.getContext());
|
Int8Ty = Type::getInt8Ty(M.getContext());
|
||||||
|
|
||||||
UnsafeStackPtr = getOrCreateUnsafeStackPtr(M);
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -576,6 +574,9 @@ bool SafeStack::runOnFunction(Function &F) {
|
|||||||
if (!StackRestorePoints.empty())
|
if (!StackRestorePoints.empty())
|
||||||
++NumUnsafeStackRestorePointsFunctions;
|
++NumUnsafeStackRestorePointsFunctions;
|
||||||
|
|
||||||
|
if (!UnsafeStackPtr)
|
||||||
|
UnsafeStackPtr = getOrCreateUnsafeStackPtr(*F.getParent());
|
||||||
|
|
||||||
// The top of the unsafe stack after all unsafe static allocas are allocated.
|
// The top of the unsafe stack after all unsafe static allocas are allocated.
|
||||||
Value *StaticTop = moveStaticAllocasToUnsafeStack(F, StaticAllocas, Returns);
|
Value *StaticTop = moveStaticAllocasToUnsafeStack(F, StaticAllocas, Returns);
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
; no safestack attribute
|
; no safestack attribute
|
||||||
; Requires no protector.
|
; Requires no protector.
|
||||||
|
|
||||||
|
; CHECK-NOT: __safestack_unsafe_stack_ptr
|
||||||
|
|
||||||
; CHECK: @foo
|
; CHECK: @foo
|
||||||
define void @foo(i8* %a) nounwind uwtable {
|
define void @foo(i8* %a) nounwind uwtable {
|
||||||
entry:
|
entry:
|
||||||
|
|||||||
Reference in New Issue
Block a user