Go to the source code of this file.
|
| 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) |
|
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" |