diff options
author | Kostya Serebryany <kcc@google.com> | 2014-04-18 08:02:42 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2014-04-18 08:02:42 +0000 |
commit | 40a9c0f58b760a6b5fd7a7d51819aaa0c247fcfc (patch) | |
tree | ec91e99bcd6de145dc8eda4bf334d2b63eab2f62 /lib/Transforms/Instrumentation/AddressSanitizer.cpp | |
parent | a1da81989635ff37284c1c471f06af7da2a1a71d (diff) | |
download | llvm-40a9c0f58b760a6b5fd7a7d51819aaa0c247fcfc.tar.gz llvm-40a9c0f58b760a6b5fd7a7d51819aaa0c247fcfc.tar.bz2 llvm-40a9c0f58b760a6b5fd7a7d51819aaa0c247fcfc.tar.xz |
[asan] one more workaround for PR17409: don't do BB-level coverage instrumentation if there are more than N (=1500) basic blocks. This makes ASanCoverage work on libjpeg_turbo/jchuff.c used by Chrome, which has 1824 BBs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206564 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Instrumentation/AddressSanitizer.cpp')
-rw-r--r-- | lib/Transforms/Instrumentation/AddressSanitizer.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/lib/Transforms/Instrumentation/AddressSanitizer.cpp index 1325ba72d4..680c0ed9de 100644 --- a/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ b/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -135,6 +135,10 @@ static cl::opt<bool> ClGlobals("asan-globals", static cl::opt<int> ClCoverage("asan-coverage", cl::desc("ASan coverage. 0: none, 1: entry block, 2: all blocks"), cl::Hidden, cl::init(false)); +static cl::opt<int> ClCoverageBlockThreshold("asan-coverage-block-threshold", + cl::desc("Add coverage instrumentation only to the entry block if there " + "are more than this number of blocks."), + cl::Hidden, cl::init(1500)); static cl::opt<bool> ClInitializers("asan-initialization-order", cl::desc("Handle C++ initializer order"), cl::Hidden, cl::init(false)); static cl::opt<bool> ClMemIntrin("asan-memintrin", @@ -1263,7 +1267,8 @@ bool AddressSanitizer::InjectCoverage(Function &F, const ArrayRef<BasicBlock *> AllBlocks) { if (!ClCoverage) return false; - if (ClCoverage == 1) { + if (ClCoverage == 1 || + (unsigned)ClCoverageBlockThreshold < AllBlocks.size()) { InjectCoverageAtBlock(F, F.getEntryBlock()); } else { for (size_t i = 0, n = AllBlocks.size(); i < n; i++) |