diff options
author | Bill Wendling <isanbard@gmail.com> | 2009-10-23 00:01:05 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2009-10-23 00:01:05 +0000 |
commit | 6aea1a2a5a8979aa035d69a0c772c0a42302eafd (patch) | |
tree | 3b340e56b16b2615f64e21e211fc0b02c870ea34 /llvm/lib/CodeGen/StackProtector.cpp | |
parent | 90459c50d7e75a34b137bfb68ddf5f006e0be34e (diff) | |
download | bcm5719-llvm-6aea1a2a5a8979aa035d69a0c772c0a42302eafd.tar.gz bcm5719-llvm-6aea1a2a5a8979aa035d69a0c772c0a42302eafd.zip |
Neuter stack protectors by only checking character arrays. This is what GCC
does.
llvm-svn: 84916
Diffstat (limited to 'llvm/lib/CodeGen/StackProtector.cpp')
-rw-r--r-- | llvm/lib/CodeGen/StackProtector.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/StackProtector.cpp b/llvm/lib/CodeGen/StackProtector.cpp index 350bc6e1ade..02049693333 100644 --- a/llvm/lib/CodeGen/StackProtector.cpp +++ b/llvm/lib/CodeGen/StackProtector.cpp @@ -111,11 +111,16 @@ bool StackProtector::RequiresStackProtector() const { // protectors. return true; - if (const ArrayType *AT = dyn_cast<ArrayType>(AI->getAllocatedType())) + if (const ArrayType *AT = dyn_cast<ArrayType>(AI->getAllocatedType())) { + // We apparently only care about character arrays. + if (AT->getElementType() != Type::getInt8Ty(AT->getContext())) + continue; + // If an array has more than SSPBufferSize bytes of allocated space, // then we emit stack protectors. if (SSPBufferSize <= TD->getTypeAllocSize(AT)) return true; + } } } |