LLVM  6.0.0svn
Macros | Functions | Variables
AddressSanitizer.cpp File Reference
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DepthFirstIterator.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Triple.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Analysis/MemoryBuiltins.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/BinaryFormat/MachO.h"
#include "llvm/IR/Argument.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/CallSite.h"
#include "llvm/IR/Comdat.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DIBuilder.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/InstVisitor.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Use.h"
#include "llvm/IR/Value.h"
#include "llvm/MC/MCSectionMachO.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/ScopedPrinter.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Instrumentation.h"
#include "llvm/Transforms/Utils/ASanStackFrameLayout.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/Local.h"
#include "llvm/Transforms/Utils/ModuleUtils.h"
#include "llvm/Transforms/Utils/PromoteMemToReg.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <iomanip>
#include <limits>
#include <memory>
#include <sstream>
#include <string>
#include <tuple>

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "asan"
 

Functions

 STATISTIC (NumInstrumentedReads, "Number of instrumented reads")
 
 STATISTIC (NumInstrumentedWrites, "Number of instrumented writes")
 
 STATISTIC (NumOptimizedAccessesToGlobalVar, "Number of optimized accesses to global vars")
 
 STATISTIC (NumOptimizedAccessesToStackVar, "Number of optimized accesses to stack vars")
 
static ShadowMapping getShadowMapping (Triple &TargetTriple, int LongSize, bool IsKasan)
 
static size_t RedzoneSizeForScale (int MappingScale)
 
 INITIALIZE_PASS_BEGIN (AddressSanitizer, "asan", "AddressSanitizer: detects use-after-free and out-of-bounds bugs.", false, false) INITIALIZE_PASS_END(AddressSanitizer
 
 INITIALIZE_PASS (AddressSanitizerModule, "asan-module", "AddressSanitizer: detects use-after-free and out-of-bounds bugs." "ModulePass", false, false) ModulePass *llvm
 
static size_t TypeSizeToSizeIndex (uint32_t TypeSize)
 
static GlobalVariablecreatePrivateGlobalForString (Module &M, StringRef Str, bool AllowMerging)
 
static GlobalVariablecreatePrivateGlobalForSourceLoc (Module &M, LocationMetadata MD)
 Create a global describing a source location. More...
 
static bool GlobalWasGeneratedByCompiler (GlobalVariable *G)
 Check if G has been created by a trusted compiler pass. More...
 
static bool isPointerOperand (Value *V)
 
static bool isInterestingPointerComparisonOrSubtraction (Instruction *I)
 
static void doInstrumentAddress (AddressSanitizer *Pass, Instruction *I, Instruction *InsertBefore, Value *Addr, unsigned Alignment, unsigned Granularity, uint32_t TypeSize, bool IsWrite, Value *SizeArgument, bool UseCalls, uint32_t Exp)
 
static void instrumentMaskedLoadOrStore (AddressSanitizer *Pass, const DataLayout &DL, Type *IntptrTy, Value *Mask, Instruction *I, Value *Addr, unsigned Alignment, unsigned Granularity, uint32_t TypeSize, bool IsWrite, Value *SizeArgument, bool UseCalls, uint32_t Exp)
 
static int StackMallocSizeClass (uint64_t LocalStackSize)
 

Variables

static const uint64_t kDefaultShadowScale = 3
 
static const uint64_t kDefaultShadowOffset32 = 1ULL << 29
 
static const uint64_t kDefaultShadowOffset64 = 1ULL << 44
 
static const uint64_t kDynamicShadowSentinel
 
static const uint64_t kIOSShadowOffset32 = 1ULL << 30
 
static const uint64_t kIOSSimShadowOffset32 = 1ULL << 30
 
static const uint64_t kIOSSimShadowOffset64 = kDefaultShadowOffset64
 
static const uint64_t kSmallX86_64ShadowOffset = 0x7FFF8000
 
static const uint64_t kLinuxKasan_ShadowOffset64 = 0xdffffc0000000000
 
static const uint64_t kPPC64_ShadowOffset64 = 1ULL << 41
 
static const uint64_t kSystemZ_ShadowOffset64 = 1ULL << 52
 
static const uint64_t kMIPS32_ShadowOffset32 = 0x0aaa0000
 
static const uint64_t kMIPS64_ShadowOffset64 = 1ULL << 37
 
static const uint64_t kAArch64_ShadowOffset64 = 1ULL << 36
 
static const uint64_t kFreeBSD_ShadowOffset32 = 1ULL << 30
 
static const uint64_t kFreeBSD_ShadowOffset64 = 1ULL << 46
 
static const uint64_t kNetBSD_ShadowOffset64 = 1ULL << 46
 
static const uint64_t kPS4CPU_ShadowOffset64 = 1ULL << 40
 
static const uint64_t kWindowsShadowOffset32 = 3ULL << 28
 
static const uint64_t kWindowsShadowOffset64 = kDynamicShadowSentinel
 
static const size_t kMinStackMallocSize = 1 << 6
 
static const size_t kMaxStackMallocSize = 1 << 16
 
static const uintptr_t kCurrentStackFrameMagic = 0x41B58AB3
 
static const uintptr_t kRetiredStackFrameMagic = 0x45E0360E
 
static const char *const kAsanModuleCtorName = "asan.module_ctor"
 
static const char *const kAsanModuleDtorName = "asan.module_dtor"
 
static const uint64_t kAsanCtorAndDtorPriority = 1
 
static const char *const kAsanReportErrorTemplate = "__asan_report_"
 
static const char *const kAsanRegisterGlobalsName = "__asan_register_globals"
 
static const char *const kAsanUnregisterGlobalsName
 
static const char *const kAsanRegisterImageGlobalsName
 
static const char *const kAsanUnregisterImageGlobalsName
 
static const char *const kAsanRegisterElfGlobalsName
 
static const char *const kAsanUnregisterElfGlobalsName
 
static const char *const kAsanPoisonGlobalsName = "__asan_before_dynamic_init"
 
static const char *const kAsanUnpoisonGlobalsName = "__asan_after_dynamic_init"
 
static const char *const kAsanInitName = "__asan_init"
 
static const char *const kAsanVersionCheckName
 
static const char *const kAsanPtrCmp = "__sanitizer_ptr_cmp"
 
static const char *const kAsanPtrSub = "__sanitizer_ptr_sub"
 
static const char *const kAsanHandleNoReturnName = "__asan_handle_no_return"
 
static const int kMaxAsanStackMallocSizeClass = 10
 
static const char *const kAsanStackMallocNameTemplate = "__asan_stack_malloc_"
 
static const char *const kAsanStackFreeNameTemplate = "__asan_stack_free_"
 
static const char *const kAsanGenPrefix = "__asan_gen_"
 
static const char *const kODRGenPrefix = "__odr_asan_gen_"
 
static const char *const kSanCovGenPrefix = "__sancov_gen_"
 
static const char *const kAsanSetShadowPrefix = "__asan_set_shadow_"
 
static const char *const kAsanPoisonStackMemoryName
 
static const char *const kAsanUnpoisonStackMemoryName
 
static const char *const kAsanGlobalsRegisteredFlagName
 
static const char *const kAsanOptionDetectUseAfterReturn
 
static const char *const kAsanShadowMemoryDynamicAddress
 
static const char *const kAsanAllocaPoison = "__asan_alloca_poison"
 
static const char *const kAsanAllocasUnpoison = "__asan_allocas_unpoison"
 
static const size_t kNumberOfAccessSizes = 5
 
static const unsigned kAllocaRzSize = 32
 
static cl::opt< boolClEnableKasan ("asan-kernel", cl::desc("Enable KernelAddressSanitizer instrumentation"), cl::Hidden, cl::init(false))
 
static cl::opt< boolClRecover ("asan-recover", cl::desc("Enable recovery mode (continue-after-error)."), cl::Hidden, cl::init(false))
 
static cl::opt< boolClInstrumentReads ("asan-instrument-reads", cl::desc("instrument read instructions"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClInstrumentWrites ("asan-instrument-writes", cl::desc("instrument write instructions"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClInstrumentAtomics ("asan-instrument-atomics", cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClAlwaysSlowPath ("asan-always-slow-path", cl::desc("use instrumentation with slow path for all accesses"), cl::Hidden, cl::init(false))
 
static cl::opt< boolClForceDynamicShadow ("asan-force-dynamic-shadow", cl::desc("Load shadow address into a local variable for each function"), cl::Hidden, cl::init(false))
 
static cl::opt< int > ClMaxInsnsToInstrumentPerBB ("asan-max-ins-per-bb", cl::init(10000), cl::desc("maximal number of instructions to instrument in any given BB"), cl::Hidden)
 
static cl::opt< boolClStack ("asan-stack", cl::desc("Handle stack memory"), cl::Hidden, cl::init(true))
 
static cl::opt< uint32_tClMaxInlinePoisoningSize ("asan-max-inline-poisoning-size", cl::desc("Inline shadow poisoning for blocks up to the given size in bytes."), cl::Hidden, cl::init(64))
 
static cl::opt< boolClUseAfterReturn ("asan-use-after-return", cl::desc("Check stack-use-after-return"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClRedzoneByvalArgs ("asan-redzone-byval-args", cl::desc("Create redzones for byval " "arguments (extra copy " "required)"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClUseAfterScope ("asan-use-after-scope", cl::desc("Check stack-use-after-scope"), cl::Hidden, cl::init(false))
 
static cl::opt< boolClGlobals ("asan-globals", cl::desc("Handle global objects"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClInitializers ("asan-initialization-order", cl::desc("Handle C++ initializer order"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClInvalidPointerPairs ("asan-detect-invalid-pointer-pair", cl::desc("Instrument <, <=, >, >=, - with pointer operands"), cl::Hidden, cl::init(false))
 
static cl::opt< unsignedClRealignStack ("asan-realign-stack", cl::desc("Realign stack to the value of this flag (power of two)"), cl::Hidden, cl::init(32))
 
static cl::opt< int > ClInstrumentationWithCallsThreshold ("asan-instrumentation-with-call-threshold", cl::desc("If the function being instrumented contains more than " "this number of memory accesses, use callbacks instead of " "inline checks (-1 means never use callbacks)."), cl::Hidden, cl::init(7000))
 
static cl::opt< std::string > ClMemoryAccessCallbackPrefix ("asan-memory-access-callback-prefix", cl::desc("Prefix for memory access callbacks"), cl::Hidden, cl::init("__asan_"))
 
static cl::opt< boolClInstrumentDynamicAllocas ("asan-instrument-dynamic-allocas", cl::desc("instrument dynamic allocas"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClSkipPromotableAllocas ("asan-skip-promotable-allocas", cl::desc("Do not instrument promotable allocas"), cl::Hidden, cl::init(true))
 
static cl::opt< int > ClMappingScale ("asan-mapping-scale", cl::desc("scale of asan shadow mapping"), cl::Hidden, cl::init(0))
 
static cl::opt< unsigned long long > ClMappingOffset ("asan-mapping-offset", cl::desc("offset of asan shadow mapping [EXPERIMENTAL]"), cl::Hidden, cl::init(0))
 
static cl::opt< boolClOpt ("asan-opt", cl::desc("Optimize instrumentation"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClOptSameTemp ("asan-opt-same-temp", cl::desc("Instrument the same temp just once"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClOptGlobals ("asan-opt-globals", cl::desc("Don't instrument scalar globals"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClOptStack ("asan-opt-stack", cl::desc("Don't instrument scalar stack variables"), cl::Hidden, cl::init(false))
 
static cl::opt< boolClDynamicAllocaStack ("asan-stack-dynamic-alloca", cl::desc("Use dynamic alloca to represent stack variables"), cl::Hidden, cl::init(true))
 
static cl::opt< uint32_tClForceExperiment ("asan-force-experiment", cl::desc("Force optimization experiment (for testing)"), cl::Hidden, cl::init(0))
 
static cl::opt< boolClUsePrivateAliasForGlobals ("asan-use-private-alias", cl::desc("Use private aliases for global" " variables"), cl::Hidden, cl::init(false))
 
static cl::opt< boolClUseGlobalsGC ("asan-globals-live-support", cl::desc("Use linker features to support dead " "code stripping of globals"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClWithComdat ("asan-with-comdat", cl::desc("Place ASan constructors in comdat sections"), cl::Hidden, cl::init(true))
 
static cl::opt< int > ClDebug ("asan-debug", cl::desc("debug"), cl::Hidden, cl::init(0))
 
static cl::opt< int > ClDebugStack ("asan-debug-stack", cl::desc("debug stack"), cl::Hidden, cl::init(0))
 
static cl::opt< std::string > ClDebugFunc ("asan-debug-func", cl::Hidden, cl::desc("Debug func"))
 
static cl::opt< int > ClDebugMin ("asan-debug-min", cl::desc("Debug min inst"), cl::Hidden, cl::init(-1))
 
static cl::opt< int > ClDebugMax ("asan-debug-max", cl::desc("Debug max inst"), cl::Hidden, cl::init(-1))
 
 asan
 
AddressSanitizer __pad0__
 
AddressSanitizer false
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "asan"

Definition at line 90 of file AddressSanitizer.cpp.

Function Documentation

◆ createPrivateGlobalForSourceLoc()

static GlobalVariable* createPrivateGlobalForSourceLoc ( Module M,
LocationMetadata  MD 
)
static

◆ createPrivateGlobalForString()

static GlobalVariable* createPrivateGlobalForString ( Module M,
StringRef  Str,
bool  AllowMerging 
)
static

◆ doInstrumentAddress()

static void doInstrumentAddress ( AddressSanitizer *  Pass,
Instruction I,
Instruction InsertBefore,
Value Addr,
unsigned  Alignment,
unsigned  Granularity,
uint32_t  TypeSize,
bool  IsWrite,
Value SizeArgument,
bool  UseCalls,
uint32_t  Exp 
)
static

Definition at line 1297 of file AddressSanitizer.cpp.

Referenced by instrumentMaskedLoadOrStore().

◆ getShadowMapping()

static ShadowMapping getShadowMapping ( Triple TargetTriple,
int  LongSize,
bool  IsKasan 
)
static

◆ GlobalWasGeneratedByCompiler()

static bool GlobalWasGeneratedByCompiler ( GlobalVariable G)
static

◆ INITIALIZE_PASS()

INITIALIZE_PASS ( AddressSanitizerModule  ,
"asan-module"  ,
"AddressSanitizer: detects use-after-free and out-of-bounds bugs." "ModulePass ,
false  ,
false   
)

Definition at line 1042 of file AddressSanitizer.cpp.

References assert().

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( AddressSanitizer  ,
"asan"  ,
"AddressSanitizer: detects use-after-free and out-of-bounds bugs."  ,
false  ,
false   
)

Referenced by RedzoneSizeForScale().

◆ instrumentMaskedLoadOrStore()

static void instrumentMaskedLoadOrStore ( AddressSanitizer *  Pass,
const DataLayout DL,
Type IntptrTy,
Value Mask,
Instruction I,
Value Addr,
unsigned  Alignment,
unsigned  Granularity,
uint32_t  TypeSize,
bool  IsWrite,
Value SizeArgument,
bool  UseCalls,
uint32_t  Exp 
)
static

Definition at line 1314 of file AddressSanitizer.cpp.

References llvm::GlobalVariable::addDebugInfo(), llvm::appendToCompilerUsed(), llvm::appendToGlobalCtors(), llvm::appendToGlobalDtors(), Arg, llvm::CallInst::arg_operands(), assert(), llvm::GlobalValue::AvailableExternallyLinkage, llvm::BasicBlock::begin(), C, llvm::checkSanitizerInterfaceFunction(), ClAlwaysSlowPath, ClDebugFunc, ClDebugMax, ClDebugMin, llvm::SmallSet< T, N, C >::clear(), ClForceExperiment, ClGlobals, ClInitializers, ClInstrumentationWithCallsThreshold, ClInvalidPointerPairs, ClMaxInlinePoisoningSize, ClMaxInsnsToInstrumentPerBB, ClMemoryAccessCallbackPrefix, ClOpt, ClOptGlobals, ClOptSameTemp, ClOptStack, ClUsePrivateAliasForGlobals, llvm::Triple::COFF, llvm::GlobalValue::CommonLinkage, llvm::GlobalVariable::copyAttributesFrom(), llvm::SmallSet< T, N, C >::count(), llvm::GlobalAlias::create(), llvm::BasicBlock::Create(), llvm::Function::Create(), llvm::CallInst::Create(), llvm::ReturnInst::Create(), llvm::BranchInst::Create(), llvm::IRBuilder< T, Inserter >::CreateAdd(), llvm::IRBuilder< T, Inserter >::CreateAlignedStore(), llvm::IRBuilder< T, Inserter >::CreateAnd(), llvm::MDBuilder::createBranchWeights(), llvm::IRBuilder< T, Inserter >::CreateCall(), llvm::IRBuilder< T, Inserter >::CreateExtractElement(), llvm::IRBuilder< T, Inserter >::CreateGEP(), llvm::IRBuilder< T, Inserter >::CreateICmpNE(), llvm::IRBuilder< T, Inserter >::CreateICmpSGE(), llvm::IRBuilder< T, Inserter >::CreateIntCast(), llvm::IRBuilder< T, Inserter >::CreateIntToPtr(), llvm::IRBuilder< T, Inserter >::CreateLoad(), llvm::IRBuilder< T, Inserter >::CreatePointerCast(), createPrivateGlobalForSourceLoc(), createPrivateGlobalForString(), llvm::createSanitizerCtorAndInitFunctions(), llvm::dbgs(), DEBUG, llvm::declareSanitizerInitFunction(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::doesNotReturn(), doInstrumentAddress(), llvm::GlobalValue::dropLLVMManglingEscape(), llvm::dyn_cast(), llvm::Triple::ELF, llvm::StringRef::empty(), llvm::Module::empty(), llvm::WebAssembly::End, llvm::GlobalValue::ExternalLinkage, llvm::GlobalValue::ExternalWeakLinkage, F(), llvm::StringRef::find(), llvm::BasicBlock::front(), llvm::Function::front(), G, llvm::InlineAsm::get(), llvm::IntegerType::get(), llvm::ConstantInt::get(), llvm::FunctionType::get(), llvm::StructType::get(), llvm::ValueAsMetadata::get(), llvm::ArrayType::get(), llvm::ConstantArray::get(), llvm::ConstantStruct::get(), llvm::PointerType::get(), llvm::MDNode::get(), llvm::Constant::getAggregateElement(), llvm::GlobalObject::getAlignment(), llvm::Function::getBasicBlockList(), llvm::GlobalObject::getComdat(), llvm::Module::getContext(), llvm::Module::getDataLayout(), llvm::Instruction::getDebugLoc(), llvm::GlobalValue::getDLLStorageClass(), llvm::Function::getEntryBlock(), llvm::BasicBlock::getFirstInsertionPt(), llvm::Module::getFunction(), llvm::ConstantExpr::getGetElementPtr(), llvm::Module::getGlobalVariable(), llvm::GlobalVariable::getInitializer(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::getInstruction(), llvm::IRBuilderBase::getInt32(), llvm::IRBuilderBase::getInt32Ty(), llvm::Type::getInt32Ty(), llvm::IRBuilderBase::getInt8PtrTy(), llvm::IRBuilderBase::getInt8Ty(), llvm::IRBuilderBase::getIntN(), llvm::Type::getIntNTy(), llvm::IntrinsicInst::getIntrinsicID(), llvm::ConstantInt::getLimitedValue(), llvm::GlobalValue::getLinkage(), llvm::Module::getModuleIdentifier(), llvm::Module::getName(), llvm::Value::getName(), llvm::Constant::getNullValue(), llvm::CallInst::getNumArgOperands(), llvm::User::getOperand(), llvm::Module::getOrInsertComdat(), llvm::Module::getOrInsertFunction(), llvm::Module::getOrInsertGlobal(), llvm::BasicBlock::getParent(), llvm::GlobalValue::getParent(), llvm::ConstantExpr::getPointerCast(), llvm::DataLayout::getPointerSizeInBits(), llvm::Type::getPointerTo(), llvm::GlobalObject::getSection(), getShadowMapping(), llvm::TerminatorInst::getSuccessor(), llvm::Module::getTargetTriple(), llvm::GlobalValue::getThreadLocalMode(), getType(), llvm::Value::getType(), llvm::DataLayout::getTypeAllocSize(), llvm::DataLayout::getTypeStoreSizeInBits(), llvm::GetUnderlyingObject(), llvm::getUniqueModuleId(), llvm::GlobalValue::getValueType(), llvm::GlobalValue::getVisibility(), llvm::IRBuilderBase::getVoidTy(), llvm::Type::getVoidTy(), llvm::Module::globals(), GlobalWasGeneratedByCompiler(), llvm::GlobalObject::hasComdat(), llvm::Function::hasFnAttribute(), llvm::GlobalVariable::hasInitializer(), llvm::GlobalValue::hasLocalLinkage(), llvm::Value::hasName(), llvm::GlobalObject::hasSection(), llvm::GlobalValue::HiddenVisibility, I, llvm::SmallSet< T, N, C >::insert(), llvm::GlobalValue::InternalLinkage, llvm::GlobalVariable::isConstant(), llvm::CallInst::isInlineAsm(), isInterestingPointerComparisonOrSubtraction(), llvm::DataLayout::isLittleEndian(), llvm::isPowerOf2_32(), llvm::Type::isSized(), llvm::AllocaInst::isStaticAlloca(), llvm::GlobalValue::isThreadLocal(), llvm::itostr(), kAsanCtorAndDtorPriority, kAsanInitName, kAsanModuleCtorName, kAsanSetShadowPrefix, kAsanVersionCheckName, kDynamicShadowSentinel, kMaxAsanStackMallocSizeClass, kNumberOfAccessSizes, llvm_unreachable, llvm::Triple::MachO, llvm::max(), llvm::maybeMarkSanitizerLibraryCallNoBuiltin(), llvm::LLVMContext::MD_associated, N, llvm::Comdat::NoDuplicates, llvm::StringRef::npos, OP, llvm::User::operands(), llvm::MCSectionMachO::ParseSectionSpecifier(), llvm::GlobalValue::PrivateLinkage, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::Value::replaceAllUsesWith(), llvm::ReplaceInstWithInst(), llvm::ObjectSizeOpts::RoundToAlign, llvm::NVPTX::PTXCvtMode::RZ, llvm::MachO::S_CSTRING_LITERALS, llvm::ARMBuildAttrs::Section, llvm::GlobalObject::setAlignment(), llvm::GlobalObject::setComdat(), llvm::Instruction::setDebugLoc(), llvm::IRBuilderBase::SetInsertPoint(), llvm::GlobalObject::setMetadata(), llvm::Value::setName(), llvm::GlobalObject::setSection(), llvm::Comdat::setSelectionKind(), llvm::GlobalValue::setVisibility(), llvm::SmallVectorTemplateCommon< T >::size(), llvm::ArrayRef< T >::size(), llvm::AMDGPU::HSAMD::Kernel::Arg::Key::Size, llvm::SplitBlockAndInsertIfThen(), llvm::StringRef::startswith(), llvm::Value::stripPointerCasts(), llvm::Value::takeName(), and TypeSizeToSizeIndex().

◆ isInterestingPointerComparisonOrSubtraction()

static bool isInterestingPointerComparisonOrSubtraction ( Instruction I)
static

◆ isPointerOperand()

static bool isPointerOperand ( Value V)
static

◆ RedzoneSizeForScale()

static size_t RedzoneSizeForScale ( int  MappingScale)
static

Definition at line 557 of file AddressSanitizer.cpp.

References llvm::AnalysisUsage::addRequired(), assert(), C, ClDebugStack, ClEnableKasan, ClInstrumentDynamicAllocas, ClRecover, ClRedzoneByvalArgs, ClStack, ClUseAfterScope, ClUseGlobalsGC, ClWithComdat, llvm::CallInst::Create(), llvm::IRBuilder< T, Inserter >::CreateAdd(), llvm::IRBuilder< T, Inserter >::CreateCall(), llvm::IRBuilder< T, Inserter >::CreateLoad(), llvm::IRBuilder< T, Inserter >::CreatePtrToInt(), llvm::dbgs(), DEBUG, llvm::depth_first(), llvm::dyn_cast(), llvm::SmallVectorBase::empty(), llvm::WebAssembly::End, F(), G, llvm::PointerType::get(), llvm::AllocaInst::getAlignment(), llvm::AllocaInst::getAllocatedType(), llvm::CallInst::getArgOperand(), llvm::AllocaInst::getArraySize(), llvm::Module::getDataLayout(), llvm::Intrinsic::getDeclaration(), llvm::Function::getEntryBlock(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::getInstruction(), llvm::IntrinsicInst::getIntrinsicID(), llvm::APInt::getLimitedValue(), llvm::Instruction::getModule(), llvm::GlobalValue::getParent(), llvm::PassRegistry::getPassRegistry(), llvm::DataLayout::getTypeAllocSize(), llvm::ConstantInt::getValue(), llvm::ConstantInt::getZExtValue(), I, INITIALIZE_PASS_BEGIN(), INITIALIZE_PASS_DEPENDENCY, INITIALIZE_PASS_END(), llvm::initializeAddressSanitizerPass(), llvm::AllocaInst::isArrayAllocation(), llvm::ConstantInt::isMinusOne(), llvm::AllocaInst::isStaticAlloca(), llvm::ConstantInt::isValueValidForType(), kMaxAsanStackMallocSizeClass, kNumberOfAccessSizes, llvm::max(), MI, Pass, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::MipsISD::Ret, and llvm::AMDGPU::HSAMD::Kernel::Arg::Key::Size.

◆ StackMallocSizeClass()

static int StackMallocSizeClass ( uint64_t  LocalStackSize)
static

Definition at line 2621 of file AddressSanitizer.cpp.

References llvm::PHINode::addIncoming(), llvm::AMDGPU::HSAMD::Kernel::Arg::Key::Align, Arg, llvm::Function::args(), assert(), llvm::BasicBlock::begin(), llvm::Function::begin(), llvm::ObjectSizeOffsetVisitor::bothKnown(), ClDynamicAllocaStack, ClInstrumentDynamicAllocas, ClRealignStack, ClUseAfterReturn, llvm::ObjectSizeOffsetVisitor::compute(), llvm::ComputeASanStackFrameDescription(), llvm::ComputeASanStackFrameLayout(), llvm::IRBuilder< T, Inserter >::CreateAdd(), llvm::IRBuilder< T, Inserter >::CreateAlloca(), llvm::IRBuilder< T, Inserter >::CreateAnd(), llvm::IRBuilder< T, Inserter >::CreateCall(), llvm::IRBuilder< T, Inserter >::CreateICmpEQ(), llvm::IRBuilder< T, Inserter >::CreateICmpNE(), llvm::IRBuilder< T, Inserter >::CreateIntCast(), llvm::IRBuilder< T, Inserter >::CreateIntToPtr(), llvm::IRBuilder< T, Inserter >::CreateLoad(), llvm::IRBuilderBase::CreateMemCpy(), llvm::IRBuilder< T, Inserter >::CreateMul(), llvm::IRBuilder< T, Inserter >::CreatePHI(), llvm::IRBuilder< T, Inserter >::CreatePointerCast(), createPrivateGlobalForString(), llvm::IRBuilder< T, Inserter >::CreatePtrToInt(), llvm::IRBuilder< T, Inserter >::CreateSelect(), llvm::IRBuilder< T, Inserter >::CreateStore(), llvm::IRBuilder< T, Inserter >::CreateSub(), D, llvm::StringRef::data(), llvm::dbgs(), DEBUG, llvm::Instruction::eraseFromParent(), llvm::ASanStackFrameLayout::FrameAlignment, llvm::ASanStackFrameLayout::FrameSize, llvm::BasicBlock::front(), llvm::Function::front(), llvm::DebugLoc::get(), llvm::ConstantInt::get(), llvm::ArrayType::get(), llvm::MDNode::get(), llvm::DataLayout::getABITypeAlignment(), llvm::AllocaInst::getAlignment(), llvm::AllocaInst::getAllocatedType(), llvm::AllocaInst::getArraySize(), llvm::Module::getDataLayout(), llvm::Function::getEntryBlock(), llvm::IRBuilderBase::getInt32Ty(), llvm::IRBuilderBase::getInt64Ty(), llvm::IRBuilderBase::getInt8PtrTy(), llvm::IRBuilderBase::getInt8Ty(), llvm::Value::getName(), llvm::ilist_node_with_parent< NodeTy, ParentTy, Options >::getNextNode(), llvm::Constant::getNullValue(), llvm::Module::getOrInsertGlobal(), llvm::Instruction::getParent(), llvm::GlobalValue::getParent(), getParent(), llvm::Type::getPointerElementType(), llvm::GetShadowBytes(), llvm::GetShadowBytesAfterScope(), llvm::Function::getSubprogram(), llvm::AllocaInst::getType(), llvm::Value::getType(), llvm::DataLayout::getTypeAllocSize(), llvm::ASanStackFrameLayout::Granularity, llvm::Value::hasName(), if(), llvm::AllocaInst::isStaticAlloca(), llvm::kAsanStackUseAfterReturnMagic, kCurrentStackFrameMagic, kMaxAsanStackMallocSizeClass, kMaxStackMallocSize, kMinStackMallocSize, kRetiredStackFrameMagic, llvm_unreachable, llvm::max(), llvm::Instruction::moveBefore(), llvm::DIExpression::NoDeref, llvm::ASanStackVariableDescription::Offset, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::Value::replaceAllUsesWith(), llvm::replaceDbgDeclareForAlloca(), llvm::SmallVectorImpl< T >::reserve(), llvm::SmallVectorImpl< T >::resize(), llvm::MipsISD::Ret, llvm::AllocaInst::setAlignment(), llvm::StoreInst::setAlignment(), llvm::IRBuilderBase::SetCurrentDebugLocation(), llvm::IRBuilderBase::SetInsertPoint(), llvm::AMDGPU::HSAMD::Kernel::Arg::Key::Size, llvm::SplitBlockAndInsertIfThen(), llvm::SplitBlockAndInsertIfThenElse(), llvm::StringRef::str(), and llvm::to_string().

◆ STATISTIC() [1/4]

STATISTIC ( NumInstrumentedReads  ,
"Number of instrumented reads"   
)

◆ STATISTIC() [2/4]

STATISTIC ( NumInstrumentedWrites  ,
"Number of instrumented writes"   
)

◆ STATISTIC() [3/4]

STATISTIC ( NumOptimizedAccessesToGlobalVar  ,
"Number of optimized accesses to global vars"   
)

◆ STATISTIC() [4/4]

STATISTIC ( NumOptimizedAccessesToStackVar  ,
"Number of optimized accesses to stack vars"   
)

◆ TypeSizeToSizeIndex()

static size_t TypeSizeToSizeIndex ( uint32_t  TypeSize)
static

Variable Documentation

◆ __pad0__

AddressSanitizer __pad0__

Definition at line 1029 of file AddressSanitizer.cpp.

◆ asan

asan

Definition at line 1029 of file AddressSanitizer.cpp.

◆ ClAlwaysSlowPath

cl::opt<bool> ClAlwaysSlowPath("asan-always-slow-path", cl::desc("use instrumentation with slow path for all accesses"), cl::Hidden, cl::init(false))
static

◆ ClDebug

cl::opt<int> ClDebug("asan-debug", cl::desc("debug"), cl::Hidden, cl::init(0))
static

◆ ClDebugFunc

cl::opt<std::string> ClDebugFunc("asan-debug-func", cl::Hidden, cl::desc("Debug func"))
static

◆ ClDebugMax

cl::opt<int> ClDebugMax("asan-debug-max", cl::desc("Debug max inst"), cl::Hidden, cl::init(-1))
static

◆ ClDebugMin

cl::opt<int> ClDebugMin("asan-debug-min", cl::desc("Debug min inst"), cl::Hidden, cl::init(-1))
static

◆ ClDebugStack

cl::opt<int> ClDebugStack("asan-debug-stack", cl::desc("debug stack"), cl::Hidden, cl::init(0))
static

Referenced by RedzoneSizeForScale().

◆ ClDynamicAllocaStack

cl::opt<bool> ClDynamicAllocaStack("asan-stack-dynamic-alloca", cl::desc("Use dynamic alloca to represent stack variables"), cl::Hidden, cl::init(true))
static

Referenced by StackMallocSizeClass().

◆ ClEnableKasan

cl::opt<bool> ClEnableKasan("asan-kernel", cl::desc("Enable KernelAddressSanitizer instrumentation"), cl::Hidden, cl::init(false))
static

Referenced by RedzoneSizeForScale().

◆ ClForceDynamicShadow

cl::opt<bool> ClForceDynamicShadow("asan-force-dynamic-shadow", cl::desc("Load shadow address into a local variable for each function"), cl::Hidden, cl::init(false))
static

Referenced by getShadowMapping().

◆ ClForceExperiment

cl::opt<uint32_t> ClForceExperiment("asan-force-experiment", cl::desc("Force optimization experiment (for testing)"), cl::Hidden, cl::init(0))
static

◆ ClGlobals

cl::opt<bool> ClGlobals("asan-globals", cl::desc("Handle global objects"), cl::Hidden, cl::init(true))
static

◆ ClInitializers

cl::opt<bool> ClInitializers("asan-initialization-order", cl::desc("Handle C++ initializer order"), cl::Hidden, cl::init(true))
static

◆ ClInstrumentationWithCallsThreshold

cl::opt<int> ClInstrumentationWithCallsThreshold("asan-instrumentation-with-call-threshold", cl::desc( "If the function being instrumented contains more than " "this number of memory accesses, use callbacks instead of " "inline checks (-1 means never use callbacks)."), cl::Hidden, cl::init(7000))
static

◆ ClInstrumentAtomics

cl::opt<bool> ClInstrumentAtomics("asan-instrument-atomics", cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden, cl::init(true))
static

◆ ClInstrumentDynamicAllocas

cl::opt<bool> ClInstrumentDynamicAllocas("asan-instrument-dynamic-allocas", cl::desc("instrument dynamic allocas"), cl::Hidden, cl::init(true))
static

◆ ClInstrumentReads

cl::opt<bool> ClInstrumentReads("asan-instrument-reads", cl::desc("instrument read instructions"), cl::Hidden, cl::init(true))
static

◆ ClInstrumentWrites

cl::opt<bool> ClInstrumentWrites("asan-instrument-writes", cl::desc("instrument write instructions"), cl::Hidden, cl::init(true))
static

◆ ClInvalidPointerPairs

cl::opt<bool> ClInvalidPointerPairs("asan-detect-invalid-pointer-pair", cl::desc("Instrument <, <=, >, >=, - with pointer operands"), cl::Hidden, cl::init(false))
static

◆ ClMappingOffset

cl::opt<unsigned long long> ClMappingOffset("asan-mapping-offset", cl::desc("offset of asan shadow mapping [EXPERIMENTAL]"), cl::Hidden, cl::init(0))
static

Referenced by getShadowMapping().

◆ ClMappingScale

cl::opt<int> ClMappingScale("asan-mapping-scale", cl::desc("scale of asan shadow mapping"), cl::Hidden, cl::init(0))
static

Referenced by getShadowMapping().

◆ ClMaxInlinePoisoningSize

cl::opt<uint32_t> ClMaxInlinePoisoningSize("asan-max-inline-poisoning-size", cl::desc( "Inline shadow poisoning for blocks up to the given size in bytes."), cl::Hidden, cl::init(64))
static

◆ ClMaxInsnsToInstrumentPerBB

cl::opt<int> ClMaxInsnsToInstrumentPerBB("asan-max-ins-per-bb", cl::init(10000), cl::desc("maximal number of instructions to instrument in any given BB"), cl::Hidden)
static

◆ ClMemoryAccessCallbackPrefix

cl::opt<std::string> ClMemoryAccessCallbackPrefix("asan-memory-access-callback-prefix", cl::desc("Prefix for memory access callbacks"), cl::Hidden, cl::init("__asan_"))
static

◆ ClOpt

cl::opt<bool> ClOpt("asan-opt", cl::desc("Optimize instrumentation"), cl::Hidden, cl::init(true))
static

◆ ClOptGlobals

cl::opt<bool> ClOptGlobals("asan-opt-globals", cl::desc("Don't instrument scalar globals"), cl::Hidden, cl::init(true))
static

◆ ClOptSameTemp

cl::opt<bool> ClOptSameTemp("asan-opt-same-temp", cl::desc("Instrument the same temp just once"), cl::Hidden, cl::init(true))
static

◆ ClOptStack

cl::opt<bool> ClOptStack("asan-opt-stack", cl::desc("Don't instrument scalar stack variables"), cl::Hidden, cl::init(false))
static

◆ ClRealignStack

cl::opt<unsigned> ClRealignStack("asan-realign-stack", cl::desc("Realign stack to the value of this flag (power of two)"), cl::Hidden, cl::init(32))
static

Referenced by StackMallocSizeClass().

◆ ClRecover

cl::opt<bool> ClRecover("asan-recover", cl::desc("Enable recovery mode (continue-after-error)."), cl::Hidden, cl::init(false))
static

Referenced by RedzoneSizeForScale().

◆ ClRedzoneByvalArgs

cl::opt<bool> ClRedzoneByvalArgs("asan-redzone-byval-args", cl::desc("Create redzones for byval " "arguments (extra copy " "required)"), cl::Hidden, cl::init(true))
static

Referenced by RedzoneSizeForScale().

◆ ClSkipPromotableAllocas

cl::opt<bool> ClSkipPromotableAllocas("asan-skip-promotable-allocas", cl::desc("Do not instrument promotable allocas"), cl::Hidden, cl::init(true))
static

◆ ClStack

cl::opt<bool> ClStack("asan-stack", cl::desc("Handle stack memory"), cl::Hidden, cl::init(true))
static

Referenced by RedzoneSizeForScale().

◆ ClUseAfterReturn

cl::opt<bool> ClUseAfterReturn("asan-use-after-return", cl::desc("Check stack-use-after-return"), cl::Hidden, cl::init(true))
static

Referenced by StackMallocSizeClass().

◆ ClUseAfterScope

cl::opt<bool> ClUseAfterScope("asan-use-after-scope", cl::desc("Check stack-use-after-scope"), cl::Hidden, cl::init(false))
static

Referenced by RedzoneSizeForScale().

◆ ClUseGlobalsGC

cl::opt<bool> ClUseGlobalsGC("asan-globals-live-support", cl::desc("Use linker features to support dead " "code stripping of globals"), cl::Hidden, cl::init(true))
static

Referenced by RedzoneSizeForScale().

◆ ClUsePrivateAliasForGlobals

cl::opt<bool> ClUsePrivateAliasForGlobals("asan-use-private-alias", cl::desc("Use private aliases for global" " variables"), cl::Hidden, cl::init(false))
static

◆ ClWithComdat

cl::opt<bool> ClWithComdat("asan-with-comdat", cl::desc("Place ASan constructors in comdat sections"), cl::Hidden, cl::init(true))
static

Referenced by RedzoneSizeForScale().

◆ false

AddressSanitizer false

Definition at line 1029 of file AddressSanitizer.cpp.

◆ kAArch64_ShadowOffset64

const uint64_t kAArch64_ShadowOffset64 = 1ULL << 36
static

Definition at line 106 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kAllocaRzSize

const unsigned kAllocaRzSize = 32
static

Definition at line 173 of file AddressSanitizer.cpp.

◆ kAsanAllocaPoison

const char* const kAsanAllocaPoison = "__asan_alloca_poison"
static

Definition at line 167 of file AddressSanitizer.cpp.

◆ kAsanAllocasUnpoison

const char* const kAsanAllocasUnpoison = "__asan_allocas_unpoison"
static

Definition at line 168 of file AddressSanitizer.cpp.

◆ kAsanCtorAndDtorPriority

const uint64_t kAsanCtorAndDtorPriority = 1
static

Definition at line 123 of file AddressSanitizer.cpp.

Referenced by instrumentMaskedLoadOrStore().

◆ kAsanGenPrefix

const char* const kAsanGenPrefix = "__asan_gen_"
static

◆ kAsanGlobalsRegisteredFlagName

const char* const kAsanGlobalsRegisteredFlagName
static
Initial value:
=
"___asan_globals_registered"

Definition at line 158 of file AddressSanitizer.cpp.

◆ kAsanHandleNoReturnName

const char* const kAsanHandleNoReturnName = "__asan_handle_no_return"
static

Definition at line 143 of file AddressSanitizer.cpp.

◆ kAsanInitName

const char* const kAsanInitName = "__asan_init"
static

Definition at line 138 of file AddressSanitizer.cpp.

Referenced by instrumentMaskedLoadOrStore().

◆ kAsanModuleCtorName

const char* const kAsanModuleCtorName = "asan.module_ctor"
static

Definition at line 121 of file AddressSanitizer.cpp.

Referenced by instrumentMaskedLoadOrStore().

◆ kAsanModuleDtorName

const char* const kAsanModuleDtorName = "asan.module_dtor"
static

Definition at line 122 of file AddressSanitizer.cpp.

◆ kAsanOptionDetectUseAfterReturn

const char* const kAsanOptionDetectUseAfterReturn
static
Initial value:
=
"__asan_option_detect_stack_use_after_return"

Definition at line 161 of file AddressSanitizer.cpp.

◆ kAsanPoisonGlobalsName

const char* const kAsanPoisonGlobalsName = "__asan_before_dynamic_init"
static

Definition at line 136 of file AddressSanitizer.cpp.

◆ kAsanPoisonStackMemoryName

const char* const kAsanPoisonStackMemoryName
static
Initial value:
=
"__asan_poison_stack_memory"

Definition at line 151 of file AddressSanitizer.cpp.

◆ kAsanPtrCmp

const char* const kAsanPtrCmp = "__sanitizer_ptr_cmp"
static

Definition at line 141 of file AddressSanitizer.cpp.

◆ kAsanPtrSub

const char* const kAsanPtrSub = "__sanitizer_ptr_sub"
static

Definition at line 142 of file AddressSanitizer.cpp.

◆ kAsanRegisterElfGlobalsName

const char* const kAsanRegisterElfGlobalsName
static
Initial value:
=
"__asan_register_elf_globals"

Definition at line 132 of file AddressSanitizer.cpp.

◆ kAsanRegisterGlobalsName

const char* const kAsanRegisterGlobalsName = "__asan_register_globals"
static

Definition at line 125 of file AddressSanitizer.cpp.

◆ kAsanRegisterImageGlobalsName

const char* const kAsanRegisterImageGlobalsName
static
Initial value:
=
"__asan_register_image_globals"

Definition at line 128 of file AddressSanitizer.cpp.

◆ kAsanReportErrorTemplate

const char* const kAsanReportErrorTemplate = "__asan_report_"
static

Definition at line 124 of file AddressSanitizer.cpp.

◆ kAsanSetShadowPrefix

const char* const kAsanSetShadowPrefix = "__asan_set_shadow_"
static

Definition at line 150 of file AddressSanitizer.cpp.

Referenced by instrumentMaskedLoadOrStore().

◆ kAsanShadowMemoryDynamicAddress

const char* const kAsanShadowMemoryDynamicAddress
static
Initial value:
=
"__asan_shadow_memory_dynamic_address"

Definition at line 164 of file AddressSanitizer.cpp.

◆ kAsanStackFreeNameTemplate

const char* const kAsanStackFreeNameTemplate = "__asan_stack_free_"
static

Definition at line 146 of file AddressSanitizer.cpp.

◆ kAsanStackMallocNameTemplate

const char* const kAsanStackMallocNameTemplate = "__asan_stack_malloc_"
static

Definition at line 145 of file AddressSanitizer.cpp.

◆ kAsanUnpoisonGlobalsName

const char* const kAsanUnpoisonGlobalsName = "__asan_after_dynamic_init"
static

Definition at line 137 of file AddressSanitizer.cpp.

◆ kAsanUnpoisonStackMemoryName

const char* const kAsanUnpoisonStackMemoryName
static
Initial value:
=
"__asan_unpoison_stack_memory"

Definition at line 153 of file AddressSanitizer.cpp.

◆ kAsanUnregisterElfGlobalsName

const char* const kAsanUnregisterElfGlobalsName
static
Initial value:
=
"__asan_unregister_elf_globals"

Definition at line 134 of file AddressSanitizer.cpp.

◆ kAsanUnregisterGlobalsName

const char* const kAsanUnregisterGlobalsName
static
Initial value:
=
"__asan_unregister_globals"

Definition at line 126 of file AddressSanitizer.cpp.

◆ kAsanUnregisterImageGlobalsName

const char* const kAsanUnregisterImageGlobalsName
static
Initial value:
=
"__asan_unregister_image_globals"

Definition at line 130 of file AddressSanitizer.cpp.

◆ kAsanVersionCheckName

const char* const kAsanVersionCheckName
static
Initial value:
=
"__asan_version_mismatch_check_v8"

Definition at line 139 of file AddressSanitizer.cpp.

Referenced by instrumentMaskedLoadOrStore().

◆ kCurrentStackFrameMagic

const uintptr_t kCurrentStackFrameMagic = 0x41B58AB3
static

Definition at line 118 of file AddressSanitizer.cpp.

Referenced by StackMallocSizeClass().

◆ kDefaultShadowOffset32

const uint64_t kDefaultShadowOffset32 = 1ULL << 29
static

Definition at line 93 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kDefaultShadowOffset64

const uint64_t kDefaultShadowOffset64 = 1ULL << 44
static

Definition at line 94 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kDefaultShadowScale

const uint64_t kDefaultShadowScale = 3
static

Definition at line 92 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kDynamicShadowSentinel

const uint64_t kDynamicShadowSentinel
static
Initial value:
=
GCNRegPressure max(const GCNRegPressure &P1, const GCNRegPressure &P2)

Definition at line 95 of file AddressSanitizer.cpp.

Referenced by getShadowMapping(), and instrumentMaskedLoadOrStore().

◆ kFreeBSD_ShadowOffset32

const uint64_t kFreeBSD_ShadowOffset32 = 1ULL << 30
static

Definition at line 107 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kFreeBSD_ShadowOffset64

const uint64_t kFreeBSD_ShadowOffset64 = 1ULL << 46
static

Definition at line 108 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kIOSShadowOffset32

const uint64_t kIOSShadowOffset32 = 1ULL << 30
static

Definition at line 97 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kIOSSimShadowOffset32

const uint64_t kIOSSimShadowOffset32 = 1ULL << 30
static

Definition at line 98 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kIOSSimShadowOffset64

const uint64_t kIOSSimShadowOffset64 = kDefaultShadowOffset64
static

Definition at line 99 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kLinuxKasan_ShadowOffset64

const uint64_t kLinuxKasan_ShadowOffset64 = 0xdffffc0000000000
static

Definition at line 101 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kMaxAsanStackMallocSizeClass

const int kMaxAsanStackMallocSizeClass = 10
static

◆ kMaxStackMallocSize

const size_t kMaxStackMallocSize = 1 << 16
static

Definition at line 117 of file AddressSanitizer.cpp.

Referenced by StackMallocSizeClass().

◆ kMinStackMallocSize

const size_t kMinStackMallocSize = 1 << 6
static

Definition at line 116 of file AddressSanitizer.cpp.

Referenced by StackMallocSizeClass().

◆ kMIPS32_ShadowOffset32

const uint64_t kMIPS32_ShadowOffset32 = 0x0aaa0000
static

Definition at line 104 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kMIPS64_ShadowOffset64

const uint64_t kMIPS64_ShadowOffset64 = 1ULL << 37
static

Definition at line 105 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kNetBSD_ShadowOffset64

const uint64_t kNetBSD_ShadowOffset64 = 1ULL << 46
static

Definition at line 109 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kNumberOfAccessSizes

const size_t kNumberOfAccessSizes = 5
static

◆ kODRGenPrefix

const char* const kODRGenPrefix = "__odr_asan_gen_"
static

Definition at line 148 of file AddressSanitizer.cpp.

◆ kPPC64_ShadowOffset64

const uint64_t kPPC64_ShadowOffset64 = 1ULL << 41
static

Definition at line 102 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kPS4CPU_ShadowOffset64

const uint64_t kPS4CPU_ShadowOffset64 = 1ULL << 40
static

Definition at line 110 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kRetiredStackFrameMagic

const uintptr_t kRetiredStackFrameMagic = 0x45E0360E
static

Definition at line 119 of file AddressSanitizer.cpp.

Referenced by StackMallocSizeClass().

◆ kSanCovGenPrefix

const char* const kSanCovGenPrefix = "__sancov_gen_"
static

Definition at line 149 of file AddressSanitizer.cpp.

◆ kSmallX86_64ShadowOffset

const uint64_t kSmallX86_64ShadowOffset = 0x7FFF8000
static

Definition at line 100 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kSystemZ_ShadowOffset64

const uint64_t kSystemZ_ShadowOffset64 = 1ULL << 52
static

Definition at line 103 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kWindowsShadowOffset32

const uint64_t kWindowsShadowOffset32 = 3ULL << 28
static

Definition at line 111 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kWindowsShadowOffset64

const uint64_t kWindowsShadowOffset64 = kDynamicShadowSentinel
static

Definition at line 114 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().