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

Go to the source code of this file.

Macros
#define DEBUG_TYPE "tsan"
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"