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"