LLVM
13.0.0git
|
#include "llvm/Transforms/Instrumentation/AddressSanitizer.h"
#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/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/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/InitializePasses.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/Instrumentation/AddressSanitizerCommon.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 uint64_t | getRedzoneSizeForScale (int MappingScale) |
static uint64_t | GetCtorAndDtorPriority (Triple &TargetTriple) |
INITIALIZE_PASS(ASanGlobalsMetadataWrapperPass, "asan-globals-md", "Read metadata to mark which globals should be instrumented " "when running ASan.", false, true) char AddressSanitizerLegacyPass | INITIALIZE_PASS_BEGIN (AddressSanitizerLegacyPass, "asan", "AddressSanitizer: detects use-after-free and out-of-bounds bugs.", false, false) INITIALIZE_PASS_END(AddressSanitizerLegacyPass |
INITIALIZE_PASS (ModuleAddressSanitizerLegacyPass, "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 | isInterestingPointerComparison (Instruction *I) |
static bool | isInterestingPointerSubtraction (Instruction *I) |
static void | doInstrumentAddress (AddressSanitizer *Pass, Instruction *I, Instruction *InsertBefore, Value *Addr, MaybeAlign 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, MaybeAlign Alignment, unsigned Granularity, uint32_t TypeSize, bool IsWrite, Value *SizeArgument, bool UseCalls, uint32_t Exp) |
static int | StackMallocSizeClass (uint64_t LocalStackSize) |
static void | findStoresToUninstrumentedArgAllocas (AddressSanitizer &ASan, Instruction &InsBefore, SmallVectorImpl< Instruction * > &InitInsts) |
Collect instructions in the entry block after InsBefore which initialize permanent storage for a function argument. More... | |
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 | 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 | kRISCV64_ShadowOffset64 = 0x20000000 |
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 | kEmscriptenShadowOffset = 0 |
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 |
const char | kAsanModuleCtorName [] = "asan.module_ctor" |
const char | kAsanModuleDtorName [] = "asan.module_dtor" |
static const uint64_t | kAsanCtorAndDtorPriority = 1 |
static const uint64_t | kAsanEmscriptenCtorAndDtorPriority = 50 |
const char | kAsanReportErrorTemplate [] = "__asan_report_" |
const char | kAsanRegisterGlobalsName [] = "__asan_register_globals" |
const char | kAsanUnregisterGlobalsName [] = "__asan_unregister_globals" |
const char | kAsanRegisterImageGlobalsName [] = "__asan_register_image_globals" |
const char | kAsanUnregisterImageGlobalsName [] |
const char | kAsanRegisterElfGlobalsName [] = "__asan_register_elf_globals" |
const char | kAsanUnregisterElfGlobalsName [] = "__asan_unregister_elf_globals" |
const char | kAsanPoisonGlobalsName [] = "__asan_before_dynamic_init" |
const char | kAsanUnpoisonGlobalsName [] = "__asan_after_dynamic_init" |
const char | kAsanInitName [] = "__asan_init" |
const char | kAsanVersionCheckNamePrefix [] = "__asan_version_mismatch_check_v" |
const char | kAsanPtrCmp [] = "__sanitizer_ptr_cmp" |
const char | kAsanPtrSub [] = "__sanitizer_ptr_sub" |
const char | kAsanHandleNoReturnName [] = "__asan_handle_no_return" |
static const int | kMaxAsanStackMallocSizeClass = 10 |
const char | kAsanStackMallocNameTemplate [] = "__asan_stack_malloc_" |
const char | kAsanStackFreeNameTemplate [] = "__asan_stack_free_" |
const char | kAsanGenPrefix [] = "___asan_gen_" |
const char | kODRGenPrefix [] = "__odr_asan_gen_" |
const char | kSanCovGenPrefix [] = "__sancov_gen_" |
const char | kAsanSetShadowPrefix [] = "__asan_set_shadow_" |
const char | kAsanPoisonStackMemoryName [] = "__asan_poison_stack_memory" |
const char | kAsanUnpoisonStackMemoryName [] = "__asan_unpoison_stack_memory" |
const char | kAsanGlobalsRegisteredFlagName [] = "___asan_globals_registered" |
const char | kAsanOptionDetectUseAfterReturn [] |
const char | kAsanShadowMemoryDynamicAddress [] |
const char | kAsanAllocaPoison [] = "__asan_alloca_poison" |
const char | 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 > | ClInsertVersionCheck ("asan-guard-against-version-mismatch", cl::desc("Guard against compiler/runtime version mismatch."), cl::Hidden, cl::init(true)) |
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 > | ClInstrumentByval ("asan-instrument-byval", cl::desc("instrument byval call arguments"), 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< bool > | ClInvalidPointerCmp ("asan-detect-invalid-pointer-cmp", cl::desc("Instrument <, <=, >, >= with pointer operands"), cl::Hidden, cl::init(false)) |
static cl::opt< bool > | ClInvalidPointerSub ("asan-detect-invalid-pointer-sub", cl::desc("Instrument - operations 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< uint64_t > | 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< AsanDtorKind > | ClOverrideDestructorKind ("asan-destructor-kind", cl::desc("Sets the ASan destructor kind. The default is to use the value " "provided to the pass constructor"), cl::values(clEnumValN(AsanDtorKind::None, "none", "No destructors"), clEnumValN(AsanDtorKind::Global, "global", "Use global destructors")), cl::init(AsanDtorKind::Invalid), cl::Hidden) |
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)) |
INITIALIZE_PASS(ASanGlobalsMetadataWrapperPass, "asan-globals-md", "Read metadata to mark which globals should be instrumented " "when running ASan.", false, true) char AddressSanitizerLegacyPass | asan |
INITIALIZE_PASS(ASanGlobalsMetadataWrapperPass, "asan-globals-md", "Read metadata to mark which globals should be instrumented " "when running ASan.", false, true) char AddressSanitizerLegacyPass | AddressSanitizer |
INITIALIZE_PASS(ASanGlobalsMetadataWrapperPass, "asan-globals-md", "Read metadata to mark which globals should be instrumented " "when running ASan.", false, true) char AddressSanitizerLegacyPass | false |
#define DEBUG_TYPE "asan" |
Definition at line 93 of file AddressSanitizer.cpp.
|
static |
Create a global describing a source location.
Definition at line 1273 of file AddressSanitizer.cpp.
References llvm::LocationMetadata::ColumnNo, llvm::createPrivateGlobalForString(), llvm::LocationMetadata::Filename, llvm::ConstantInt::get(), llvm::ConstantStruct::getAnon(), llvm::Type::getInt32Ty(), llvm::GlobalValue::Global, kAsanGenPrefix, llvm::LocationMetadata::LineNo, M, and llvm::GlobalValue::PrivateLinkage.
|
static |
Definition at line 1506 of file AddressSanitizer.cpp.
Referenced by instrumentMaskedLoadOrStore().
|
static |
Collect instructions in the entry block after InsBefore
which initialize permanent storage for a function argument.
These instructions must remain in the entry block so that uninitialized values do not appear in backtraces. An added benefit is that this conserves spill slots. This does not move stores before instrumented / "interesting" allocas.
Definition at line 3083 of file AddressSanitizer.cpp.
|
static |
Definition at line 557 of file AddressSanitizer.cpp.
References llvm::Triple::isOSEmscripten(), kAsanCtorAndDtorPriority, and kAsanEmscriptenCtorAndDtorPriority.
|
static |
Definition at line 551 of file AddressSanitizer.cpp.
References llvm::max().
Definition at line 435 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::isMacOSX(), llvm::Triple::isMIPS32(), llvm::Triple::isMIPS64(), llvm::Triple::isOSEmscripten(), 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, kEmscriptenShadowOffset, kFreeBSD_ShadowOffset32, kFreeBSD_ShadowOffset64, kLinuxKasan_ShadowOffset64, kMIPS32_ShadowOffset32, kMIPS64_ShadowOffset64, kMyriadMemoryOffset32, kMyriadMemorySize32, kMyriadShadowScale, kNetBSD_ShadowOffset32, kNetBSD_ShadowOffset64, kNetBSDKasan_ShadowOffset64, kPPC64_ShadowOffset64, kPS4CPU_ShadowOffset64, kRISCV64_ShadowOffset64, kSmallX86_64ShadowOffsetAlignMask, kSmallX86_64ShadowOffsetBase, kSystemZ_ShadowOffset64, kWindowsShadowOffset32, kWindowsShadowOffset64, llvm::Triple::Myriad, llvm::Triple::ppc64, llvm::Triple::ppc64le, llvm::Triple::riscv64, llvm::Triple::systemz, and llvm::Triple::x86_64.
|
static |
Check if G
has been created by a trusted compiler pass.
Definition at line 1289 of file AddressSanitizer.cpp.
References G, kAsanGenPrefix, kODRGenPrefix, and kSanCovGenPrefix.
INITIALIZE_PASS | ( | ModuleAddressSanitizerLegacyPass | , |
"asan-module" | , | ||
"AddressSanitizer: detects use-after-free and out-of-bounds bugs." "ModulePass" | , | ||
false | , | ||
false | |||
) |
Definition at line 1252 of file AddressSanitizer.cpp.
References assert().
INITIALIZE_PASS (ASanGlobalsMetadataWrapperPass, "asan-globals-md", "Read metadata to mark which globals should be instrumented " "when running ASan.", false, true) char AddressSanitizerLegacyPass INITIALIZE_PASS_BEGIN | ( | AddressSanitizerLegacyPass | , |
"asan" | , | ||
"AddressSanitizer: detects use-after-free and out-of-bounds bugs." | , | ||
false | , | ||
false | |||
) |
|
static |
Definition at line 1523 of file AddressSanitizer.cpp.
References Addr, llvm::IRBuilderBase::CreateExtractElement(), llvm::IRBuilderBase::CreateGEP(), DL, doInstrumentAddress(), llvm::ConstantInt::get(), I, llvm::BitmaskEnumDetail::Mask(), llvm::SplitBlockAndInsertIfThen(), and Vector.
|
static |
Definition at line 1459 of file AddressSanitizer.cpp.
References I, and isPointerOperand().
|
static |
Definition at line 1473 of file AddressSanitizer.cpp.
References I, and isPointerOperand().
|
static |
Definition at line 1452 of file AddressSanitizer.cpp.
References llvm::Value::getType(), and llvm::Type::isPointerTy().
Referenced by isInterestingPointerComparison(), and isInterestingPointerSubtraction().
|
static |
Definition at line 2977 of file AddressSanitizer.cpp.
References assert(), i, kMaxStackMallocSize, kMinStackMallocSize, and llvm_unreachable.
STATISTIC | ( | NumInstrumentedReads | , |
"Number of instrumented reads" | |||
) |
STATISTIC | ( | NumInstrumentedWrites | , |
"Number of instrumented writes" | |||
) |
|
static |
Definition at line 1266 of file AddressSanitizer.cpp.
References assert(), llvm::countTrailingZeros(), and kNumberOfAccessSizes.
INITIALIZE_PASS (ASanGlobalsMetadataWrapperPass, "asan-globals-md", "Read metadata to mark which globals should be instrumented " "when running ASan.", false, true) char AddressSanitizerLegacyPass AddressSanitizer |
Definition at line 1240 of file AddressSanitizer.cpp.
Referenced by llvm::AddressSanitizerPass::run().
INITIALIZE_PASS (ASanGlobalsMetadataWrapperPass, "asan-globals-md", "Read metadata to mark which globals should be instrumented " "when running ASan.", false, true) char AddressSanitizerLegacyPass asan |
Definition at line 1239 of file AddressSanitizer.cpp.
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
Referenced by getShadowMapping().
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
Referenced by getShadowMapping().
|
static |
Referenced by getShadowMapping().
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
Referenced by getShadowMapping().
|
static |
INITIALIZE_PASS (ASanGlobalsMetadataWrapperPass, "asan-globals-md", "Read metadata to mark which globals should be instrumented " "when running ASan.", false, true) char AddressSanitizerLegacyPass false |
Definition at line 1240 of file AddressSanitizer.cpp.
|
static |
Definition at line 107 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 179 of file AddressSanitizer.cpp.
const char kAsanAllocaPoison[] = "__asan_alloca_poison" |
Definition at line 173 of file AddressSanitizer.cpp.
const char kAsanAllocasUnpoison[] = "__asan_allocas_unpoison" |
Definition at line 174 of file AddressSanitizer.cpp.
|
static |
Definition at line 135 of file AddressSanitizer.cpp.
Referenced by GetCtorAndDtorPriority().
|
static |
Definition at line 137 of file AddressSanitizer.cpp.
Referenced by GetCtorAndDtorPriority().
const char kAsanGenPrefix[] = "___asan_gen_" |
Definition at line 156 of file AddressSanitizer.cpp.
Referenced by createPrivateGlobalForSourceLoc(), and GlobalWasGeneratedByCompiler().
const char kAsanGlobalsRegisteredFlagName[] = "___asan_globals_registered" |
Definition at line 165 of file AddressSanitizer.cpp.
const char kAsanHandleNoReturnName[] = "__asan_handle_no_return" |
Definition at line 152 of file AddressSanitizer.cpp.
const char kAsanInitName[] = "__asan_init" |
Definition at line 148 of file AddressSanitizer.cpp.
const char kAsanModuleCtorName[] = "asan.module_ctor" |
Definition at line 133 of file AddressSanitizer.cpp.
const char kAsanModuleDtorName[] = "asan.module_dtor" |
Definition at line 134 of file AddressSanitizer.cpp.
const char kAsanOptionDetectUseAfterReturn[] |
Definition at line 167 of file AddressSanitizer.cpp.
const char kAsanPoisonGlobalsName[] = "__asan_before_dynamic_init" |
Definition at line 146 of file AddressSanitizer.cpp.
const char kAsanPoisonStackMemoryName[] = "__asan_poison_stack_memory" |
Definition at line 160 of file AddressSanitizer.cpp.
const char kAsanPtrCmp[] = "__sanitizer_ptr_cmp" |
Definition at line 150 of file AddressSanitizer.cpp.
const char kAsanPtrSub[] = "__sanitizer_ptr_sub" |
Definition at line 151 of file AddressSanitizer.cpp.
const char kAsanRegisterElfGlobalsName[] = "__asan_register_elf_globals" |
Definition at line 144 of file AddressSanitizer.cpp.
const char kAsanRegisterGlobalsName[] = "__asan_register_globals" |
Definition at line 139 of file AddressSanitizer.cpp.
const char kAsanRegisterImageGlobalsName[] = "__asan_register_image_globals" |
Definition at line 141 of file AddressSanitizer.cpp.
const char kAsanReportErrorTemplate[] = "__asan_report_" |
Definition at line 138 of file AddressSanitizer.cpp.
const char kAsanSetShadowPrefix[] = "__asan_set_shadow_" |
Definition at line 159 of file AddressSanitizer.cpp.
const char kAsanShadowMemoryDynamicAddress[] |
Definition at line 170 of file AddressSanitizer.cpp.
const char kAsanStackFreeNameTemplate[] = "__asan_stack_free_" |
Definition at line 155 of file AddressSanitizer.cpp.
const char kAsanStackMallocNameTemplate[] = "__asan_stack_malloc_" |
Definition at line 154 of file AddressSanitizer.cpp.
const char kAsanUnpoisonGlobalsName[] = "__asan_after_dynamic_init" |
Definition at line 147 of file AddressSanitizer.cpp.
const char kAsanUnpoisonStackMemoryName[] = "__asan_unpoison_stack_memory" |
Definition at line 161 of file AddressSanitizer.cpp.
const char kAsanUnregisterElfGlobalsName[] = "__asan_unregister_elf_globals" |
Definition at line 145 of file AddressSanitizer.cpp.
const char kAsanUnregisterGlobalsName[] = "__asan_unregister_globals" |
Definition at line 140 of file AddressSanitizer.cpp.
const char kAsanUnregisterImageGlobalsName[] |
Definition at line 142 of file AddressSanitizer.cpp.
const char kAsanVersionCheckNamePrefix[] = "__asan_version_mismatch_check_v" |
Definition at line 149 of file AddressSanitizer.cpp.
|
static |
Definition at line 130 of file AddressSanitizer.cpp.
|
static |
Definition at line 96 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 97 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 95 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 98 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 116 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 109 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 110 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 102 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 153 of file AddressSanitizer.cpp.
|
static |
Definition at line 129 of file AddressSanitizer.cpp.
Referenced by StackMallocSizeClass().
|
static |
Definition at line 128 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 123 of file AddressSanitizer.cpp.
|
static |
Definition at line 122 of file AddressSanitizer.cpp.
|
static |
Definition at line 119 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 120 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 118 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 121 of file AddressSanitizer.cpp.
|
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 113 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 177 of file AddressSanitizer.cpp.
Referenced by TypeSizeToSizeIndex().
const char kODRGenPrefix[] = "__odr_asan_gen_" |
Definition at line 157 of file AddressSanitizer.cpp.
Referenced by GlobalWasGeneratedByCompiler().
|
static |
Definition at line 103 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 114 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 131 of file AddressSanitizer.cpp.
|
static |
Definition at line 108 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
const char kSanCovGenPrefix[] = "__sancov_gen_" |
Definition at line 158 of file AddressSanitizer.cpp.
Referenced by GlobalWasGeneratedByCompiler().
|
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 115 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 126 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().