33 std::vector<std::string> UserIgnorelistFiles;
34 std::vector<std::string> SystemIgnorelistFiles;
35 std::vector<std::string> CoverageAllowlistFiles;
36 std::vector<std::string> CoverageIgnorelistFiles;
37 std::vector<std::string> BinaryMetadataIgnorelistFiles;
38 int CoverageFeatures = 0;
39 int CoverageStackDepthCallbackMin = 0;
40 int BinaryMetadataFeatures = 0;
41 int OverflowPatternExclusions = 0;
42 int MsanTrackOrigins = 0;
43 bool MsanUseAfterDtor =
true;
44 bool MsanParamRetval =
true;
45 bool CfiCrossDso =
false;
46 bool CfiICallGeneralizePointers =
false;
47 bool CfiICallNormalizeIntegers =
false;
48 bool CfiCanonicalJumpTables =
false;
49 bool KcfiArity =
false;
50 int AsanFieldPadding = 0;
51 bool SharedRuntime =
false;
52 bool StableABI =
false;
53 bool AsanUseAfterScope =
true;
54 bool AsanPoisonCustomArrayCookie =
false;
55 bool AsanGlobalsDeadStripping =
false;
56 bool AsanUseOdrIndicator =
false;
57 bool AsanInvalidPointerCmp =
false;
58 bool AsanInvalidPointerSub =
false;
59 bool AsanOutlineInstrumentation =
false;
60 llvm::AsanDtorKind AsanDtorKind = llvm::AsanDtorKind::Invalid;
61 std::string HwasanAbi;
62 bool LinkRuntimes =
true;
63 bool LinkCXXRuntimes =
false;
65 bool SafeStackRuntime =
false;
67 bool TsanMemoryAccess =
true;
68 bool TsanFuncEntryExit =
true;
69 bool TsanAtomics =
true;
70 bool MinimalRuntime =
false;
71 bool TysanOutlineInstrumentation =
true;
72 bool HandlerPreserveAllRegs =
false;
74 bool ImplicitCfiRuntime =
false;
75 bool NeedsMemProfRt =
false;
76 bool HwasanUseAliases =
false;
77 llvm::AsanDetectStackUseAfterReturnMode AsanUseAfterReturn =
78 llvm::AsanDetectStackUseAfterReturnMode::Invalid;
80 std::string MemtagMode;
81 bool AllocTokenFastABI =
false;
82 bool AllocTokenExtended =
false;
87 bool DiagnoseErrors =
true);
93 bool needsAsanRt()
const {
return Sanitizers.has(SanitizerKind::Address); }
95 return Sanitizers.has(SanitizerKind::HWAddress);
100 bool needsTysanRt()
const {
return Sanitizers.has(SanitizerKind::Type); }
101 bool needsTsanRt()
const {
return Sanitizers.has(SanitizerKind::Thread); }
102 bool needsMsanRt()
const {
return Sanitizers.has(SanitizerKind::Memory); }
103 bool needsFuzzer()
const {
return Sanitizers.has(SanitizerKind::Fuzzer); }
105 return Sanitizers.has(SanitizerKind::Leak) &&
106 !Sanitizers.has(SanitizerKind::Address) &&
107 !Sanitizers.has(SanitizerKind::HWAddress);
113 bool needsDfsanRt()
const {
return Sanitizers.has(SanitizerKind::DataFlow); }
118 bool needsScudoRt()
const {
return Sanitizers.has(SanitizerKind::Scudo); }
120 return Sanitizers.has(SanitizerKind::NumericalStability);
122 bool needsRtsanRt()
const {
return Sanitizers.has(SanitizerKind::Realtime); }
128 return Sanitizers.has(SanitizerKind::MemtagHeap);
131 return Sanitizers.has(SanitizerKind::MemtagStack);
134 return Sanitizers.has(SanitizerKind::MemtagGlobals);
137 assert(!MemtagMode.empty());
142 return Sanitizers.has(SanitizerKind::ShadowCallStack);
153 llvm::opt::ArgStringList &CmdArgs,
types::ID InputType)
const;