mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-17 05:31:32 +00:00
Adjust the stack protector heuristic to care about only arrays or calls to
"alloca". git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58792 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b2a4298ce4
commit
89c5cc6c79
@ -184,7 +184,9 @@ BasicBlock *StackProtector::CreateFailBB() {
|
||||
}
|
||||
|
||||
/// RequiresStackProtector - Check whether or not this function needs a stack
|
||||
/// protector based upon the stack protector level.
|
||||
/// protector based upon the stack protector level. The heuristic we use is to
|
||||
/// add a guard variable to functions that call alloca, and functions with
|
||||
/// buffers larger than 8 bytes.
|
||||
bool StackProtector::RequiresStackProtector() const {
|
||||
switch (Level) {
|
||||
default: return false;
|
||||
@ -201,6 +203,8 @@ bool StackProtector::RequiresStackProtector() const {
|
||||
for (BasicBlock::iterator
|
||||
II = BB->begin(), IE = BB->end(); II != IE; ++II)
|
||||
if (AllocaInst *AI = dyn_cast<AllocaInst>(II)) {
|
||||
if (!AI->isArrayAllocation()) continue; // Only care about arrays.
|
||||
|
||||
if (ConstantInt *CI = dyn_cast<ConstantInt>(AI->getArraySize())) {
|
||||
const Type *Ty = AI->getAllocatedType();
|
||||
uint64_t TySize = TD->getABITypeSize(Ty);
|
||||
@ -208,6 +212,10 @@ bool StackProtector::RequiresStackProtector() const {
|
||||
|
||||
if (SSPBufferSize <= StackSize)
|
||||
return true;
|
||||
} else {
|
||||
// This is a call to alloca with a variable size. Default to adding
|
||||
// stack protectors.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user