mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-04 09:45:00 +00:00
For non-Darwin platforms, we want to generate stack protectors only for
character arrays. This is in line with what GCC does. <rdar://problem/10529227> llvm-svn: 161446
This commit is contained in:
parent
301af79343
commit
06a580b5da
@ -28,6 +28,7 @@
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
#include "llvm/Target/TargetLowering.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
using namespace llvm;
|
||||
|
||||
// SSPBufferSize - The lower bound for a buffer to be considered for stack
|
||||
@ -111,6 +112,8 @@ bool StackProtector::RequiresStackProtector() const {
|
||||
return false;
|
||||
|
||||
const TargetData *TD = TLI->getTargetData();
|
||||
const TargetMachine &TM = TLI->getTargetMachine();
|
||||
Triple Trip(TM.getTargetTriple());
|
||||
|
||||
for (Function::iterator I = F->begin(), E = F->end(); I != E; ++I) {
|
||||
BasicBlock *BB = I;
|
||||
@ -123,11 +126,17 @@ bool StackProtector::RequiresStackProtector() const {
|
||||
// protectors.
|
||||
return true;
|
||||
|
||||
if (ArrayType *AT = dyn_cast<ArrayType>(AI->getAllocatedType()))
|
||||
if (ArrayType *AT = dyn_cast<ArrayType>(AI->getAllocatedType())) {
|
||||
// If we're on a non-Darwin platform, don't add stack protectors
|
||||
// unless the array is a character array.
|
||||
if (!Trip.isOSDarwin() && !AT->getElementType()->isIntegerTy(8))
|
||||
continue;
|
||||
|
||||
// If an array has more than SSPBufferSize bytes of allocated space,
|
||||
// then we emit stack protectors.
|
||||
if (SSPBufferSize <= TD->getTypeAllocSize(AT))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user