LLVM 22.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/TargetTransformInfo.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/AddressSanitizerCommon.h"
#include "llvm/Transforms/Instrumentation/AddressSanitizerOptions.h"
#include "llvm/Transforms/Utils/ASanStackFrameLayout.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/Instrumentation.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) |
void | llvm::removeASanIncompatibleFnAttributes (Function &F, bool ReadsArgMem) |
Remove memory attributes that are incompatible with the instrumentation added by AddressSanitizer and HWAddressSanitizer. | |
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. | |
static StringRef | getAllocaName (AllocaInst *AI) |
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 | kWebAssemblyShadowOffset = 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 95 of file AddressSanitizer.cpp.
|
static |
Definition at line 1652 of file AddressSanitizer.cpp.
References 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 3391 of file AddressSanitizer.cpp.
References llvm::cast(), llvm::dyn_cast(), llvm::ilist_node_with_parent< NodeTy, ParentTy, Options >::getNextNode(), llvm::isa(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Definition at line 689 of file AddressSanitizer.cpp.
References kAsanGenPrefix.
|
static |
Definition at line 3439 of file AddressSanitizer.cpp.
References llvm::cast(), llvm::Instruction::getMetadata(), llvm::Value::getName(), llvm::Instruction::hasMetadata(), llvm::isa(), and llvm::MDNode::operands().
Definition at line 681 of file AddressSanitizer.cpp.
References llvm::Triple::isOSEmscripten(), kAsanCtorAndDtorPriority, and kAsanEmscriptenCtorAndDtorPriority.
|
static |
Definition at line 675 of file AddressSanitizer.cpp.
Definition at line 479 of file AddressSanitizer.cpp.
References llvm::Triple::aarch64, llvm::Triple::aarch64_be, ClForceDynamicShadow, ClMappingOffset, ClMappingScale, ClWithIfunc, llvm::Triple::getArch(), llvm::Triple::isABIN32(), 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::isOSFreeBSD(), llvm::Triple::isOSFuchsia(), llvm::Triple::isOSHaiku(), llvm::Triple::isOSLinux(), llvm::Triple::isOSNetBSD(), llvm::Triple::isOSWindows(), llvm::Triple::isPS(), llvm::Triple::isThumb(), llvm::Triple::isWasm(), llvm::Triple::isWatchOS(), kAArch64_ShadowOffset64, kDefaultShadowOffset32, kDefaultShadowOffset64, kDefaultShadowScale, kDynamicShadowSentinel, 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, kWebAssemblyShadowOffset, 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 1342 of file AddressSanitizer.cpp.
References G, kAsanGenPrefix, kODRGenPrefix, and kSanCovGenPrefix.
|
static |
Definition at line 1602 of file AddressSanitizer.cpp.
References llvm::dyn_cast(), I, and isPointerOperand().
|
static |
Definition at line 1616 of file AddressSanitizer.cpp.
References llvm::dyn_cast(), I, and isPointerOperand().
Definition at line 1595 of file AddressSanitizer.cpp.
References llvm::isa().
Definition at line 1360 of file AddressSanitizer.cpp.
References llvm::cast(), llvm::Type::getPointerAddressSpace(), llvm::Type::getScalarType(), and llvm::Value::getType().
|
static |
Definition at line 3285 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" | ) |
References llvm::Offset.
|
static |
Definition at line 1335 of file AddressSanitizer.cpp.
References assert(), llvm::countr_zero(), and kNumberOfAccessSizes.
|
static |
|
static |
|
static |
|
static |
Referenced by llvm::AddressSanitizerPass::run().
|
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(), and STATISTIC().
|
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 110 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
constexpr |
Definition at line 191 of file AddressSanitizer.cpp.
Referenced by llvm::ASanAccessInfo::ASanAccessInfo().
|
constexpr |
Definition at line 190 of file AddressSanitizer.cpp.
Referenced by llvm::ASanAccessInfo::ASanAccessInfo(), and llvm::ASanAccessInfo::ASanAccessInfo().
Definition at line 185 of file AddressSanitizer.cpp.
Definition at line 178 of file AddressSanitizer.cpp.
Definition at line 177 of file AddressSanitizer.cpp.
Definition at line 179 of file AddressSanitizer.cpp.
Definition at line 180 of file AddressSanitizer.cpp.
Definition at line 174 of file AddressSanitizer.cpp.
Definition at line 175 of file AddressSanitizer.cpp.
Definition at line 134 of file AddressSanitizer.cpp.
Referenced by GetCtorAndDtorPriority().
Definition at line 136 of file AddressSanitizer.cpp.
Referenced by GetCtorAndDtorPriority().
Definition at line 157 of file AddressSanitizer.cpp.
Referenced by genName(), and GlobalWasGeneratedByCompiler().
Definition at line 166 of file AddressSanitizer.cpp.
Definition at line 151 of file AddressSanitizer.cpp.
Definition at line 147 of file AddressSanitizer.cpp.
Definition at line 132 of file AddressSanitizer.cpp.
Definition at line 133 of file AddressSanitizer.cpp.
Definition at line 168 of file AddressSanitizer.cpp.
Definition at line 145 of file AddressSanitizer.cpp.
Definition at line 161 of file AddressSanitizer.cpp.
Definition at line 149 of file AddressSanitizer.cpp.
Definition at line 150 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 137 of file AddressSanitizer.cpp.
Referenced by llvm::AMDGPU::generateCrashCode().
Definition at line 160 of file AddressSanitizer.cpp.
Definition at line 171 of file AddressSanitizer.cpp.
Definition at line 156 of file AddressSanitizer.cpp.
Definition at line 154 of file AddressSanitizer.cpp.
Definition at line 153 of file AddressSanitizer.cpp.
Definition at line 146 of file AddressSanitizer.cpp.
Definition at line 162 of file AddressSanitizer.cpp.
Definition at line 144 of file AddressSanitizer.cpp.
Definition at line 139 of file AddressSanitizer.cpp.
Definition at line 141 of file AddressSanitizer.cpp.
Definition at line 148 of file AddressSanitizer.cpp.
|
constexpr |
Definition at line 189 of file AddressSanitizer.cpp.
Referenced by llvm::ASanAccessInfo::ASanAccessInfo().
|
constexpr |
Definition at line 188 of file AddressSanitizer.cpp.
Referenced by llvm::ASanAccessInfo::ASanAccessInfo(), and llvm::ASanAccessInfo::ASanAccessInfo().
|
static |
Definition at line 129 of file AddressSanitizer.cpp.
Definition at line 98 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 99 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 97 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 100 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().
Definition at line 116 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
constexpr |
Definition at line 193 of file AddressSanitizer.cpp.
Referenced by llvm::ASanAccessInfo::ASanAccessInfo().
|
constexpr |
Definition at line 192 of file AddressSanitizer.cpp.
Referenced by llvm::ASanAccessInfo::ASanAccessInfo(), and llvm::ASanAccessInfo::ASanAccessInfo().
Definition at line 104 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 111 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 152 of file AddressSanitizer.cpp.
|
static |
Definition at line 128 of file AddressSanitizer.cpp.
Referenced by StackMallocSizeClass().
|
static |
Definition at line 127 of file AddressSanitizer.cpp.
Referenced by StackMallocSizeClass().
Definition at line 108 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 109 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 107 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().
Definition at line 119 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 183 of file AddressSanitizer.cpp.
Referenced by TypeSizeToSizeIndex(), TypeSizeToSizeIndex(), and TypeStoreSizeToSizeIndex().
Definition at line 158 of file AddressSanitizer.cpp.
Referenced by GlobalWasGeneratedByCompiler().
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 130 of file AddressSanitizer.cpp.
|
static |
Definition at line 112 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 159 of file AddressSanitizer.cpp.
Referenced by GlobalWasGeneratedByCompiler().
Definition at line 103 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 102 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 106 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 122 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
Definition at line 121 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().
|
static |
Definition at line 125 of file AddressSanitizer.cpp.
Referenced by getShadowMapping().