LLVM 20.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/EHPersonalities.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 Twine | genName (StringRef suffix) |
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, RuntimeCallInserter &RTCI) |
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 = kDynamicShadowSentinel |
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" |
const char | kAMDGPUBallotName [] = "llvm.amdgcn.ballot.i64" |
const char | kAMDGPUUnreachableName [] = "llvm.amdgcn.unreachable" |
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(true), 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 94 of file AddressSanitizer.cpp.
|
static |
Definition at line 1606 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 3349 of file AddressSanitizer.cpp.
References llvm::Instruction::getNextNonDebugInstruction(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Definition at line 645 of file AddressSanitizer.cpp.
References kAsanGenPrefix.
Definition at line 637 of file AddressSanitizer.cpp.
References llvm::Triple::isOSEmscripten(), kAsanCtorAndDtorPriority, and kAsanEmscriptenCtorAndDtorPriority.
|
static |
Definition at line 631 of file AddressSanitizer.cpp.
|
static |
Definition at line 478 of file AddressSanitizer.cpp.
References llvm::Triple::aarch64, llvm::Triple::aarch64_be, 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::isLoongArch64(), 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::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 1303 of file AddressSanitizer.cpp.
References G, kAsanGenPrefix, kODRGenPrefix, and kSanCovGenPrefix.
|
static |
Definition at line 1556 of file AddressSanitizer.cpp.
References I, and isPointerOperand().
|
static |
Definition at line 1570 of file AddressSanitizer.cpp.
References I, and isPointerOperand().
Definition at line 1549 of file AddressSanitizer.cpp.
Definition at line 1321 of file AddressSanitizer.cpp.
References Addr, and llvm::Type::getPointerAddressSpace().
|
static |
Definition at line 3243 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 1296 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 109 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
constexpr |
Definition at line 190 of file AddressSanitizer.cpp.
|
constexpr |
Definition at line 189 of file AddressSanitizer.cpp.
Definition at line 184 of file AddressSanitizer.cpp.
Definition at line 177 of file AddressSanitizer.cpp.
Definition at line 176 of file AddressSanitizer.cpp.
Definition at line 178 of file AddressSanitizer.cpp.
Definition at line 179 of file AddressSanitizer.cpp.
Definition at line 173 of file AddressSanitizer.cpp.
Definition at line 174 of file AddressSanitizer.cpp.
Definition at line 133 of file AddressSanitizer.cpp.
Referenced by GetCtorAndDtorPriority().
Definition at line 135 of file AddressSanitizer.cpp.
Referenced by GetCtorAndDtorPriority().
Definition at line 156 of file AddressSanitizer.cpp.
Referenced by genName(), and GlobalWasGeneratedByCompiler().
Definition at line 165 of file AddressSanitizer.cpp.
Definition at line 150 of file AddressSanitizer.cpp.
Definition at line 146 of file AddressSanitizer.cpp.
Definition at line 131 of file AddressSanitizer.cpp.
Definition at line 132 of file AddressSanitizer.cpp.
Definition at line 167 of file AddressSanitizer.cpp.
Definition at line 144 of file AddressSanitizer.cpp.
Definition at line 160 of file AddressSanitizer.cpp.
Definition at line 148 of file AddressSanitizer.cpp.
Definition at line 149 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 136 of file AddressSanitizer.cpp.
Referenced by llvm::AMDGPU::generateCrashCode().
Definition at line 159 of file AddressSanitizer.cpp.
Definition at line 170 of file AddressSanitizer.cpp.
Definition at line 155 of file AddressSanitizer.cpp.
Definition at line 153 of file AddressSanitizer.cpp.
Definition at line 152 of file AddressSanitizer.cpp.
Definition at line 145 of file AddressSanitizer.cpp.
Definition at line 161 of file AddressSanitizer.cpp.
Definition at line 143 of file AddressSanitizer.cpp.
Definition at line 138 of file AddressSanitizer.cpp.
Definition at line 140 of file AddressSanitizer.cpp.
Definition at line 147 of file AddressSanitizer.cpp.
|
constexpr |
Definition at line 188 of file AddressSanitizer.cpp.
|
constexpr |
Definition at line 187 of file AddressSanitizer.cpp.
|
static |
Definition at line 128 of file AddressSanitizer.cpp.
Definition at line 97 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 98 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 96 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 99 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 121 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().
Definition at line 115 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
constexpr |
Definition at line 192 of file AddressSanitizer.cpp.
|
constexpr |
Definition at line 191 of file AddressSanitizer.cpp.
Definition at line 103 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 110 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 151 of file AddressSanitizer.cpp.
|
static |
Definition at line 127 of file AddressSanitizer.cpp.
Referenced by StackMallocSizeClass().
|
static |
Definition at line 126 of file AddressSanitizer.cpp.
Referenced by StackMallocSizeClass().
Definition at line 107 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 108 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 106 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().
Definition at line 118 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 182 of file AddressSanitizer.cpp.
Referenced by TypeSizeToSizeIndex(), and TypeStoreSizeToSizeIndex().
Definition at line 157 of file AddressSanitizer.cpp.
Referenced by GlobalWasGeneratedByCompiler().
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 129 of file AddressSanitizer.cpp.
|
static |
Definition at line 111 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 158 of file AddressSanitizer.cpp.
Referenced by GlobalWasGeneratedByCompiler().
Definition at line 102 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 101 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 105 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 120 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 124 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().