diff options
author | Bill Wendling <isanbard@gmail.com> | 2008-11-06 22:18:44 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2008-11-06 22:18:44 +0000 |
commit | 703ccfe0538a30d674b52fdbb4f5debf9b062354 (patch) | |
tree | 918a3c2f7f160c34b1ca24fb86551a6990b5f5a2 /lib/CodeGen/StackProtector.cpp | |
parent | 97f48c39fd158ad1a701002e2d6798c4b4ae4ab8 (diff) |
The size limit is for individual arrays. So if any array has more than 8 bytes
in it, then emit stack protectors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58819 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/StackProtector.cpp')
-rw-r--r-- | lib/CodeGen/StackProtector.cpp | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/lib/CodeGen/StackProtector.cpp b/lib/CodeGen/StackProtector.cpp index 318be93b40..b1f18edd4c 100644 --- a/lib/CodeGen/StackProtector.cpp +++ b/lib/CodeGen/StackProtector.cpp @@ -192,9 +192,6 @@ bool StackProtector::RequiresStackProtector() const { default: return false; case SSP::ALL: return true; case SSP::SOME: { - // If the size of the local variables allocated on the stack is greater than - // SSPBufferSize, then we require a stack protector. - uint64_t StackSize = 0; const TargetData *TD = TLI->getTargetData(); for (Function::iterator I = F->begin(), E = F->end(); I != E; ++I) { @@ -208,9 +205,10 @@ bool StackProtector::RequiresStackProtector() const { if (ConstantInt *CI = dyn_cast<ConstantInt>(AI->getArraySize())) { const Type *Ty = AI->getAllocatedType(); uint64_t TySize = TD->getABITypeSize(Ty); - StackSize += TySize * CI->getZExtValue(); // Total allocated size. - if (SSPBufferSize <= StackSize) + // If an array has more than 8 bytes of allocated space, then we + // emit stack protectors. + if (SSPBufferSize <= TySize * CI->getZExtValue()) return true; } else { // This is a call to alloca with a variable size. Default to adding |