Go to the source code of this file.
| Functions |
|
|
STATISTIC (NumInstrumentedReads, "Number of instrumented reads") |
|
STATISTIC (NumInstrumentedWrites, "Number of instrumented writes") |
|
STATISTIC (NumOmittedReadsBeforeWrite, "Number of reads ignored due to following writes") |
|
STATISTIC (NumAccessesWithBadSize, "Number of accesses with bad size") |
|
STATISTIC (NumInstrumentedVtableWrites, "Number of vtable ptr writes") |
|
STATISTIC (NumInstrumentedVtableReads, "Number of vtable ptr reads") |
|
STATISTIC (NumOmittedReadsFromConstantGlobals, "Number of reads from constant globals") |
|
STATISTIC (NumOmittedReadsFromVtable, "Number of vtable reads") |
|
STATISTIC (NumOmittedNonCaptured, "Number of accesses ignored due to capturing") |
| static bool |
isVtableAccess (Instruction *I) |
| static bool |
shouldInstrumentReadWriteFromAddress (const Module *M, Value *Addr) |
| static bool |
isTsanAtomic (const Instruction *I) |
| static ConstantInt * |
createOrdering (IRBuilder<> *IRB, AtomicOrdering ord) |
| Variables |
|
| static cl::opt< bool > |
ClInstrumentMemoryAccesses ("tsan-instrument-memory-accesses", cl::init(true), cl::desc("Instrument memory accesses"), cl::Hidden) |
| static cl::opt< bool > |
ClInstrumentFuncEntryExit ("tsan-instrument-func-entry-exit", cl::init(true), cl::desc("Instrument function entry and exit"), cl::Hidden) |
| static cl::opt< bool > |
ClHandleCxxExceptions ("tsan-handle-cxx-exceptions", cl::init(true), cl::desc("Handle C++ exceptions (insert cleanup blocks for unwinding)"), cl::Hidden) |
| static cl::opt< bool > |
ClInstrumentAtomics ("tsan-instrument-atomics", cl::init(true), cl::desc("Instrument atomics"), cl::Hidden) |
| static cl::opt< bool > |
ClInstrumentMemIntrinsics ("tsan-instrument-memintrinsics", cl::init(true), cl::desc("Instrument memintrinsics (memset/memcpy/memmove)"), cl::Hidden) |
| static cl::opt< bool > |
ClDistinguishVolatile ("tsan-distinguish-volatile", cl::init(false), cl::desc("Emit special instrumentation for accesses to volatiles"), cl::Hidden) |
| static cl::opt< bool > |
ClInstrumentReadBeforeWrite ("tsan-instrument-read-before-write", cl::init(false), cl::desc("Do not eliminate read instrumentation for read-before-writes"), cl::Hidden) |
| static cl::opt< bool > |
ClCompoundReadBeforeWrite ("tsan-compound-read-before-write", cl::init(false), cl::desc("Emit special compound instrumentation for reads-before-writes"), cl::Hidden) |
| static cl::opt< bool > |
ClOmitNonCaptured ("tsan-omit-by-pointer-capturing", cl::init(true), cl::desc("Omit accesses due to pointer capturing"), cl::Hidden) |
| const char |
kTsanModuleCtorName [] = "tsan.module_ctor" |
| const char |
kTsanInitName [] = "__tsan_init" |
◆ DEBUG_TYPE
#define DEBUG_TYPE "tsan"
◆ createOrdering()
◆ isTsanAtomic()
◆ isVtableAccess()
◆ shouldInstrumentReadWriteFromAddress()
◆ STATISTIC() [1/9]
| STATISTIC |
( |
NumAccessesWithBadSize |
, |
| "Number of accesses with bad size" |
) |
|
|
◆ STATISTIC() [2/9]
| STATISTIC |
( |
NumInstrumentedReads |
, |
| "Number of instrumented reads" |
) |
|
|
◆ STATISTIC() [3/9]
| STATISTIC |
( |
NumInstrumentedVtableReads |
, |
| "Number of vtable ptr reads" |
) |
|
|
◆ STATISTIC() [4/9]
| STATISTIC |
( |
NumInstrumentedVtableWrites |
, |
| "Number of vtable ptr writes" |
) |
|
|
◆ STATISTIC() [5/9]
| STATISTIC |
( |
NumInstrumentedWrites |
, |
| "Number of instrumented writes" |
) |
|
|
◆ STATISTIC() [6/9]
| STATISTIC |
( |
NumOmittedNonCaptured |
, |
| "Number of accesses ignored due to capturing" |
) |
|
|
◆ STATISTIC() [7/9]
| STATISTIC |
( |
NumOmittedReadsBeforeWrite |
, |
| "Number of reads ignored due to following writes" |
) |
|
|
◆ STATISTIC() [8/9]
| STATISTIC |
( |
NumOmittedReadsFromConstantGlobals |
, |
| "Number of reads from constant globals" |
) |
|
|
◆ STATISTIC() [9/9]
| STATISTIC |
( |
NumOmittedReadsFromVtable |
, |
| "Number of vtable reads" |
) |
|
|
◆ ClCompoundReadBeforeWrite
| cl::opt< bool > ClCompoundReadBeforeWrite("tsan-compound-read-before-write", cl::init(false), cl::desc("Emit special compound instrumentation for reads-before-writes"), cl::Hidden) ( "tsan-compound-read-before-write" , cl::init(false) , cl::desc("Emit special compound instrumentation for reads-before-writes") , cl::Hidden ) |
static |
◆ ClDistinguishVolatile
◆ ClHandleCxxExceptions
◆ ClInstrumentAtomics
◆ ClInstrumentFuncEntryExit
◆ ClInstrumentMemIntrinsics
| cl::opt< bool > ClInstrumentMemIntrinsics("tsan-instrument-memintrinsics", cl::init(true), cl::desc("Instrument memintrinsics (memset/memcpy/memmove)"), cl::Hidden) ( "tsan-instrument-memintrinsics" , cl::init(true) , cl::desc("Instrument memintrinsics (memset/memcpy/memmove)") , cl::Hidden ) |
static |
◆ ClInstrumentMemoryAccesses
| cl::opt< bool > ClInstrumentMemoryAccesses("tsan-instrument-memory-accesses", cl::init(true), cl::desc("Instrument memory accesses"), cl::Hidden) ( "tsan-instrument-memory-accesses" , cl::init(true) , cl::desc("Instrument memory accesses") , cl::Hidden ) |
static |
◆ ClInstrumentReadBeforeWrite
◆ ClOmitNonCaptured
| cl::opt< bool > ClOmitNonCaptured("tsan-omit-by-pointer-capturing", cl::init(true), cl::desc("Omit accesses due to pointer capturing"), cl::Hidden) ( "tsan-omit-by-pointer-capturing" , cl::init(true) , cl::desc("Omit accesses due to pointer capturing") , cl::Hidden ) |
static |
◆ kTsanInitName
◆ kTsanModuleCtorName
const char kTsanModuleCtorName[] = "tsan.module_ctor"