LLVM
8.0.1
|
#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 GlobalVariable * | createPrivateGlobalForSourceLoc (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< bool > | ClEnableKasan ("asan-kernel", cl::desc("Enable KernelAddressSanitizer instrumentation"), cl::Hidden, cl::init(false)) |
static cl::opt< bool > | ClRecover ("asan-recover", cl::desc("Enable recovery mode (continue-after-error)."), cl::Hidden, cl::init(false)) |
static cl::opt< bool > | ClInstrumentReads ("asan-instrument-reads", cl::desc("instrument read instructions"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClInstrumentWrites ("asan-instrument-writes", cl::desc("instrument write instructions"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClInstrumentAtomics ("asan-instrument-atomics", cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClAlwaysSlowPath ("asan-always-slow-path", cl::desc("use instrumentation with slow path for all accesses"), cl::Hidden, cl::init(false)) |
static 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 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 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 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< bool > | ClStack ("asan-stack", cl::desc("Handle stack memory"), cl::Hidden, cl::init(true)) |
static 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 cl::opt< bool > | ClUseAfterReturn ("asan-use-after-return", cl::desc("Check stack-use-after-return"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClRedzoneByvalArgs ("asan-redzone-byval-args", cl::desc("Create redzones for byval " "arguments (extra copy " "required)"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClUseAfterScope ("asan-use-after-scope", cl::desc("Check stack-use-after-scope"), cl::Hidden, cl::init(false)) |
static cl::opt< bool > | ClGlobals ("asan-globals", cl::desc("Handle global objects"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClInitializers ("asan-initialization-order", cl::desc("Handle C++ initializer order"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClInvalidPointerPairs ("asan-detect-invalid-pointer-pair", cl::desc("Instrument <, <=, >, >=, - with pointer operands"), cl::Hidden, cl::init(false)) |
static 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 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< bool > | ClInstrumentDynamicAllocas ("asan-instrument-dynamic-allocas", cl::desc("instrument dynamic allocas"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClSkipPromotableAllocas ("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< bool > | ClOpt ("asan-opt", cl::desc("Optimize instrumentation"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClOptSameTemp ("asan-opt-same-temp", cl::desc("Instrument the same temp just once"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClOptGlobals ("asan-opt-globals", cl::desc("Don't instrument scalar globals"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClOptStack ("asan-opt-stack", cl::desc("Don't instrument scalar stack variables"), cl::Hidden, cl::init(false)) |
static cl::opt< bool > | ClDynamicAllocaStack ("asan-stack-dynamic-alloca", cl::desc("Use dynamic alloca to represent stack variables"), cl::Hidden, cl::init(true)) |
static cl::opt< uint32_t > | ClForceExperiment ("asan-force-experiment", cl::desc("Force optimization experiment (for testing)"), cl::Hidden, cl::init(0)) |
static cl::opt< bool > | ClUsePrivateAlias ("asan-use-private-alias", cl::desc("Use private aliases for global variables"), cl::Hidden, cl::init(false)) |
static cl::opt< bool > | ClUseOdrIndicator ("asan-use-odr-indicator", cl::desc("Use odr indicators to improve ODR reporting"), cl::Hidden, cl::init(false)) |
static 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 cl::opt< bool > | ClWithComdat ("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 |
#define DEBUG_TYPE "asan" |
Definition at line 90 of file AddressSanitizer.cpp.
|
static |
Create a global describing a source location.
Definition at line 1121 of file AddressSanitizer.cpp.
References llvm::createPrivateGlobalForString(), llvm::ConstantInt::get(), llvm::ConstantStruct::getAnon(), llvm::Module::getContext(), llvm::Type::getInt32Ty(), llvm::GlobalValue::Global, kAsanGenPrefix, llvm::GlobalValue::PrivateLinkage, and llvm::GlobalValue::setUnnamedAddr().
Referenced by instrumentMaskedLoadOrStore().
|
static |
Definition at line 1346 of file AddressSanitizer.cpp.
Referenced by instrumentMaskedLoadOrStore().
Definition at line 491 of file AddressSanitizer.cpp.
References llvm::Triple::aarch64, ClForceDynamicShadow, ClMappingOffset, ClMappingScale, ClWithIfunc, llvm::Triple::getArch(), llvm::Triple::getVendor(), llvm::Triple::isAndroid(), llvm::Triple::isAndroidVersionLT(), llvm::Triple::isARM(), llvm::Triple::isiOS(), llvm::Triple::isMIPS32(), llvm::Triple::isMIPS64(), llvm::Triple::isOSFreeBSD(), llvm::Triple::isOSFuchsia(), llvm::Triple::isOSLinux(), llvm::Triple::isOSNetBSD(), llvm::Triple::isOSWindows(), llvm::Triple::isPS4CPU(), llvm::Triple::isThumb(), llvm::Triple::isWatchOS(), kAArch64_ShadowOffset64, kDefaultShadowOffset32, kDefaultShadowOffset64, kDefaultShadowScale, kDynamicShadowSentinel, kFreeBSD_ShadowOffset32, kFreeBSD_ShadowOffset64, kIOSShadowOffset32, kIOSSimShadowOffset32, kIOSSimShadowOffset64, kLinuxKasan_ShadowOffset64, kMIPS32_ShadowOffset32, kMIPS64_ShadowOffset64, kMyriadMemoryOffset32, kMyriadMemorySize32, kMyriadShadowScale, kNetBSD_ShadowOffset32, kNetBSD_ShadowOffset64, kNetBSDKasan_ShadowOffset64, kPPC64_ShadowOffset64, kPS4CPU_ShadowOffset64, kSmallX86_64ShadowOffsetAlignMask, kSmallX86_64ShadowOffsetBase, kSystemZ_ShadowOffset64, kWindowsShadowOffset32, kWindowsShadowOffset64, llvm::Triple::Myriad, llvm::Triple::ppc64, llvm::Triple::ppc64le, llvm::Triple::systemz, llvm::Triple::x86, and llvm::Triple::x86_64.
Referenced by instrumentMaskedLoadOrStore().
|
static |
Check if G
has been created by a trusted compiler pass.
Definition at line 1137 of file AddressSanitizer.cpp.
References ClInstrumentAtomics, ClInstrumentReads, ClInstrumentWrites, ClSkipPromotableAllocas, llvm::IRBuilder< T, Inserter >::CreateAdd(), llvm::IRBuilder< T, Inserter >::CreateCall(), llvm::IRBuilder< T, Inserter >::CreateIntCast(), llvm::IRBuilder< T, Inserter >::CreateLShr(), llvm::IRBuilder< T, Inserter >::CreateOr(), llvm::IRBuilder< T, Inserter >::CreatePointerCast(), llvm::dyn_cast(), llvm::Instruction::eraseFromParent(), F(), llvm::ConstantInt::get(), getAllocaSizeInBytes(), llvm::AllocaInst::getAllocatedType(), llvm::Module::getDataLayout(), llvm::IRBuilderBase::getInt32Ty(), llvm::IRBuilderBase::getInt8PtrTy(), llvm::Instruction::getMetadata(), llvm::Instruction::getModule(), llvm::Value::getName(), llvm::User::getOperand(), llvm::Type::getPointerAddressSpace(), llvm::Type::getScalarType(), llvm::Value::getType(), llvm::DataLayout::getTypeStoreSizeInBits(), I, llvm::isAllocaPromotable(), llvm::Type::isSized(), llvm::AllocaInst::isStaticAlloca(), llvm::AllocaInst::isSwiftError(), llvm::Value::isSwiftError(), llvm::AllocaInst::isUsedWithInAlloca(), MI, SI, and llvm::StringRef::startswith().
Referenced by instrumentMaskedLoadOrStore().
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 | ( | AddressSanitizer | , |
"asan" | , | ||
"AddressSanitizer: detects use-after-free and out-of-bounds bugs." | , | ||
false | , | ||
false | |||
) |
|
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.
|
static |
Definition at line 1315 of file AddressSanitizer.cpp.
References llvm::IRBuilder< T, Inserter >::CreateCall(), llvm::IRBuilder< T, Inserter >::CreatePointerCast(), F(), G, llvm::User::getOperand(), llvm::GlobalVariable::hasInitializer(), I, and isPointerOperand().
Referenced by instrumentMaskedLoadOrStore().
Definition at line 1308 of file AddressSanitizer.cpp.
References llvm::Value::getType(), and llvm::Type::isPointerTy().
Referenced by isInterestingPointerComparisonOrSubtraction().
|
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.
|
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 | ( | 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 |
Definition at line 1114 of file AddressSanitizer.cpp.
References assert(), llvm::countTrailingZeros(), and kNumberOfAccessSizes.
Referenced by instrumentMaskedLoadOrStore().
AddressSanitizer __pad0__ |
Definition at line 1086 of file AddressSanitizer.cpp.
asan |
Definition at line 1086 of file AddressSanitizer.cpp.
|
static |
Referenced by instrumentMaskedLoadOrStore().
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by RedzoneSizeForScale().
|
static |
Referenced by StackMallocSizeClass().
|
static |
Referenced by RedzoneSizeForScale().
|
static |
Referenced by getShadowMapping().
|
static |
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by GlobalWasGeneratedByCompiler().
|
static |
Referenced by RedzoneSizeForScale(), and StackMallocSizeClass().
|
static |
Referenced by GlobalWasGeneratedByCompiler().
|
static |
Referenced by GlobalWasGeneratedByCompiler().
|
static |
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by getShadowMapping().
|
static |
Referenced by getShadowMapping().
|
static |
|
static |
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by instrumentMaskedLoadOrStore().
|
static |
Referenced by StackMallocSizeClass().
|
static |
Referenced by RedzoneSizeForScale().
|
static |
Referenced by RedzoneSizeForScale().
|
static |
Referenced by GlobalWasGeneratedByCompiler().
|
static |
Referenced by RedzoneSizeForScale().
|
static |
Referenced by StackMallocSizeClass().
|
static |
Referenced by RedzoneSizeForScale().
|
static |
Referenced by RedzoneSizeForScale().
|
static |
Referenced by RedzoneSizeForScale().
|
static |
Referenced by RedzoneSizeForScale().
|
static |
Referenced by RedzoneSizeForScale().
|
static |
Referenced by getShadowMapping().
|
static |
Referenced by instrumentMaskedLoadOrStore().
AddressSanitizer false |
Definition at line 1086 of file AddressSanitizer.cpp.
|
static |
Definition at line 107 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 183 of file AddressSanitizer.cpp.
Definition at line 177 of file AddressSanitizer.cpp.
Definition at line 178 of file AddressSanitizer.cpp.
|
static |
Definition at line 133 of file AddressSanitizer.cpp.
Referenced by instrumentMaskedLoadOrStore().
Definition at line 157 of file AddressSanitizer.cpp.
Referenced by createPrivateGlobalForSourceLoc(), instrumentMaskedLoadOrStore(), and StackMallocSizeClass().
Definition at line 168 of file AddressSanitizer.cpp.
Definition at line 153 of file AddressSanitizer.cpp.
Definition at line 148 of file AddressSanitizer.cpp.
Referenced by instrumentMaskedLoadOrStore().
Definition at line 131 of file AddressSanitizer.cpp.
Referenced by instrumentMaskedLoadOrStore().
Definition at line 132 of file AddressSanitizer.cpp.
Definition at line 171 of file AddressSanitizer.cpp.
Definition at line 146 of file AddressSanitizer.cpp.
Definition at line 161 of file AddressSanitizer.cpp.
Definition at line 151 of file AddressSanitizer.cpp.
Definition at line 152 of file AddressSanitizer.cpp.
Definition at line 142 of file AddressSanitizer.cpp.
Definition at line 135 of file AddressSanitizer.cpp.
Definition at line 138 of file AddressSanitizer.cpp.
Definition at line 134 of file AddressSanitizer.cpp.
Definition at line 160 of file AddressSanitizer.cpp.
Referenced by instrumentMaskedLoadOrStore().
Definition at line 174 of file AddressSanitizer.cpp.
Definition at line 156 of file AddressSanitizer.cpp.
Definition at line 155 of file AddressSanitizer.cpp.
Definition at line 147 of file AddressSanitizer.cpp.
Definition at line 163 of file AddressSanitizer.cpp.
Definition at line 144 of file AddressSanitizer.cpp.
Definition at line 136 of file AddressSanitizer.cpp.
Definition at line 140 of file AddressSanitizer.cpp.
Definition at line 149 of file AddressSanitizer.cpp.
|
static |
Definition at line 128 of file AddressSanitizer.cpp.
Referenced by StackMallocSizeClass().
|
static |
Definition at line 93 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 94 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 92 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 95 of file AddressSanitizer.cpp.
Referenced by getShadowMapping(), and instrumentMaskedLoadOrStore().
|
static |
Definition at line 108 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 109 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 97 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 98 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 99 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 102 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 154 of file AddressSanitizer.cpp.
Referenced by instrumentMaskedLoadOrStore(), RedzoneSizeForScale(), and StackMallocSizeClass().
|
static |
Definition at line 127 of file AddressSanitizer.cpp.
Referenced by StackMallocSizeClass().
|
static |
Definition at line 126 of file AddressSanitizer.cpp.
Referenced by StackMallocSizeClass().
|
static |
Definition at line 105 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 106 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 121 of file AddressSanitizer.cpp.
Referenced by instrumentMaskedLoadOrStore().
|
static |
Definition at line 120 of file AddressSanitizer.cpp.
Referenced by instrumentMaskedLoadOrStore().
|
static |
Definition at line 117 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 118 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 116 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 119 of file AddressSanitizer.cpp.
Referenced by instrumentMaskedLoadOrStore().
|
static |
Definition at line 110 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 111 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 112 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 181 of file AddressSanitizer.cpp.
Referenced by createOrdering(), llvm::createThreadSanitizerLegacyPassPass(), instrumentMaskedLoadOrStore(), RedzoneSizeForScale(), and TypeSizeToSizeIndex().
Definition at line 158 of file AddressSanitizer.cpp.
|
static |
Definition at line 103 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 113 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 129 of file AddressSanitizer.cpp.
Referenced by StackMallocSizeClass().
Definition at line 159 of file AddressSanitizer.cpp.
|
static |
Definition at line 101 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 100 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 104 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 114 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 124 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().