LLVM
16.0.0git
|
#include "llvm/Transforms/Instrumentation/SanitizerCoverage.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Triple.h"
#include "llvm/Analysis/EHPersonalities.h"
#include "llvm/Analysis/PostDominators.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/InitializePasses.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/SpecialCaseList.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/Transforms/Instrumentation.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/ModuleUtils.h"
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 | SanCovGuardsSectionName [] = "sancov_guards" |
const char | SanCovCountersSectionName [] = "sancov_cntrs" |
const char | SanCovBoolFlagSectionName [] = "sancov_bools" |
const char | SanCovPCsSectionName [] = "sancov_pcs" |
const char | SanCovLowestStackName [] = "__sancov_lowest_stack" |
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, cl::init(0)) |
static cl::opt< bool > | ClTracePC ("sanitizer-coverage-trace-pc", cl::desc("Experimental pc tracing"), cl::Hidden, cl::init(false)) |
static 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 > | ClCreatePCTable ("sanitizer-coverage-pc-table", cl::desc("create a static PC table"), cl::Hidden, cl::init(false)) |
static cl::opt< bool > | ClInline8bitCounters ("sanitizer-coverage-inline-8bit-counters", cl::desc("increments 8-bit counter for every edge"), cl::Hidden, cl::init(false)) |
static cl::opt< bool > | ClInlineBoolFlag ("sanitizer-coverage-inline-bool-flag", cl::desc("sets a boolean flag for every edge"), cl::Hidden, cl::init(false)) |
static cl::opt< bool > | ClCMPTracing ("sanitizer-coverage-trace-compares", cl::desc("Tracing of CMP and similar instructions"), cl::Hidden, cl::init(false)) |
static cl::opt< bool > | ClDIVTracing ("sanitizer-coverage-trace-divs", cl::desc("Tracing of DIV instructions"), cl::Hidden, cl::init(false)) |
static cl::opt< bool > | ClLoadTracing ("sanitizer-coverage-trace-loads", cl::desc("Tracing of load instructions"), cl::Hidden, cl::init(false)) |
static cl::opt< bool > | ClStoreTracing ("sanitizer-coverage-trace-stores", cl::desc("Tracing of store instructions"), 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 cl::opt< bool > | ClStackDepth ("sanitizer-coverage-stack-depth", cl::desc("max stack depth tracing"), cl::Hidden, cl::init(false)) |
#define DEBUG_TYPE "sancov" |
Definition at line 40 of file SanitizerCoverage.cpp.
|
static |
Definition at line 566 of file SanitizerCoverage.cpp.
References llvm::DominatorTree::dominates(), From, and llvm::BasicBlock::getUniqueSuccessor().
Referenced by IsInterestingCmp().
|
static |
Definition at line 511 of file SanitizerCoverage.cpp.
References llvm::all_of(), BB, llvm::DominatorTree::dominates(), llvm::succ_empty(), and llvm::successors().
Referenced by shouldInstrumentBlock().
|
static |
Definition at line 521 of file SanitizerCoverage.cpp.
References llvm::all_of(), BB, llvm::PostDominatorTree::dominates(), llvm::pred_empty(), and llvm::predecessors().
Referenced by shouldInstrumentBlock().
|
static |
Definition at line 581 of file SanitizerCoverage.cpp.
References B, llvm::ISD::BR, llvm::ARCISD::CMP, IsBackEdge(), and Options.
|
static |
Definition at line 531 of file SanitizerCoverage.cpp.
References BB, F, isFullDominator(), isFullPostDominator(), Options, and llvm::SanitizerCoverageOptions::SCK_Function.
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
const char SanCov8bitCountersInitName[] = "__sanitizer_cov_8bit_counters_init" |
Definition at line 75 of file SanitizerCoverage.cpp.
const char SanCovBoolFlagInitName[] = "__sanitizer_cov_bool_flag_init" |
Definition at line 76 of file SanitizerCoverage.cpp.
const char SanCovBoolFlagSectionName[] = "sancov_bools" |
Definition at line 81 of file SanitizerCoverage.cpp.
const char SanCovCountersSectionName[] = "sancov_cntrs" |
Definition at line 80 of file SanitizerCoverage.cpp.
const char SanCovGuardsSectionName[] = "sancov_guards" |
Definition at line 79 of file SanitizerCoverage.cpp.
const char SanCovLoad1[] = "__sanitizer_cov_load1" |
Definition at line 52 of file SanitizerCoverage.cpp.
const char SanCovLoad16[] = "__sanitizer_cov_load16" |
Definition at line 56 of file SanitizerCoverage.cpp.
const char SanCovLoad2[] = "__sanitizer_cov_load2" |
Definition at line 53 of file SanitizerCoverage.cpp.
const char SanCovLoad4[] = "__sanitizer_cov_load4" |
Definition at line 54 of file SanitizerCoverage.cpp.
const char SanCovLoad8[] = "__sanitizer_cov_load8" |
Definition at line 55 of file SanitizerCoverage.cpp.
const char SanCovLowestStackName[] = "__sancov_lowest_stack" |
Definition at line 84 of file SanitizerCoverage.cpp.
const char SanCovModuleCtor8bitCountersName[] |
Definition at line 68 of file SanitizerCoverage.cpp.
const char SanCovModuleCtorBoolFlagName[] = "sancov.module_ctor_bool_flag" |
Definition at line 70 of file SanitizerCoverage.cpp.
const char SanCovModuleCtorTracePcGuardName[] |
Definition at line 66 of file SanitizerCoverage.cpp.
const char SanCovPCsInitName[] = "__sanitizer_cov_pcs_init" |
Definition at line 77 of file SanitizerCoverage.cpp.
const char SanCovPCsSectionName[] = "sancov_pcs" |
Definition at line 82 of file SanitizerCoverage.cpp.
const char SanCovStore1[] = "__sanitizer_cov_store1" |
Definition at line 57 of file SanitizerCoverage.cpp.
const char SanCovStore16[] = "__sanitizer_cov_store16" |
Definition at line 61 of file SanitizerCoverage.cpp.
const char SanCovStore2[] = "__sanitizer_cov_store2" |
Definition at line 58 of file SanitizerCoverage.cpp.
const char SanCovStore4[] = "__sanitizer_cov_store4" |
Definition at line 59 of file SanitizerCoverage.cpp.
const char SanCovStore8[] = "__sanitizer_cov_store8" |
Definition at line 60 of file SanitizerCoverage.cpp.
const char SanCovTraceCmp1[] = "__sanitizer_cov_trace_cmp1" |
Definition at line 44 of file SanitizerCoverage.cpp.
const char SanCovTraceCmp2[] = "__sanitizer_cov_trace_cmp2" |
Definition at line 45 of file SanitizerCoverage.cpp.
const char SanCovTraceCmp4[] = "__sanitizer_cov_trace_cmp4" |
Definition at line 46 of file SanitizerCoverage.cpp.
const char SanCovTraceCmp8[] = "__sanitizer_cov_trace_cmp8" |
Definition at line 47 of file SanitizerCoverage.cpp.
const char SanCovTraceConstCmp1[] = "__sanitizer_cov_trace_const_cmp1" |
Definition at line 48 of file SanitizerCoverage.cpp.
const char SanCovTraceConstCmp2[] = "__sanitizer_cov_trace_const_cmp2" |
Definition at line 49 of file SanitizerCoverage.cpp.
const char SanCovTraceConstCmp4[] = "__sanitizer_cov_trace_const_cmp4" |
Definition at line 50 of file SanitizerCoverage.cpp.
const char SanCovTraceConstCmp8[] = "__sanitizer_cov_trace_const_cmp8" |
Definition at line 51 of file SanitizerCoverage.cpp.
const char SanCovTraceDiv4[] = "__sanitizer_cov_trace_div4" |
Definition at line 62 of file SanitizerCoverage.cpp.
const char SanCovTraceDiv8[] = "__sanitizer_cov_trace_div8" |
Definition at line 63 of file SanitizerCoverage.cpp.
const char SanCovTraceGep[] = "__sanitizer_cov_trace_gep" |
Definition at line 64 of file SanitizerCoverage.cpp.
const char SanCovTracePCGuardInitName[] = "__sanitizer_cov_trace_pc_guard_init" |
Definition at line 74 of file SanitizerCoverage.cpp.
const char SanCovTracePCGuardName[] = "__sanitizer_cov_trace_pc_guard" |
Definition at line 73 of file SanitizerCoverage.cpp.
const char SanCovTracePCIndirName[] = "__sanitizer_cov_trace_pc_indir" |
Definition at line 42 of file SanitizerCoverage.cpp.
const char SanCovTracePCName[] = "__sanitizer_cov_trace_pc" |
Definition at line 43 of file SanitizerCoverage.cpp.
const char SanCovTraceSwitchName[] = "__sanitizer_cov_trace_switch" |
Definition at line 65 of file SanitizerCoverage.cpp.
Definition at line 71 of file SanitizerCoverage.cpp.