summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/StackProtector.cpp
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2009-10-23 00:01:05 +0000
committerBill Wendling <isanbard@gmail.com>2009-10-23 00:01:05 +0000
commit6aea1a2a5a8979aa035d69a0c772c0a42302eafd (patch)
tree3b340e56b16b2615f64e21e211fc0b02c870ea34 /llvm/lib/CodeGen/StackProtector.cpp
parent90459c50d7e75a34b137bfb68ddf5f006e0be34e (diff)
downloadbcm5719-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.cpp7
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;
+ }
}
}
OpenPOWER on IntegriCloud