LLVM: lib/Transforms/Instrumentation/SanitizerCoverage.cpp File Reference (original) (raw)

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, const SanitizerCoverageOptions &Options)
static bool IsBackEdge (BasicBlock *From, BasicBlock *To, const DominatorTree &DT)
static bool IsInterestingCmp (ICmpInst *CMP, const DominatorTree &DT, const SanitizerCoverageOptions &Options)
Variables
const char SanCovTracePCIndirName [] = "__sanitizer_cov_trace_pc_indir"
const char SanCovTracePCName [] = "__sanitizer_cov_trace_pc"
const char SanCovTraceCmp1 [] = "__sanitizer_cov_trace_cmp1"
const char SanCovTraceCmp2 [] = "__sanitizer_cov_trace_cmp2"
const char SanCovTraceCmp4 [] = "__sanitizer_cov_trace_cmp4"
const char SanCovTraceCmp8 [] = "__sanitizer_cov_trace_cmp8"
const char SanCovTraceConstCmp1 [] = "__sanitizer_cov_trace_const_cmp1"
const char SanCovTraceConstCmp2 [] = "__sanitizer_cov_trace_const_cmp2"
const char SanCovTraceConstCmp4 [] = "__sanitizer_cov_trace_const_cmp4"
const char SanCovTraceConstCmp8 [] = "__sanitizer_cov_trace_const_cmp8"
const char SanCovLoad1 [] = "__sanitizer_cov_load1"
const char SanCovLoad2 [] = "__sanitizer_cov_load2"
const char SanCovLoad4 [] = "__sanitizer_cov_load4"
const char SanCovLoad8 [] = "__sanitizer_cov_load8"
const char SanCovLoad16 [] = "__sanitizer_cov_load16"
const char SanCovStore1 [] = "__sanitizer_cov_store1"
const char SanCovStore2 [] = "__sanitizer_cov_store2"
const char SanCovStore4 [] = "__sanitizer_cov_store4"
const char SanCovStore8 [] = "__sanitizer_cov_store8"
const char SanCovStore16 [] = "__sanitizer_cov_store16"
const char SanCovTraceDiv4 [] = "__sanitizer_cov_trace_div4"
const char SanCovTraceDiv8 [] = "__sanitizer_cov_trace_div8"
const char SanCovTraceGep [] = "__sanitizer_cov_trace_gep"
const char SanCovTraceSwitchName [] = "__sanitizer_cov_trace_switch"
const char SanCovModuleCtorTracePcGuardName []
const char SanCovModuleCtor8bitCountersName []
const char SanCovModuleCtorBoolFlagName [] = "sancov.module_ctor_bool_flag"
static const uint64_t SanCtorAndDtorPriority = 2
const char SanCovTracePCGuardName [] = "__sanitizer_cov_trace_pc_guard"
const char SanCovTracePCGuardInitName [] = "__sanitizer_cov_trace_pc_guard_init"
const char SanCov8bitCountersInitName [] = "__sanitizer_cov_8bit_counters_init"
const char SanCovBoolFlagInitName [] = "__sanitizer_cov_bool_flag_init"
const char SanCovPCsInitName [] = "__sanitizer_cov_pcs_init"
const char SanCovCFsInitName [] = "__sanitizer_cov_cfs_init"
const char SanCovGuardsSectionName [] = "sancov_guards"
const char SanCovCountersSectionName [] = "sancov_cntrs"
const char SanCovBoolFlagSectionName [] = "sancov_bools"
const char SanCovPCsSectionName [] = "sancov_pcs"
const char SanCovCFsSectionName [] = "sancov_cfs"
const char SanCovCallbackGateSectionName [] = "sancov_gate"
const char SanCovStackDepthCallbackName [] = "__sanitizer_cov_stack_depth"
const char SanCovLowestStackName [] = "__sancov_lowest_stack"
const char SanCovCallbackGateName [] = "__sancov_should_track"
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"), cl::Hidden)
static cl::opt< bool > ClTracePC ("sanitizer-coverage-trace-pc", cl::desc("Experimental pc tracing"), cl::Hidden)
static cl::opt< bool > ClTracePCGuard ("sanitizer-coverage-trace-pc-guard", cl::desc("pc tracing with a guard"), cl::Hidden)
static cl::opt< bool > ClCreatePCTable ("sanitizer-coverage-pc-table", cl::desc("create a static PC table"), cl::Hidden)
static cl::opt< bool > ClInline8bitCounters ("sanitizer-coverage-inline-8bit-counters", cl::desc("increments 8-bit counter for every edge"), cl::Hidden)
static cl::opt< bool > ClSancovDropCtors ("sanitizer-coverage-drop-ctors", cl::desc("do not emit module ctors for global counters"), cl::Hidden)
static cl::opt< bool > ClInlineBoolFlag ("sanitizer-coverage-inline-bool-flag", cl::desc("sets a boolean flag for every edge"), cl::Hidden)
static cl::opt< bool > ClCMPTracing ("sanitizer-coverage-trace-compares", cl::desc("Tracing of CMP and similar instructions"), cl::Hidden)
static cl::opt< bool > ClDIVTracing ("sanitizer-coverage-trace-divs", cl::desc("Tracing of DIV instructions"), cl::Hidden)
static cl::opt< bool > ClLoadTracing ("sanitizer-coverage-trace-loads", cl::desc("Tracing of load instructions"), cl::Hidden)
static cl::opt< bool > ClStoreTracing ("sanitizer-coverage-trace-stores", cl::desc("Tracing of store instructions"), cl::Hidden)
static cl::opt< bool > ClGEPTracing ("sanitizer-coverage-trace-geps", cl::desc("Tracing of GEP instructions"), cl::Hidden)
static cl::opt< bool > ClPruneBlocks ("sanitizer-coverage-prune-blocks", cl::desc("Reduce the number of instrumented blocks"), cl::Hidden, cl::init(true))
static cl::opt< bool > ClStackDepth ("sanitizer-coverage-stack-depth", cl::desc("max stack depth tracing"), cl::Hidden)
static cl::opt< int > ClStackDepthCallbackMin ("sanitizer-coverage-stack-depth-callback-min", cl::desc("max stack depth tracing should use callback and only when " "stack depth more than specified"), cl::Hidden)
static cl::opt< bool > ClCollectCF ("sanitizer-coverage-control-flow", cl::desc("collect control flow for each function"), cl::Hidden)
static cl::opt< bool > ClGatedCallbacks ("sanitizer-coverage-gated-trace-callbacks", cl::desc("Gate the invocation of the tracing callbacks on a global variable" ". Currently only supported for trace-pc-guard and trace-cmp."), cl::Hidden, cl::init(false))

DEBUG_TYPE

#define DEBUG_TYPE "sancov"

IsBackEdge()

isFullDominator()

isFullPostDominator()

IsInterestingCmp()

shouldInstrumentBlock()

ClCMPTracing

cl::opt< bool > ClCMPTracing("sanitizer-coverage-trace-compares", cl::desc("Tracing of CMP and similar instructions"), cl::Hidden) ( "sanitizer-coverage-trace-compares" , cl::desc("Tracing of CMP and similar instructions") , cl::Hidden ) static

ClCollectCF

cl::opt< bool > ClCollectCF("sanitizer-coverage-control-flow", cl::desc("collect control flow for each function"), cl::Hidden) ( "sanitizer-coverage-control-flow" , cl::desc("collect control flow for each function") , cl::Hidden ) static

ClCoverageLevel

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"), cl::Hidden) ( "sanitizer-coverage-level" , cl::desc("Sanitizer Coverage. 0: none, 1: entry block, 2: all blocks, " "3: all blocks and critical edges") , cl::Hidden ) static

ClCreatePCTable

cl::opt< bool > ClCreatePCTable("sanitizer-coverage-pc-table", cl::desc("create a static PC table"), cl::Hidden) ( "sanitizer-coverage-pc-table" , cl::desc("create a static PC table") , cl::Hidden ) static

ClDIVTracing

cl::opt< bool > ClDIVTracing("sanitizer-coverage-trace-divs", cl::desc("Tracing of DIV instructions"), cl::Hidden) ( "sanitizer-coverage-trace-divs" , cl::desc("Tracing of DIV instructions") , cl::Hidden ) static

ClGatedCallbacks

cl::opt< bool > ClGatedCallbacks("sanitizer-coverage-gated-trace-callbacks", cl::desc("Gate the invocation of the tracing callbacks on a global variable" ". Currently only supported for trace-pc-guard and trace-cmp."), cl::Hidden, cl::init(false)) ( "sanitizer-coverage-gated-trace-callbacks" , cl::desc("Gate the invocation of the tracing callbacks on a global variable" ". Currently only supported for trace-pc-guard and trace-cmp.") , cl::Hidden , cl::init(false) ) static

ClGEPTracing

cl::opt< bool > ClGEPTracing("sanitizer-coverage-trace-geps", cl::desc("Tracing of GEP instructions"), cl::Hidden) ( "sanitizer-coverage-trace-geps" , cl::desc("Tracing of GEP instructions") , cl::Hidden ) static

ClInline8bitCounters

cl::opt< bool > ClInline8bitCounters("sanitizer-coverage-inline-8bit-counters", cl::desc("increments 8-bit counter for every edge"), cl::Hidden) ( "sanitizer-coverage-inline-8bit-counters" , cl::desc("increments 8-bit counter for every edge") , cl::Hidden ) static

ClInlineBoolFlag

ClLoadTracing

cl::opt< bool > ClLoadTracing("sanitizer-coverage-trace-loads", cl::desc("Tracing of load instructions"), cl::Hidden) ( "sanitizer-coverage-trace-loads" , cl::desc("Tracing of load instructions") , cl::Hidden ) static

ClPruneBlocks

cl::opt< bool > ClPruneBlocks("sanitizer-coverage-prune-blocks", cl::desc("Reduce the number of instrumented blocks"), cl::Hidden, cl::init(true)) ( "sanitizer-coverage-prune-blocks" , cl::desc("Reduce the number of instrumented blocks") , cl::Hidden , cl::init(true) ) static

ClSancovDropCtors

cl::opt< bool > ClSancovDropCtors("sanitizer-coverage-drop-ctors", cl::desc("do not emit module ctors for global counters"), cl::Hidden) ( "sanitizer-coverage-drop-ctors" , cl::desc("do not emit module ctors for global counters") , cl::Hidden ) static

ClStackDepth

cl::opt< bool > ClStackDepth("sanitizer-coverage-stack-depth", cl::desc("max stack depth tracing"), cl::Hidden) ( "sanitizer-coverage-stack-depth" , cl::desc("max stack depth tracing") , cl::Hidden ) static

ClStackDepthCallbackMin

cl::opt< int > ClStackDepthCallbackMin("sanitizer-coverage-stack-depth-callback-min", cl::desc("max stack depth tracing should use callback and only when " "stack depth more than specified"), cl::Hidden) ( "sanitizer-coverage-stack-depth-callback-min" , cl::desc("max stack depth tracing should use callback and only when " "stack depth more than specified") , cl::Hidden ) static

ClStoreTracing

cl::opt< bool > ClStoreTracing("sanitizer-coverage-trace-stores", cl::desc("Tracing of store instructions"), cl::Hidden) ( "sanitizer-coverage-trace-stores" , cl::desc("Tracing of store instructions") , cl::Hidden ) static

ClTracePC

cl::opt< bool > ClTracePC("sanitizer-coverage-trace-pc", cl::desc("Experimental pc tracing"), cl::Hidden) ( "sanitizer-coverage-trace-pc" , cl::desc("Experimental pc tracing") , cl::Hidden ) static

ClTracePCGuard

cl::opt< bool > ClTracePCGuard("sanitizer-coverage-trace-pc-guard", cl::desc("pc tracing with a guard"), cl::Hidden) ( "sanitizer-coverage-trace-pc-guard" , cl::desc("pc tracing with a guard") , cl::Hidden ) static

SanCov8bitCountersInitName

const char SanCov8bitCountersInitName[] = "__sanitizer_cov_8bit_counters_init"

SanCovBoolFlagInitName

const char SanCovBoolFlagInitName[] = "__sanitizer_cov_bool_flag_init"

SanCovBoolFlagSectionName

const char SanCovBoolFlagSectionName[] = "sancov_bools"

SanCovCallbackGateName

const char SanCovCallbackGateName[] = "__sancov_should_track"

SanCovCallbackGateSectionName

const char SanCovCallbackGateSectionName[] = "sancov_gate"

SanCovCFsInitName

const char SanCovCFsInitName[] = "__sanitizer_cov_cfs_init"

SanCovCFsSectionName

const char SanCovCFsSectionName[] = "sancov_cfs"

SanCovCountersSectionName

const char SanCovCountersSectionName[] = "sancov_cntrs"

SanCovGuardsSectionName

const char SanCovGuardsSectionName[] = "sancov_guards"

SanCovLoad1

const char SanCovLoad1[] = "__sanitizer_cov_load1"

SanCovLoad16

const char SanCovLoad16[] = "__sanitizer_cov_load16"

SanCovLoad2

const char SanCovLoad2[] = "__sanitizer_cov_load2"

SanCovLoad4

const char SanCovLoad4[] = "__sanitizer_cov_load4"

SanCovLoad8

const char SanCovLoad8[] = "__sanitizer_cov_load8"

SanCovLowestStackName

const char SanCovLowestStackName[] = "__sancov_lowest_stack"

SanCovModuleCtor8bitCountersName

const char SanCovModuleCtor8bitCountersName[]

SanCovModuleCtorBoolFlagName

const char SanCovModuleCtorBoolFlagName[] = "sancov.module_ctor_bool_flag"

SanCovModuleCtorTracePcGuardName

const char SanCovModuleCtorTracePcGuardName[]

SanCovPCsInitName

const char SanCovPCsInitName[] = "__sanitizer_cov_pcs_init"

SanCovPCsSectionName

const char SanCovPCsSectionName[] = "sancov_pcs"

SanCovStackDepthCallbackName

const char SanCovStackDepthCallbackName[] = "__sanitizer_cov_stack_depth"

SanCovStore1

const char SanCovStore1[] = "__sanitizer_cov_store1"

SanCovStore16

const char SanCovStore16[] = "__sanitizer_cov_store16"

SanCovStore2

const char SanCovStore2[] = "__sanitizer_cov_store2"

SanCovStore4

const char SanCovStore4[] = "__sanitizer_cov_store4"

SanCovStore8

const char SanCovStore8[] = "__sanitizer_cov_store8"

SanCovTraceCmp1

const char SanCovTraceCmp1[] = "__sanitizer_cov_trace_cmp1"

SanCovTraceCmp2

const char SanCovTraceCmp2[] = "__sanitizer_cov_trace_cmp2"

SanCovTraceCmp4

const char SanCovTraceCmp4[] = "__sanitizer_cov_trace_cmp4"

SanCovTraceCmp8

const char SanCovTraceCmp8[] = "__sanitizer_cov_trace_cmp8"

SanCovTraceConstCmp1

const char SanCovTraceConstCmp1[] = "__sanitizer_cov_trace_const_cmp1"

SanCovTraceConstCmp2

const char SanCovTraceConstCmp2[] = "__sanitizer_cov_trace_const_cmp2"

SanCovTraceConstCmp4

const char SanCovTraceConstCmp4[] = "__sanitizer_cov_trace_const_cmp4"

SanCovTraceConstCmp8

const char SanCovTraceConstCmp8[] = "__sanitizer_cov_trace_const_cmp8"

SanCovTraceDiv4

const char SanCovTraceDiv4[] = "__sanitizer_cov_trace_div4"

SanCovTraceDiv8

const char SanCovTraceDiv8[] = "__sanitizer_cov_trace_div8"

SanCovTraceGep

const char SanCovTraceGep[] = "__sanitizer_cov_trace_gep"

SanCovTracePCGuardInitName

const char SanCovTracePCGuardInitName[] = "__sanitizer_cov_trace_pc_guard_init"

SanCovTracePCGuardName

const char SanCovTracePCGuardName[] = "__sanitizer_cov_trace_pc_guard"

SanCovTracePCIndirName

const char SanCovTracePCIndirName[] = "__sanitizer_cov_trace_pc_indir"

SanCovTracePCName

const char SanCovTracePCName[] = "__sanitizer_cov_trace_pc"

SanCovTraceSwitchName

const char SanCovTraceSwitchName[] = "__sanitizer_cov_trace_switch"

SanCtorAndDtorPriority