LLVM 17.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/Twine.h"
#include "llvm/Analysis/GlobalsModRef.h"
#include "llvm/Analysis/MemoryBuiltins.h"
#include "llvm/Analysis/StackSafetyAnalysis.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/BinaryFormat/MachO.h"
#include "llvm/Demangle/Demangle.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/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/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/raw_ostream.h"
#include "llvm/TargetParser/Triple.h"
#include "llvm/Transforms/Instrumentation.h"
#include "llvm/Transforms/Instrumentation/AddressSanitizerCommon.h"
#include "llvm/Transforms/Instrumentation/AddressSanitizerOptions.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 <sstream>
#include <string>
#include <tuple>
Go to the source code of this file.
Namespaces | |
namespace | llvm |
This is an optimization pass for GlobalISel generic memory operations. | |
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 (const Triple &TargetTriple, int LongSize, bool IsKasan) |
void | llvm::getAddressSanitizerParams (const Triple &TargetTriple, int LongSize, bool IsKasan, uint64_t *ShadowBase, int *MappingScale, bool *OrShadowOffset) |
static uint64_t | getRedzoneSizeForScale (int MappingScale) |
static uint64_t | GetCtorAndDtorPriority (Triple &TargetTriple) |
static size_t | TypeStoreSizeToSizeIndex (uint32_t TypeSize) |
static bool | GlobalWasGeneratedByCompiler (GlobalVariable *G) |
Check if G has been created by a trusted compiler pass. | |
static bool | isUnsupportedAMDGPUAddrspace (Value *Addr) |
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, TypeSize TypeStoreSize, 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. | |
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 | kMIPS_ShadowOffsetN32 = 1ULL << 29 |
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 | kLoongArch64_ShadowOffset64 = 1ULL << 46 |
static const uint64_t | kRISCV64_ShadowOffset64 = 0xd55550000 |
static const uint64_t | kFreeBSD_ShadowOffset32 = 1ULL << 30 |
static const uint64_t | kFreeBSD_ShadowOffset64 = 1ULL << 46 |
static const uint64_t | kFreeBSDAArch64_ShadowOffset64 = 1ULL << 47 |
static const uint64_t | kFreeBSDKasan_ShadowOffset64 = 0xdffff7c000000000 |
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 | kPS_ShadowOffset64 = 1ULL << 40 |
static const uint64_t | kWindowsShadowOffset32 = 3ULL << 28 |
static const uint64_t | kEmscriptenShadowOffset = 0 |
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 | kAsanStackMallocAlwaysNameTemplate [] |
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" |
const char | kAMDGPUAddressSharedName [] = "llvm.amdgcn.is.shared" |
const char | kAMDGPUAddressPrivateName [] = "llvm.amdgcn.is.private" |
static const size_t | kNumberOfAccessSizes = 5 |
static const uint64_t | kAllocaRzSize = 32 |
constexpr size_t | kCompileKernelShift = 0 |
constexpr size_t | kCompileKernelMask = 0x1 |
constexpr size_t | kAccessSizeIndexShift = 1 |
constexpr size_t | kAccessSizeIndexMask = 0xf |
constexpr size_t | kIsWriteShift = 5 |
constexpr size_t | kIsWriteMask = 0x1 |
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 > | ClUseStackSafety ("asan-use-stack-safety", cl::Hidden, cl::init(false), cl::Hidden, cl::desc("Use Stack Safety analysis results"), cl::Optional) |
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< AsanDetectStackUseAfterReturnMode > | ClUseAfterReturn ("asan-use-after-return", cl::desc("Sets the mode of detection for stack-use-after-return."), cl::values(clEnumValN(AsanDetectStackUseAfterReturnMode::Never, "never", "Never detect stack use after return."), clEnumValN(AsanDetectStackUseAfterReturnMode::Runtime, "runtime", "Detect stack use after return if " "binary flag 'ASAN_OPTIONS=detect_stack_use_after_return' is set."), clEnumValN(AsanDetectStackUseAfterReturnMode::Always, "always", "Always detect stack use after return.")), cl::Hidden, cl::init(AsanDetectStackUseAfterReturnMode::Runtime)) |
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 > | ClKasanMemIntrinCallbackPrefix ("asan-kernel-mem-intrinsic-prefix", cl::desc("Use prefix for memory intrinsics in KASAN mode"), cl::Hidden, cl::init(false)) |
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< AsanCtorKind > | ClConstructorKind ("asan-constructor-kind", cl::desc("Sets the ASan constructor kind"), cl::values(clEnumValN(AsanCtorKind::None, "none", "No constructors"), clEnumValN(AsanCtorKind::Global, "global", "Use global constructors")), cl::init(AsanCtorKind::Global), cl::Hidden) |
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 > | ClOptimizeCallbacks ("asan-optimize-callbacks", cl::desc("Optimize callbacks"), cl::Hidden, cl::init(false)) |
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(true)) |
static cl::opt< bool > | ClUseOdrIndicator ("asan-use-odr-indicator", cl::desc("Use odr indicators to improve ODR reporting"), cl::Hidden, cl::init(true)) |
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)) |
#define DEBUG_TYPE "asan" |
Definition at line 93 of file AddressSanitizer.cpp.
|
static |
Definition at line 1465 of file AddressSanitizer.cpp.
References Addr, llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getFixedValue(), I, and llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable().
|
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 3157 of file AddressSanitizer.cpp.
References llvm::Instruction::getNextNonDebugInstruction(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Definition at line 634 of file AddressSanitizer.cpp.
References llvm::Triple::isOSEmscripten(), kAsanCtorAndDtorPriority, and kAsanEmscriptenCtorAndDtorPriority.
|
static |
Definition at line 628 of file AddressSanitizer.cpp.
|
static |
Definition at line 476 of file AddressSanitizer.cpp.
References llvm::Triple::aarch64, ClForceDynamicShadow, ClMappingOffset, ClMappingScale, ClWithIfunc, llvm::Triple::getArch(), llvm::Triple::getEnvironment(), llvm::Triple::GNUABIN32, llvm::Triple::isAMDGPU(), llvm::Triple::isAndroid(), llvm::Triple::isAndroidVersionLT(), llvm::Triple::isARM(), llvm::Triple::isDriverKit(), 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::isPS(), llvm::Triple::isThumb(), llvm::Triple::isWatchOS(), kAArch64_ShadowOffset64, kDefaultShadowOffset32, kDefaultShadowOffset64, kDefaultShadowScale, kDynamicShadowSentinel, kEmscriptenShadowOffset, kFreeBSD_ShadowOffset32, kFreeBSD_ShadowOffset64, kFreeBSDAArch64_ShadowOffset64, kFreeBSDKasan_ShadowOffset64, kLinuxKasan_ShadowOffset64, kLoongArch64_ShadowOffset64, kMIPS32_ShadowOffset32, kMIPS64_ShadowOffset64, kMIPS_ShadowOffsetN32, kNetBSD_ShadowOffset32, kNetBSD_ShadowOffset64, kNetBSDKasan_ShadowOffset64, kPPC64_ShadowOffset64, kPS_ShadowOffset64, kRISCV64_ShadowOffset64, kSmallX86_64ShadowOffsetAlignMask, kSmallX86_64ShadowOffsetBase, kSystemZ_ShadowOffset64, kWindowsShadowOffset32, kWindowsShadowOffset64, llvm::Triple::loongarch64, llvm::Triple::ppc64, llvm::Triple::ppc64le, llvm::Triple::riscv64, llvm::Triple::systemz, and llvm::Triple::x86_64.
Referenced by llvm::getAddressSanitizerParams().
|
static |
Check if G
has been created by a trusted compiler pass.
Definition at line 1188 of file AddressSanitizer.cpp.
References G, kAsanGenPrefix, kODRGenPrefix, and kSanCovGenPrefix.
|
static |
Definition at line 1415 of file AddressSanitizer.cpp.
References I, and isPointerOperand().
|
static |
Definition at line 1429 of file AddressSanitizer.cpp.
References I, and isPointerOperand().
Definition at line 1408 of file AddressSanitizer.cpp.
Referenced by isInterestingPointerComparison(), and isInterestingPointerSubtraction().
Definition at line 1206 of file AddressSanitizer.cpp.
References Addr, and llvm::Type::getPointerAddressSpace().
|
static |
Definition at line 3051 of file AddressSanitizer.cpp.
References assert(), kMaxStackMallocSize, kMinStackMallocSize, and llvm_unreachable.
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 1181 of file AddressSanitizer.cpp.
References assert(), llvm::countr_zero(), and kNumberOfAccessSizes.
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
Referenced by getShadowMapping().
|
static |
|
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 |
|
static |
|
static |
Referenced by getShadowMapping().
|
static |
Definition at line 108 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
constexpr |
Definition at line 187 of file AddressSanitizer.cpp.
|
constexpr |
Definition at line 186 of file AddressSanitizer.cpp.
Definition at line 181 of file AddressSanitizer.cpp.
Definition at line 176 of file AddressSanitizer.cpp.
Definition at line 175 of file AddressSanitizer.cpp.
Definition at line 172 of file AddressSanitizer.cpp.
Definition at line 173 of file AddressSanitizer.cpp.
Definition at line 132 of file AddressSanitizer.cpp.
Referenced by GetCtorAndDtorPriority().
Definition at line 134 of file AddressSanitizer.cpp.
Referenced by GetCtorAndDtorPriority().
Definition at line 155 of file AddressSanitizer.cpp.
Referenced by GlobalWasGeneratedByCompiler().
Definition at line 164 of file AddressSanitizer.cpp.
Definition at line 149 of file AddressSanitizer.cpp.
Definition at line 145 of file AddressSanitizer.cpp.
Definition at line 130 of file AddressSanitizer.cpp.
Definition at line 131 of file AddressSanitizer.cpp.
Definition at line 166 of file AddressSanitizer.cpp.
Definition at line 143 of file AddressSanitizer.cpp.
Definition at line 159 of file AddressSanitizer.cpp.
Definition at line 147 of file AddressSanitizer.cpp.
Definition at line 148 of file AddressSanitizer.cpp.
Definition at line 141 of file AddressSanitizer.cpp.
Definition at line 136 of file AddressSanitizer.cpp.
Definition at line 138 of file AddressSanitizer.cpp.
Definition at line 135 of file AddressSanitizer.cpp.
Definition at line 158 of file AddressSanitizer.cpp.
Definition at line 169 of file AddressSanitizer.cpp.
Definition at line 154 of file AddressSanitizer.cpp.
Definition at line 152 of file AddressSanitizer.cpp.
Definition at line 151 of file AddressSanitizer.cpp.
Definition at line 144 of file AddressSanitizer.cpp.
Definition at line 160 of file AddressSanitizer.cpp.
Definition at line 142 of file AddressSanitizer.cpp.
Definition at line 137 of file AddressSanitizer.cpp.
Definition at line 139 of file AddressSanitizer.cpp.
Definition at line 146 of file AddressSanitizer.cpp.
|
constexpr |
Definition at line 185 of file AddressSanitizer.cpp.
|
constexpr |
Definition at line 184 of file AddressSanitizer.cpp.
|
static |
Definition at line 127 of file AddressSanitizer.cpp.
Definition at line 96 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 97 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 95 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 98 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 120 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 111 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 112 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 113 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 114 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
constexpr |
Definition at line 189 of file AddressSanitizer.cpp.
|
constexpr |
Definition at line 188 of file AddressSanitizer.cpp.
Definition at line 102 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 109 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 150 of file AddressSanitizer.cpp.
|
static |
Definition at line 126 of file AddressSanitizer.cpp.
Referenced by StackMallocSizeClass().
|
static |
Definition at line 125 of file AddressSanitizer.cpp.
Referenced by StackMallocSizeClass().
Definition at line 106 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 107 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 105 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 115 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 116 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 117 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 179 of file AddressSanitizer.cpp.
Referenced by TypeSizeToSizeIndex(), and TypeStoreSizeToSizeIndex().
Definition at line 156 of file AddressSanitizer.cpp.
Referenced by GlobalWasGeneratedByCompiler().
Definition at line 103 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 118 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 128 of file AddressSanitizer.cpp.
Definition at line 110 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 157 of file AddressSanitizer.cpp.
Referenced by GlobalWasGeneratedByCompiler().
Definition at line 101 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 100 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 104 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 119 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 123 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().