32 std::vector<std::string> UserIgnorelistFiles;
33 std::vector<std::string> SystemIgnorelistFiles;
34 std::vector<std::string> CoverageAllowlistFiles;
35 std::vector<std::string> CoverageIgnorelistFiles;
36 std::vector<std::string> BinaryMetadataIgnorelistFiles;
37 int CoverageFeatures = 0;
38 int CoverageStackDepthCallbackMin = 0;
39 int BinaryMetadataFeatures = 0;
40 int OverflowPatternExclusions = 0;
41 int MsanTrackOrigins = 0;
42 bool MsanUseAfterDtor =
true;
43 bool MsanParamRetval =
true;
44 bool CfiCrossDso =
false;
45 bool CfiICallGeneralizePointers =
false;
46 bool CfiICallNormalizeIntegers =
false;
47 bool CfiCanonicalJumpTables =
false;
48 bool KcfiArity =
false;
49 int AsanFieldPadding = 0;
50 bool SharedRuntime =
false;
51 bool StableABI =
false;
52 bool AsanUseAfterScope =
true;
53 bool AsanPoisonCustomArrayCookie =
false;
54 bool AsanGlobalsDeadStripping =
false;
55 bool AsanUseOdrIndicator =
false;
56 bool AsanInvalidPointerCmp =
false;
57 bool AsanInvalidPointerSub =
false;
58 bool AsanOutlineInstrumentation =
false;
59 llvm::AsanDtorKind AsanDtorKind = llvm::AsanDtorKind::Invalid;
60 std::string HwasanAbi;
61 bool LinkRuntimes =
true;
62 bool LinkCXXRuntimes =
false;
64 bool SafeStackRuntime =
false;
66 bool TsanMemoryAccess =
true;
67 bool TsanFuncEntryExit =
true;
68 bool TsanAtomics =
true;
69 bool MinimalRuntime =
false;
71 bool ImplicitCfiRuntime =
false;
72 bool NeedsMemProfRt =
false;
73 bool HwasanUseAliases =
false;
74 llvm::AsanDetectStackUseAfterReturnMode AsanUseAfterReturn =
75 llvm::AsanDetectStackUseAfterReturnMode::Invalid;
77 std::string MemtagMode;
82 bool DiagnoseErrors =
true);
88 bool needsAsanRt()
const {
return Sanitizers.has(SanitizerKind::Address); }
90 return Sanitizers.has(SanitizerKind::HWAddress);
95 bool needsTysanRt()
const {
return Sanitizers.has(SanitizerKind::Type); }
96 bool needsTsanRt()
const {
return Sanitizers.has(SanitizerKind::Thread); }
97 bool needsMsanRt()
const {
return Sanitizers.has(SanitizerKind::Memory); }
98 bool needsFuzzer()
const {
return Sanitizers.has(SanitizerKind::Fuzzer); }
100 return Sanitizers.has(SanitizerKind::Leak) &&
101 !Sanitizers.has(SanitizerKind::Address) &&
102 !Sanitizers.has(SanitizerKind::HWAddress);
108 bool needsDfsanRt()
const {
return Sanitizers.has(SanitizerKind::DataFlow); }
113 bool needsScudoRt()
const {
return Sanitizers.has(SanitizerKind::Scudo); }
115 return Sanitizers.has(SanitizerKind::NumericalStability);
117 bool needsRtsanRt()
const {
return Sanitizers.has(SanitizerKind::Realtime); }
123 return Sanitizers.has(SanitizerKind::MemtagHeap);
126 return Sanitizers.has(SanitizerKind::MemtagStack);
129 return Sanitizers.has(SanitizerKind::MemtagGlobals);
132 assert(!MemtagMode.empty());
137 return Sanitizers.has(SanitizerKind::ShadowCallStack);
148 llvm::opt::ArgStringList &CmdArgs,
types::ID InputType)
const;