diff options
author | Kostya Serebryany <kcc@google.com> | 2011-11-23 02:10:54 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2011-11-23 02:10:54 +0000 |
commit | d2703dec271d82c8c9d22afb835c07730fd25d47 (patch) | |
tree | 6911cae0c51813da4f5a1bf363f772fd1fcada65 /lib/Transforms/Instrumentation | |
parent | db6d211d8f71c462aee45030e46c39fcfbacbb1d (diff) | |
download | external_llvm-d2703dec271d82c8c9d22afb835c07730fd25d47.zip external_llvm-d2703dec271d82c8c9d22afb835c07730fd25d47.tar.gz external_llvm-d2703dec271d82c8c9d22afb835c07730fd25d47.tar.bz2 |
[asan] do not instrument threadlocal globals, this is buggy
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145092 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Instrumentation')
-rw-r--r-- | lib/Transforms/Instrumentation/AddressSanitizer.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/lib/Transforms/Instrumentation/AddressSanitizer.cpp index e12da86..b617539 100644 --- a/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ b/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -455,6 +455,11 @@ bool AddressSanitizer::insertGlobalRedzones(Module &M) { G->getLinkage() != GlobalVariable::PrivateLinkage && G->getLinkage() != GlobalVariable::InternalLinkage) continue; + // Two problems with thread-locals: + // - The address of the main thread's copy can't be computed at link-time. + // - Need to poison all copies, not just the main thread's one. + if (G->isThreadLocal()) + continue; // For now, just ignore this Alloca if the alignment is large. if (G->getAlignment() > RedzoneSize) continue; @@ -787,6 +792,7 @@ void AddressSanitizer::PoisonStack(const ArrayRef<AllocaInst*> &AllocaVec, // Workaround for bug 11395: we don't want to instrument stack in functions // with large assembly blobs (32-bit only), otherwise reg alloc may crash. +// FIXME: remove once the bug 11395 is fixed. bool AddressSanitizer::LooksLikeCodeInBug11395(Instruction *I) { if (LongSize != 32) return false; CallInst *CI = dyn_cast<CallInst>(I); |