LLVM  4.0.0
Macros | Functions | Variables
ThreadSanitizer.cpp File Reference
#include "llvm/Transforms/Instrumentation.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Analysis/CaptureTracking.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/ProfileData/InstrProf.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/EscapeEnumerator.h"
#include "llvm/Transforms/Utils/Local.h"
#include "llvm/Transforms/Utils/ModuleUtils.h"
Include dependency graph for ThreadSanitizer.cpp:

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")
 
 INITIALIZE_PASS_BEGIN (ThreadSanitizer,"tsan","ThreadSanitizer: detects data races.", false, false) INITIALIZE_PASS_END(ThreadSanitizer
 
static bool isVtableAccess (Instruction *I)
 
static bool shouldInstrumentReadWriteFromAddress (Value *Addr)
 
static bool isAtomic (Instruction *I)
 
static ConstantIntcreateOrdering (IRBuilder<> *IRB, AtomicOrdering ord)
 

Variables

static cl::opt< boolClInstrumentMemoryAccesses ("tsan-instrument-memory-accesses", cl::init(true), cl::desc("Instrument memory accesses"), cl::Hidden)
 
static cl::opt< boolClInstrumentFuncEntryExit ("tsan-instrument-func-entry-exit", cl::init(true), cl::desc("Instrument function entry and exit"), cl::Hidden)
 
static cl::opt< boolClHandleCxxExceptions ("tsan-handle-cxx-exceptions", cl::init(true), cl::desc("Handle C++ exceptions (insert cleanup blocks for unwinding)"), cl::Hidden)
 
static cl::opt< boolClInstrumentAtomics ("tsan-instrument-atomics", cl::init(true), cl::desc("Instrument atomics"), cl::Hidden)
 
static cl::opt< boolClInstrumentMemIntrinsics ("tsan-instrument-memintrinsics", cl::init(true), cl::desc("Instrument memintrinsics (memset/memcpy/memmove)"), cl::Hidden)
 
static const char *const kTsanModuleCtorName = "tsan.module_ctor"
 
static const char *const kTsanInitName = "__tsan_init"
 
 tsan
 
ThreadSanitizer __pad0__
 
ThreadSanitizer false
 

Macro Definition Documentation

#define DEBUG_TYPE   "tsan"

Definition at line 52 of file ThreadSanitizer.cpp.

Function Documentation

static ConstantInt* createOrdering ( IRBuilder<> *  IRB,
AtomicOrdering  ord 
)
static
INITIALIZE_PASS_BEGIN ( ThreadSanitizer  ,
"tsan"  ,
"ThreadSanitizer: detects data races."  ,
false  ,
false   
)
static bool isAtomic ( Instruction I)
static

Definition at line 379 of file ThreadSanitizer.cpp.

References llvm::CrossThread, and SI.

static bool isVtableAccess ( Instruction I)
static
static bool shouldInstrumentReadWriteFromAddress ( Value Addr)
static
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"   
)

Variable Documentation

ThreadSanitizer __pad0__

Definition at line 142 of file ThreadSanitizer.cpp.

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> ClInstrumentFuncEntryExit("tsan-instrument-func-entry-exit", cl::init(true), cl::desc("Instrument function entry and exit"), 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> ClInstrumentMemoryAccesses("tsan-instrument-memory-accesses", cl::init(true), cl::desc("Instrument memory accesses"), cl::Hidden)
static
ThreadSanitizer false

Definition at line 142 of file ThreadSanitizer.cpp.

const char* const kTsanInitName = "__tsan_init"
static

Definition at line 84 of file ThreadSanitizer.cpp.

const char* const kTsanModuleCtorName = "tsan.module_ctor"
static

Definition at line 83 of file ThreadSanitizer.cpp.

tsan

Definition at line 142 of file ThreadSanitizer.cpp.