diff options
author | Kostya Serebryany <kcc@google.com> | 2014-09-03 22:37:37 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2014-09-03 22:37:37 +0000 |
commit | 351b078b6de8c609e6356866d42de09f747f5c01 (patch) | |
tree | 1b6ba06f6bc7ed2eb1988df7795350f03a035d61 /llvm/lib/Transforms | |
parent | cd2d797a7903bc29d95d8db5a45007ae39a98b38 (diff) | |
download | bcm5719-llvm-351b078b6de8c609e6356866d42de09f747f5c01.tar.gz bcm5719-llvm-351b078b6de8c609e6356866d42de09f747f5c01.zip |
[asan] add -asan-coverage=3: instrument all blocks and critical edges.
llvm-svn: 217098
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp index 3ff0a616f4a..b7fdec63471 100644 --- a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -40,6 +40,7 @@ #include "llvm/Support/DataTypes.h" #include "llvm/Support/Debug.h" #include "llvm/Support/Endian.h" +#include "llvm/Transforms/Scalar.h" #include "llvm/Transforms/Utils/ASanStackFrameLayout.h" #include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "llvm/Transforms/Utils/Cloning.h" @@ -134,7 +135,8 @@ static cl::opt<bool> ClUseAfterReturn("asan-use-after-return", static cl::opt<bool> ClGlobals("asan-globals", cl::desc("Handle global objects"), cl::Hidden, cl::init(true)); static cl::opt<int> ClCoverage("asan-coverage", - cl::desc("ASan coverage. 0: none, 1: entry block, 2: all blocks"), + cl::desc("ASan coverage. 0: none, 1: entry block, 2: all blocks, " + "3: all blocks and critical edges"), 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 " @@ -352,7 +354,9 @@ static size_t RedzoneSizeForScale(int MappingScale) { /// AddressSanitizer: instrument the code in module to find memory bugs. struct AddressSanitizer : public FunctionPass { - AddressSanitizer() : FunctionPass(ID) {} + AddressSanitizer() : FunctionPass(ID) { + initializeBreakCriticalEdgesPass(*PassRegistry::getPassRegistry()); + } const char *getPassName() const override { return "AddressSanitizerFunctionPass"; } @@ -373,6 +377,11 @@ struct AddressSanitizer : public FunctionPass { bool doInitialization(Module &M) override; static char ID; // Pass identification, replacement for typeid + void getAnalysisUsage(AnalysisUsage &AU) const override { + if (ClCoverage >= 3) + AU.addRequiredID(BreakCriticalEdgesID); + } + private: void initializeCallbacks(Module &M); |