LLVM  4.0.0
Macros | Functions | Variables
SanitizerCoverage.cpp File Reference
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/EHPersonalities.h"
#include "llvm/Analysis/PostDominators.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/CallSite.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DebugInfo.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Instrumentation.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/ModuleUtils.h"
Include dependency graph for SanitizerCoverage.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "sancov"
 

Functions

static bool isFullDominator (const BasicBlock *BB, const DominatorTree *DT)
 
static bool isFullPostDominator (const BasicBlock *BB, const PostDominatorTree *PDT)
 
static bool shouldInstrumentBlock (const Function &F, const BasicBlock *BB, const DominatorTree *DT, const PostDominatorTree *PDT)
 
 INITIALIZE_PASS_BEGIN (SanitizerCoverageModule,"sancov","SanitizerCoverage: TODO.""ModulePass", false, false) INITIALIZE_PASS_END(SanitizerCoverageModule
 

Variables

static const char *const SanCovModuleInitName = "__sanitizer_cov_module_init"
 
static const char *const SanCovName = "__sanitizer_cov"
 
static const char *const SanCovWithCheckName = "__sanitizer_cov_with_check"
 
static const char *const SanCovIndirCallName = "__sanitizer_cov_indir_call16"
 
static const char *const SanCovTracePCIndirName
 
static const char *const SanCovTraceEnterName
 
static const char *const SanCovTraceBBName
 
static const char *const SanCovTracePCName = "__sanitizer_cov_trace_pc"
 
static const char *const SanCovTraceCmp1 = "__sanitizer_cov_trace_cmp1"
 
static const char *const SanCovTraceCmp2 = "__sanitizer_cov_trace_cmp2"
 
static const char *const SanCovTraceCmp4 = "__sanitizer_cov_trace_cmp4"
 
static const char *const SanCovTraceCmp8 = "__sanitizer_cov_trace_cmp8"
 
static const char *const SanCovTraceDiv4 = "__sanitizer_cov_trace_div4"
 
static const char *const SanCovTraceDiv8 = "__sanitizer_cov_trace_div8"
 
static const char *const SanCovTraceGep = "__sanitizer_cov_trace_gep"
 
static const char *const SanCovTraceSwitchName = "__sanitizer_cov_trace_switch"
 
static const char *const SanCovModuleCtorName = "sancov.module_ctor"
 
static const uint64_t SanCtorAndDtorPriority = 2
 
static const char *const SanCovTracePCGuardSection = "__sancov_guards"
 
static const char *const SanCovTracePCGuardName
 
static const char *const SanCovTracePCGuardInitName
 
static cl::opt< int > ClCoverageLevel ("sanitizer-coverage-level", cl::desc("Sanitizer Coverage. 0: none, 1: entry block, 2: all blocks, ""3: all blocks and critical edges, ""4: above plus indirect calls"), cl::Hidden, cl::init(0))
 
static cl::opt< unsignedClCoverageBlockThreshold ("sanitizer-coverage-block-threshold", cl::desc("Use a callback with a guard check inside it if there are"" more than this number of blocks."), cl::Hidden, cl::init(500))
 
static cl::opt< boolClExperimentalTracing ("sanitizer-coverage-experimental-tracing", cl::desc("Experimental basic-block tracing: insert ""callbacks at every basic block"), cl::Hidden, cl::init(false))
 
static cl::opt< boolClExperimentalTracePC ("sanitizer-coverage-trace-pc", cl::desc("Experimental pc tracing"), cl::Hidden, cl::init(false))
 
static cl::opt< boolClTracePCGuard ("sanitizer-coverage-trace-pc-guard", cl::desc("pc tracing with a guard"), cl::Hidden, cl::init(false))
 
static cl::opt< boolClCMPTracing ("sanitizer-coverage-trace-compares", cl::desc("Tracing of CMP and similar instructions"), cl::Hidden, cl::init(false))
 
static cl::opt< boolClDIVTracing ("sanitizer-coverage-trace-divs", cl::desc("Tracing of DIV instructions"), cl::Hidden, cl::init(false))
 
static cl::opt< boolClGEPTracing ("sanitizer-coverage-trace-geps", cl::desc("Tracing of GEP instructions"), cl::Hidden, cl::init(false))
 
static cl::opt< boolClPruneBlocks ("sanitizer-coverage-prune-blocks", cl::desc("Reduce the number of instrumented blocks"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClUse8bitCounters ("sanitizer-coverage-8bit-counters", cl::desc("Experimental 8-bit counters"), cl::Hidden, cl::init(false))
 
 sancov
 
SanitizerCoverage __pad0__
 
SanitizerCoverage false
 

Macro Definition Documentation

#define DEBUG_TYPE   "sancov"

Definition at line 57 of file SanitizerCoverage.cpp.

Function Documentation

INITIALIZE_PASS_BEGIN ( SanitizerCoverageModule  ,
"sancov"  ,
"SanitizerCoverage: TODO.""ModulePass ,
false  ,
false   
)
static bool isFullDominator ( const BasicBlock BB,
const DominatorTree DT 
)
static
static bool isFullPostDominator ( const BasicBlock BB,
const PostDominatorTree PDT 
)
static
static bool shouldInstrumentBlock ( const Function F,
const BasicBlock BB,
const DominatorTree DT,
const PostDominatorTree PDT 
)
static

Variable Documentation

SanitizerCoverage __pad0__

Definition at line 765 of file SanitizerCoverage.cpp.

cl::opt<bool> ClCMPTracing("sanitizer-coverage-trace-compares", cl::desc("Tracing of CMP and similar instructions"), cl::Hidden, cl::init(false))
static
cl::opt<unsigned> ClCoverageBlockThreshold("sanitizer-coverage-block-threshold", cl::desc("Use a callback with a guard check inside it if there are"" more than this number of blocks."), cl::Hidden, cl::init(500))
static
cl::opt<int> ClCoverageLevel("sanitizer-coverage-level", cl::desc("Sanitizer Coverage. 0: none, 1: entry block, 2: all blocks, ""3: all blocks and critical edges, ""4: above plus indirect calls"), cl::Hidden, cl::init(0))
static
cl::opt<bool> ClDIVTracing("sanitizer-coverage-trace-divs", cl::desc("Tracing of DIV instructions"), cl::Hidden, cl::init(false))
static
cl::opt<bool> ClExperimentalTracePC("sanitizer-coverage-trace-pc", cl::desc("Experimental pc tracing"), cl::Hidden, cl::init(false))
static
cl::opt<bool> ClExperimentalTracing("sanitizer-coverage-experimental-tracing", cl::desc("Experimental basic-block tracing: insert ""callbacks at every basic block"), cl::Hidden, cl::init(false))
static
cl::opt<bool> ClGEPTracing("sanitizer-coverage-trace-geps", cl::desc("Tracing of GEP instructions"), cl::Hidden, cl::init(false))
static
cl::opt<bool> ClPruneBlocks("sanitizer-coverage-prune-blocks", cl::desc("Reduce the number of instrumented blocks"), cl::Hidden, cl::init(true))
static

Referenced by shouldInstrumentBlock().

cl::opt<bool> ClTracePCGuard("sanitizer-coverage-trace-pc-guard", cl::desc("pc tracing with a guard"), cl::Hidden, cl::init(false))
static
cl::opt<bool> ClUse8bitCounters("sanitizer-coverage-8bit-counters", cl::desc("Experimental 8-bit counters"), cl::Hidden, cl::init(false))
static
SanitizerCoverage false

Definition at line 765 of file SanitizerCoverage.cpp.

sancov

Definition at line 765 of file SanitizerCoverage.cpp.

const char* const SanCovIndirCallName = "__sanitizer_cov_indir_call16"
static

Definition at line 62 of file SanitizerCoverage.cpp.

const char* const SanCovModuleCtorName = "sancov.module_ctor"
static

Definition at line 78 of file SanitizerCoverage.cpp.

const char* const SanCovModuleInitName = "__sanitizer_cov_module_init"
static

Definition at line 59 of file SanitizerCoverage.cpp.

const char* const SanCovName = "__sanitizer_cov"
static

Definition at line 60 of file SanitizerCoverage.cpp.

const char* const SanCovTraceBBName
static
Initial value:
=
"__sanitizer_cov_trace_basic_block"

Definition at line 67 of file SanitizerCoverage.cpp.

const char* const SanCovTraceCmp1 = "__sanitizer_cov_trace_cmp1"
static

Definition at line 70 of file SanitizerCoverage.cpp.

const char* const SanCovTraceCmp2 = "__sanitizer_cov_trace_cmp2"
static

Definition at line 71 of file SanitizerCoverage.cpp.

const char* const SanCovTraceCmp4 = "__sanitizer_cov_trace_cmp4"
static

Definition at line 72 of file SanitizerCoverage.cpp.

const char* const SanCovTraceCmp8 = "__sanitizer_cov_trace_cmp8"
static

Definition at line 73 of file SanitizerCoverage.cpp.

const char* const SanCovTraceDiv4 = "__sanitizer_cov_trace_div4"
static

Definition at line 74 of file SanitizerCoverage.cpp.

const char* const SanCovTraceDiv8 = "__sanitizer_cov_trace_div8"
static

Definition at line 75 of file SanitizerCoverage.cpp.

const char* const SanCovTraceEnterName
static
Initial value:
=
"__sanitizer_cov_trace_func_enter"

Definition at line 65 of file SanitizerCoverage.cpp.

const char* const SanCovTraceGep = "__sanitizer_cov_trace_gep"
static

Definition at line 76 of file SanitizerCoverage.cpp.

const char* const SanCovTracePCGuardInitName
static
Initial value:
=
"__sanitizer_cov_trace_pc_guard_init"

Definition at line 84 of file SanitizerCoverage.cpp.

const char* const SanCovTracePCGuardName
static
Initial value:
=
"__sanitizer_cov_trace_pc_guard"

Definition at line 82 of file SanitizerCoverage.cpp.

const char* const SanCovTracePCGuardSection = "__sancov_guards"
static

Definition at line 81 of file SanitizerCoverage.cpp.

const char* const SanCovTracePCIndirName
static
Initial value:
=
"__sanitizer_cov_trace_pc_indir"

Definition at line 63 of file SanitizerCoverage.cpp.

const char* const SanCovTracePCName = "__sanitizer_cov_trace_pc"
static

Definition at line 69 of file SanitizerCoverage.cpp.

const char* const SanCovTraceSwitchName = "__sanitizer_cov_trace_switch"
static

Definition at line 77 of file SanitizerCoverage.cpp.

const char* const SanCovWithCheckName = "__sanitizer_cov_with_check"
static

Definition at line 61 of file SanitizerCoverage.cpp.

const uint64_t SanCtorAndDtorPriority = 2
static

Definition at line 79 of file SanitizerCoverage.cpp.