LLVM  8.0.1
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/SmallPtrSet.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/Transforms/Utils/Local.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/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 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_64ShadowOffsetBase = 0x7FFFFFFF
 
static const uint64_t kSmallX86_64ShadowOffsetAlignMask = ~0xFFFULL
 
static const uint64_t kLinuxKasan_ShadowOffset64 = 0xdffffc0000000000
 
static const uint64_t kPPC64_ShadowOffset64 = 1ULL << 44
 
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_ShadowOffset32 = 1ULL << 30
 
static const uint64_t kNetBSD_ShadowOffset64 = 1ULL << 46
 
static const uint64_t kNetBSDKasan_ShadowOffset64 = 0xdfff900000000000
 
static const uint64_t kPS4CPU_ShadowOffset64 = 1ULL << 40
 
static const uint64_t kWindowsShadowOffset32 = 3ULL << 28
 
static const uint64_t kMyriadShadowScale = 5
 
static const uint64_t kMyriadMemoryOffset32 = 0x80000000ULL
 
static const uint64_t kMyriadMemorySize32 = 0x20000000ULL
 
static const uint64_t kMyriadTagShift = 29
 
static const uint64_t kMyriadDDRTag = 4
 
static const uint64_t kMyriadCacheBitMask32 = 0x40000000ULL
 
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 kAsanVersionCheckNamePrefix
 
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< boolClWithIfunc ("asan-with-ifunc", cl::desc("Access dynamic shadow through an ifunc global on " "platforms that support this"), cl::Hidden, cl::init(true))
 
static cl::opt< boolClWithIfuncSuppressRemat ("asan-with-ifunc-suppress-remat", cl::desc("Suppress rematerialization of dynamic shadow address by passing " "it through inline asm in prologue."), cl::Hidden, cl::init(true))
 
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< boolClUsePrivateAlias ("asan-use-private-alias", cl::desc("Use private aliases for global variables"), cl::Hidden, cl::init(false))
 
static cl::opt< boolClUseOdrIndicator ("asan-use-odr-indicator", cl::desc("Use odr indicators to improve ODR reporting"), 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

◆ 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 1346 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 1099 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   
)

◆ 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 1363 of file AddressSanitizer.cpp.

References llvm::GlobalVariable::addDebugInfo(), llvm::Comdat::Any, llvm::appendToCompilerUsed(), llvm::appendToGlobalCtors(), llvm::appendToGlobalDtors(), Arg, llvm::CallBase::arg_operands(), llvm::HexStyle::Asm, assert(), llvm::GlobalValue::AvailableExternallyLinkage, llvm::BasicBlock::begin(), C, llvm::checkSanitizerInterfaceFunction(), ClAlwaysSlowPath, ClDebugFunc, ClDebugMax, ClDebugMin, llvm::SmallPtrSetImplBase::clear(), ClForceExperiment, ClGlobals, ClInitializers, ClInstrumentationWithCallsThreshold, ClInvalidPointerPairs, ClMaxInsnsToInstrumentPerBB, ClMemoryAccessCallbackPrefix, ClOpt, ClOptGlobals, ClOptSameTemp, ClOptStack, ClWithIfuncSuppressRemat, llvm::Triple::COFF, llvm::GlobalValue::CommonLinkage, llvm::StringRef::contains(), llvm::GlobalVariable::copyAttributesFrom(), llvm::SmallPtrSetImpl< PtrType >::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 >::CreateAnd(), llvm::MDBuilder::createBranchWeights(), llvm::IRBuilder< T, Inserter >::CreateCall(), llvm::IRBuilder< T, Inserter >::CreateExtractElement(), llvm::IRBuilder< T, Inserter >::CreateGEP(), llvm::IRBuilder< T, Inserter >::CreateICmpEQ(), 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 >::CreateLShr(), llvm::IRBuilder< T, Inserter >::CreatePointerCast(), createPrivateGlobalForSourceLoc(), llvm::createPrivateGlobalForString(), llvm::createSanitizerCtorAndInitFunctions(), llvm::dbgs(), 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::Comdat::ExactMatch, 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::Type::getIntNTy(), llvm::IntrinsicInst::getIntrinsicID(), llvm::ConstantExpr::getIntToPtr(), llvm::ConstantInt::getLimitedValue(), llvm::GlobalValue::getLinkage(), llvm::Module::getModuleIdentifier(), llvm::Value::getName(), llvm::Constant::getNullValue(), llvm::CallBase::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::GlobalObject::getSection(), getShadowMapping(), llvm::Instruction::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::GlobalValue::hasExactDefinition(), llvm::Function::hasFnAttribute(), llvm::GlobalVariable::hasInitializer(), llvm::GlobalValue::hasLocalLinkage(), llvm::Value::hasName(), llvm::GlobalValue::hasPrivateLinkage(), llvm::GlobalObject::hasSection(), llvm::GlobalValue::HiddenVisibility, I, llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::GlobalValue::InternalLinkage, llvm::GlobalVariable::isConstant(), llvm::CallInst::isInlineAsm(), isInterestingPointerComparisonOrSubtraction(), llvm::GlobalValue::isInterposable(), llvm::isPowerOf2_32(), llvm::Type::isSized(), llvm::AllocaInst::isStaticAlloca(), llvm::GlobalValue::isThreadLocal(), llvm::itostr(), kAsanCtorAndDtorPriority, kAsanGenPrefix, kAsanInitName, kAsanModuleCtorName, kAsanSetShadowPrefix, kDynamicShadowSentinel, kMaxAsanStackMallocSizeClass, kMyriadCacheBitMask32, kMyriadDDRTag, kMyriadTagShift, kNumberOfAccessSizes, llvm::Comdat::Largest, LLVM_DEBUG, llvm_unreachable, llvm::Intrinsic::localescape, llvm::Triple::MachO, llvm::max(), llvm::maybeMarkSanitizerLibraryCallNoBuiltin(), llvm::LLVMContext::MD_associated, llvm::Triple::Myriad, N, Name, llvm::Comdat::NoDuplicates, llvm::GlobalValue::None, llvm::StringRef::npos, OP, llvm::User::operands(), llvm::MCSectionMachO::ParseSectionSpecifier(), llvm::GlobalValue::PrivateLinkage, llvm::SmallVectorTemplateBase< T >::push_back(), llvm::Value::replaceAllUsesWith(), llvm::ReplaceInstWithInst(), llvm::ObjectSizeOpts::RoundToAlign, runOnFunction(), llvm::NVPTX::PTXCvtMode::RZ, llvm::MachO::S_CSTRING_LITERALS, llvm::Comdat::SameSize, llvm::Attribute::SanitizeAddress, llvm::ARMBuildAttrs::Section, llvm::GlobalObject::setAlignment(), llvm::GlobalObject::setComdat(), llvm::Instruction::setDebugLoc(), llvm::IRBuilderBase::SetInsertPoint(), llvm::GlobalValue::setLinkage(), llvm::GlobalObject::setMetadata(), llvm::Value::setName(), llvm::GlobalObject::setSection(), llvm::Comdat::setSelectionKind(), llvm::GlobalValue::setUnnamedAddr(), llvm::GlobalValue::setVisibility(), Size, llvm::SmallVectorBase::size(), llvm::ArrayRef< T >::size(), llvm::SplitBlockAndInsertIfThen(), llvm::StringRef::startswith(), llvm::Value::stripPointerCasts(), llvm::Tag, llvm::Value::takeName(), llvm::to_string(), TypeSizeToSizeIndex(), and llvm::IndexedInstrProf::Version.

◆ 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 602 of file AddressSanitizer.cpp.

References llvm::AnalysisUsage::addRequired(), assert(), C, ClDebugStack, ClEnableKasan, ClInstrumentDynamicAllocas, ClRecover, ClRedzoneByvalArgs, ClStack, ClUseAfterScope, ClUseGlobalsGC, ClUseOdrIndicator, ClUsePrivateAlias, 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(), llvm::depth_first(), llvm::dyn_cast(), llvm::SmallVectorBase::empty(), F(), G, llvm::PointerType::get(), llvm::Intrinsic::get_dynamic_area_offset, llvm::AllocaInst::getAlignment(), getAllocaSizeInBytes(), llvm::AllocaInst::getAllocatedType(), llvm::CallBase::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, llvm::initializeAddressSanitizerPass(), llvm::AllocaInst::isArrayAllocation(), llvm::Instruction::isLifetimeStartOrEnd(), llvm::ConstantInt::isMinusOne(), llvm::AllocaInst::isStaticAlloca(), llvm::ConstantInt::isValueValidForType(), kMaxAsanStackMallocSizeClass, kNumberOfAccessSizes, llvm::Intrinsic::lifetime_end, LLVM_DEBUG, llvm::Intrinsic::localescape, llvm::max(), MI, Pass, llvm::SmallVectorTemplateBase< T >::push_back(), llvm::MipsISD::Ret, runOnFunction(), Size, and llvm::Intrinsic::stackrestore.

◆ StackMallocSizeClass()

static int StackMallocSizeClass ( uint64_t  LocalStackSize)
static

Definition at line 2769 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(), llvm::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(), 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(), kAsanGenPrefix, llvm::kAsanStackUseAfterReturnMagic, kCurrentStackFrameMagic, kMaxAsanStackMallocSizeClass, kMaxStackMallocSize, kMinStackMallocSize, kRetiredStackFrameMagic, LLVM_DEBUG, llvm_unreachable, llvm::max(), llvm::Instruction::moveBefore(), llvm::DIExpression::NoDeref, llvm::ASanStackVariableDescription::Offset, llvm::SmallVectorTemplateBase< T >::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(), Size, llvm::SplitBlockAndInsertIfThen(), and llvm::SplitBlockAndInsertIfThenElse().

◆ 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 1086 of file AddressSanitizer.cpp.

◆ asan

asan

Definition at line 1086 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().

◆ ClUseOdrIndicator

cl::opt<bool> ClUseOdrIndicator("asan-use-odr-indicator", cl::desc("Use odr indicators to improve ODR reporting"), cl::Hidden, cl::init(false))
static

Referenced by RedzoneSizeForScale().

◆ ClUsePrivateAlias

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

Referenced by RedzoneSizeForScale().

◆ 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().

◆ ClWithIfunc

cl::opt<bool> ClWithIfunc("asan-with-ifunc", cl::desc("Access dynamic shadow through an ifunc global on " "platforms that support this"), cl::Hidden, cl::init(true))
static

Referenced by getShadowMapping().

◆ ClWithIfuncSuppressRemat

cl::opt<bool> ClWithIfuncSuppressRemat("asan-with-ifunc-suppress-remat", cl::desc("Suppress rematerialization of dynamic shadow address by passing " "it through inline asm in prologue."), cl::Hidden, cl::init(true))
static

◆ false

AddressSanitizer false

Definition at line 1086 of file AddressSanitizer.cpp.

◆ kAArch64_ShadowOffset64

const uint64_t kAArch64_ShadowOffset64 = 1ULL << 36
static

Definition at line 107 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kAllocaRzSize

const unsigned kAllocaRzSize = 32
static

Definition at line 183 of file AddressSanitizer.cpp.

◆ kAsanAllocaPoison

const char* const kAsanAllocaPoison = "__asan_alloca_poison"
static

Definition at line 177 of file AddressSanitizer.cpp.

◆ kAsanAllocasUnpoison

const char* const kAsanAllocasUnpoison = "__asan_allocas_unpoison"
static

Definition at line 178 of file AddressSanitizer.cpp.

◆ kAsanCtorAndDtorPriority

const uint64_t kAsanCtorAndDtorPriority = 1
static

Definition at line 133 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 168 of file AddressSanitizer.cpp.

◆ kAsanHandleNoReturnName

const char* const kAsanHandleNoReturnName = "__asan_handle_no_return"
static

Definition at line 153 of file AddressSanitizer.cpp.

◆ kAsanInitName

const char* const kAsanInitName = "__asan_init"
static

Definition at line 148 of file AddressSanitizer.cpp.

Referenced by instrumentMaskedLoadOrStore().

◆ kAsanModuleCtorName

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

Definition at line 131 of file AddressSanitizer.cpp.

Referenced by instrumentMaskedLoadOrStore().

◆ kAsanModuleDtorName

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

Definition at line 132 of file AddressSanitizer.cpp.

◆ kAsanOptionDetectUseAfterReturn

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

Definition at line 171 of file AddressSanitizer.cpp.

◆ kAsanPoisonGlobalsName

const char* const kAsanPoisonGlobalsName = "__asan_before_dynamic_init"
static

Definition at line 146 of file AddressSanitizer.cpp.

◆ kAsanPoisonStackMemoryName

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

Definition at line 161 of file AddressSanitizer.cpp.

◆ kAsanPtrCmp

const char* const kAsanPtrCmp = "__sanitizer_ptr_cmp"
static

Definition at line 151 of file AddressSanitizer.cpp.

◆ kAsanPtrSub

const char* const kAsanPtrSub = "__sanitizer_ptr_sub"
static

Definition at line 152 of file AddressSanitizer.cpp.

◆ kAsanRegisterElfGlobalsName

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

Definition at line 142 of file AddressSanitizer.cpp.

◆ kAsanRegisterGlobalsName

const char* const kAsanRegisterGlobalsName = "__asan_register_globals"
static

Definition at line 135 of file AddressSanitizer.cpp.

◆ kAsanRegisterImageGlobalsName

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

Definition at line 138 of file AddressSanitizer.cpp.

◆ kAsanReportErrorTemplate

const char* const kAsanReportErrorTemplate = "__asan_report_"
static

Definition at line 134 of file AddressSanitizer.cpp.

◆ kAsanSetShadowPrefix

const char* const kAsanSetShadowPrefix = "__asan_set_shadow_"
static

Definition at line 160 of file AddressSanitizer.cpp.

Referenced by instrumentMaskedLoadOrStore().

◆ kAsanShadowMemoryDynamicAddress

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

Definition at line 174 of file AddressSanitizer.cpp.

◆ kAsanStackFreeNameTemplate

const char* const kAsanStackFreeNameTemplate = "__asan_stack_free_"
static

Definition at line 156 of file AddressSanitizer.cpp.

◆ kAsanStackMallocNameTemplate

const char* const kAsanStackMallocNameTemplate = "__asan_stack_malloc_"
static

Definition at line 155 of file AddressSanitizer.cpp.

◆ kAsanUnpoisonGlobalsName

const char* const kAsanUnpoisonGlobalsName = "__asan_after_dynamic_init"
static

Definition at line 147 of file AddressSanitizer.cpp.

◆ kAsanUnpoisonStackMemoryName

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

Definition at line 163 of file AddressSanitizer.cpp.

◆ kAsanUnregisterElfGlobalsName

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

Definition at line 144 of file AddressSanitizer.cpp.

◆ kAsanUnregisterGlobalsName

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

Definition at line 136 of file AddressSanitizer.cpp.

◆ kAsanUnregisterImageGlobalsName

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

Definition at line 140 of file AddressSanitizer.cpp.

◆ kAsanVersionCheckNamePrefix

const char* const kAsanVersionCheckNamePrefix
static
Initial value:
=
"__asan_version_mismatch_check_v"

Definition at line 149 of file AddressSanitizer.cpp.

◆ kCurrentStackFrameMagic

const uintptr_t kCurrentStackFrameMagic = 0x41B58AB3
static

Definition at line 128 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 108 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kFreeBSD_ShadowOffset64

const uint64_t kFreeBSD_ShadowOffset64 = 1ULL << 46
static

Definition at line 109 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 102 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kMaxAsanStackMallocSizeClass

const int kMaxAsanStackMallocSizeClass = 10
static

◆ kMaxStackMallocSize

const size_t kMaxStackMallocSize = 1 << 16
static

Definition at line 127 of file AddressSanitizer.cpp.

Referenced by StackMallocSizeClass().

◆ kMinStackMallocSize

const size_t kMinStackMallocSize = 1 << 6
static

Definition at line 126 of file AddressSanitizer.cpp.

Referenced by StackMallocSizeClass().

◆ kMIPS32_ShadowOffset32

const uint64_t kMIPS32_ShadowOffset32 = 0x0aaa0000
static

Definition at line 105 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kMIPS64_ShadowOffset64

const uint64_t kMIPS64_ShadowOffset64 = 1ULL << 37
static

Definition at line 106 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kMyriadCacheBitMask32

const uint64_t kMyriadCacheBitMask32 = 0x40000000ULL
static

Definition at line 121 of file AddressSanitizer.cpp.

Referenced by instrumentMaskedLoadOrStore().

◆ kMyriadDDRTag

const uint64_t kMyriadDDRTag = 4
static

Definition at line 120 of file AddressSanitizer.cpp.

Referenced by instrumentMaskedLoadOrStore().

◆ kMyriadMemoryOffset32

const uint64_t kMyriadMemoryOffset32 = 0x80000000ULL
static

Definition at line 117 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kMyriadMemorySize32

const uint64_t kMyriadMemorySize32 = 0x20000000ULL
static

Definition at line 118 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kMyriadShadowScale

const uint64_t kMyriadShadowScale = 5
static

Definition at line 116 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kMyriadTagShift

const uint64_t kMyriadTagShift = 29
static

Definition at line 119 of file AddressSanitizer.cpp.

Referenced by instrumentMaskedLoadOrStore().

◆ kNetBSD_ShadowOffset32

const uint64_t kNetBSD_ShadowOffset32 = 1ULL << 30
static

Definition at line 110 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kNetBSD_ShadowOffset64

const uint64_t kNetBSD_ShadowOffset64 = 1ULL << 46
static

Definition at line 111 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kNetBSDKasan_ShadowOffset64

const uint64_t kNetBSDKasan_ShadowOffset64 = 0xdfff900000000000
static

Definition at line 112 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 158 of file AddressSanitizer.cpp.

◆ kPPC64_ShadowOffset64

const uint64_t kPPC64_ShadowOffset64 = 1ULL << 44
static

Definition at line 103 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kPS4CPU_ShadowOffset64

const uint64_t kPS4CPU_ShadowOffset64 = 1ULL << 40
static

Definition at line 113 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kRetiredStackFrameMagic

const uintptr_t kRetiredStackFrameMagic = 0x45E0360E
static

Definition at line 129 of file AddressSanitizer.cpp.

Referenced by StackMallocSizeClass().

◆ kSanCovGenPrefix

const char* const kSanCovGenPrefix = "__sancov_gen_"
static

Definition at line 159 of file AddressSanitizer.cpp.

◆ kSmallX86_64ShadowOffsetAlignMask

const uint64_t kSmallX86_64ShadowOffsetAlignMask = ~0xFFFULL
static

Definition at line 101 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kSmallX86_64ShadowOffsetBase

const uint64_t kSmallX86_64ShadowOffsetBase = 0x7FFFFFFF
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 104 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kWindowsShadowOffset32

const uint64_t kWindowsShadowOffset32 = 3ULL << 28
static

Definition at line 114 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().

◆ kWindowsShadowOffset64

const uint64_t kWindowsShadowOffset64 = kDynamicShadowSentinel
static

Definition at line 124 of file AddressSanitizer.cpp.

Referenced by getShadowMapping().