mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
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
This commit is contained in:
parent
97f48c39fd
commit
703ccfe053
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user