clang: lib/Driver/SanitizerArgs.cpp File Reference (original) (raw)
#include "[clang/Driver/SanitizerArgs.h](SanitizerArgs%5F8h%5Fsource.html)"
#include "[clang/Basic/Sanitizers.h](Sanitizers%5F8h%5Fsource.html)"
#include "[clang/Driver/Driver.h](Driver%5F8h%5Fsource.html)"
#include "[clang/Driver/Options.h](Options%5F8h%5Fsource.html)"
#include "[clang/Driver/ToolChain.h](ToolChain%5F8h%5Fsource.html)"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/SpecialCaseList.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/TargetParser/AArch64TargetParser.h"
#include "llvm/TargetParser/RISCVTargetParser.h"
#include "llvm/TargetParser/TargetParser.h"
#include "llvm/Transforms/Instrumentation/AddressSanitizerOptions.h"
#include <memory>
#include "clang/Basic/Sanitizers.def"
Go to the source code of this file.
Macros | |
---|---|
#define | SANITIZER(NAME, ID) |
#define | SANITIZER_GROUP(NAME, ID, ALIAS) |
#define | SANITIZER(NAME, ID) |
Enumerations | |
---|---|
enum | CoverageFeature { CoverageFunc = 1 << 0 , CoverageBB = 1 << 1 , CoverageEdge = 1 << 2 , CoverageIndirCall = 1 << 3 , CoverageTraceBB = 1 << 4 , CoverageTraceCmp = 1 << 5 , CoverageTraceDiv = 1 << 6 , CoverageTraceGep = 1 << 7 , Coverage8bitCounters = 1 << 8 , CoverageTracePC = 1 << 9 , CoverageTracePCGuard = 1 << 10 , CoverageNoPrune = 1 << 11 , CoverageInline8bitCounters = 1 << 12 , CoveragePCTable = 1 << 13 , CoverageStackDepth = 1 << 14 , CoverageInlineBoolFlag = 1 << 15 , CoverageTraceLoads = 1 << 16 , CoverageTraceStores = 1 << 17 , CoverageControlFlow = 1 << 18 } |
enum | BinaryMetadataFeature { BinaryMetadataCovered = 1 << 0 , BinaryMetadataAtomics = 1 << 1 , BinaryMetadataUAR = 1 << 2 } |
Functions | |
---|---|
static SanitizerMask | parseArgValues (const Driver &D, const llvm::opt::Arg *A, bool DiagnoseErrors) |
Parse a -fsanitize= or -fno-sanitize= argument's values, diagnosing any invalid components. | |
static void | parseArgCutoffs (const Driver &D, const llvm::opt::Arg *A, bool DiagnoseErrors, SanitizerMaskCutoffs &Cutoffs) |
Parse a -fsanitize==... or -fno-sanitize= argument's values, diagnosing any invalid components. | |
static int | parseCoverageFeatures (const Driver &D, const llvm::opt::Arg *A, bool DiagnoseErrors) |
Parse -f(no-)?sanitize-coverage= flag values, diagnosing any invalid components. | |
static int | parseOverflowPatternExclusionValues (const Driver &D, const llvm::opt::Arg *A, bool DiagnoseErrors) |
Parse -fsanitize-undefined-ignore-overflow-pattern= flag values, diagnosing any invalid values. | |
static int | parseBinaryMetadataFeatures (const Driver &D, const llvm::opt::Arg *A, bool DiagnoseErrors) |
Parse -f(no-)?sanitize-metadata= flag values, diagnosing any invalid components. | |
static std::string | lastArgumentForMask (const Driver &D, const llvm::opt::ArgList &Args, SanitizerMask Mask) |
Produce an argument string from ArgList Args, which shows how it provides some sanitizer kind from Mask. | |
static std::string | describeSanitizeArg (const llvm::opt::Arg *A, SanitizerMask Mask) |
Produce an argument string from argument A, which shows how it provides a value in Mask. | |
static std::string | toString (const clang::SanitizerSet &Sanitizers) |
Produce a string containing comma-separated names of sanitizers in Sanitizers set. | |
static bool | isExecuteOnlyTarget (const llvm::Triple &Triple, const llvm::opt::ArgList &Args) |
Return true if an execute-only target disallows data access to code sections. | |
static void | validateSpecialCaseListFormat (const Driver &D, std::vector< std::string > &SCLFiles, unsigned MalformedSCLErrorDiagID, bool DiagnoseErrors) |
static void | addDefaultIgnorelists (const Driver &D, SanitizerMask Kinds, std::vector< std::string > &IgnorelistFiles, bool DiagnoseErrors) |
static void | parseSpecialCaseListArg (const Driver &D, const llvm::opt::ArgList &Args, std::vector< std::string > &SCLFiles, llvm::opt::OptSpecifier SCLOptionID, llvm::opt::OptSpecifier NoSCLOptionID, unsigned MalformedSCLErrorDiagID, bool DiagnoseErrors) |
Parse -f(no-)?sanitize-(coverage-)?(allow|ignore)list argument's values, diagnosing any invalid file paths and validating special case list format. | |
static SanitizerMask | setGroupBits (SanitizerMask Kinds) |
Sets group bits for every group that has at least one representative already enabled in Kinds. | |
static SanitizerMask | parseSanitizeArgs (const Driver &D, const llvm::opt::ArgList &Args, bool DiagnoseErrors, SanitizerMask Default, SanitizerMask AlwaysIn, SanitizerMask AlwaysOut, int OptInID, int OptOutID) |
static SanitizerMask | parseSanitizeTrapArgs (const Driver &D, const llvm::opt::ArgList &Args, bool DiagnoseErrors) |
static SanitizerMaskCutoffs | parseSanitizeSkipHotCutoffArgs (const Driver &D, const llvm::opt::ArgList &Args, bool DiagnoseErrors) |
static std::string | toString (const clang::SanitizerMaskCutoffs &Cutoffs) |
static void | addSpecialCaseListOpt (const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, const char *SCLOptFlag, const std::vector< std::string > &SCLFiles) |
static void | addIncludeLinkerOption (const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, StringRef SymbolName) |
static bool | hasTargetFeatureMTE (const llvm::opt::ArgStringList &CmdArgs) |
Variables | |
---|---|
static const SanitizerMask | NeedsUbsanRt |
static const SanitizerMask | NeedsUbsanCxxRt |
static const SanitizerMask | NotAllowedWithTrap = SanitizerKind::Vptr |
static const SanitizerMask | NotAllowedWithMinimalRuntime = SanitizerKind::Vptr |
static const SanitizerMask | NotAllowedWithExecuteOnly |
static const SanitizerMask | NeedsUnwindTables |
static const SanitizerMask | SupportsCoverage |
static const SanitizerMask | RecoverableByDefault |
static const SanitizerMask | Unrecoverable |
static const SanitizerMask | AlwaysRecoverable |
static const SanitizerMask | NeedsLTO = SanitizerKind::CFI |
static const SanitizerMask | TrappingSupported |
static const SanitizerMask | MergeDefault = SanitizerKind::Undefined |
static const SanitizerMask | TrappingDefault |
static const SanitizerMask | CFIClasses |
static const SanitizerMask | CompatibleWithMinimalRuntime |
◆ SANITIZER [1/2]
| #define SANITIZER | ( | | NAME, | | ------------------------------------------------------------ | - | | ----- | | | ID | | | | | ) | | | |
◆ SANITIZER [2/2]
| #define SANITIZER | ( | | NAME, | | ------------------------------------------------------------ | - | | ----- | | | ID | | | | | ) | | | |
Value:
if (Sanitizers.has(SanitizerKind::ID)) { \
if (!Res.empty()) \
Res += ","; \
Res += NAME; \
}
◆ SANITIZER_GROUP
| #define SANITIZER_GROUP | ( | | NAME, | | ------------------------------------------------------------------------- | - | | ----- | | | ID, | | | | | | ALIAS | | | | | ) | | | |
Value:
if (Kinds & SanitizerKind::ID) \
Kinds |= SanitizerKind::ID##Group;
◆ BinaryMetadataFeature
Enumerator |
---|
BinaryMetadataCovered |
BinaryMetadataAtomics |
BinaryMetadataUAR |
Definition at line 106 of file SanitizerArgs.cpp.
◆ CoverageFeature
Enumerator |
---|
CoverageFunc |
CoverageBB |
CoverageEdge |
CoverageIndirCall |
CoverageTraceBB |
CoverageTraceCmp |
CoverageTraceDiv |
CoverageTraceGep |
Coverage8bitCounters |
CoverageTracePC |
CoverageTracePCGuard |
CoverageNoPrune |
CoverageInline8bitCounters |
CoveragePCTable |
CoverageStackDepth |
CoverageInlineBoolFlag |
CoverageTraceLoads |
CoverageTraceStores |
CoverageControlFlow |
Definition at line 84 of file SanitizerArgs.cpp.
◆ addDefaultIgnorelists()
static void addDefaultIgnorelists ( const Driver & D, SanitizerMask Kinds, std::vector< std::string > & IgnorelistFiles, bool DiagnoseErrors ) | static |
---|
◆ addIncludeLinkerOption()
static void addIncludeLinkerOption ( const ToolChain & TC, const llvm::opt::ArgList & Args, llvm::opt::ArgStringList & CmdArgs, StringRef SymbolName ) | static |
---|
◆ addSpecialCaseListOpt()
static void addSpecialCaseListOpt ( const llvm::opt::ArgList & Args, llvm::opt::ArgStringList & CmdArgs, const char * SCLOptFlag, const std::vector< std::string > & SCLFiles ) | static |
---|
◆ describeSanitizeArg()
std::string describeSanitizeArg ( const llvm::opt::Arg * A, SanitizerMask Mask ) | static |
---|
◆ hasTargetFeatureMTE()
static bool hasTargetFeatureMTE ( const llvm::opt::ArgStringList & CmdArgs) | static |
---|
◆ isExecuteOnlyTarget()
static bool isExecuteOnlyTarget ( const llvm::Triple & Triple, const llvm::opt::ArgList & Args ) | static |
---|
◆ lastArgumentForMask()
std::string lastArgumentForMask ( const Driver & D, const llvm::opt::ArgList & Args, SanitizerMask Mask ) | static |
---|
◆ parseArgCutoffs()
◆ parseArgValues()
◆ parseBinaryMetadataFeatures()
int parseBinaryMetadataFeatures ( const Driver & D, const llvm::opt::Arg * A, bool DiagnoseErrors ) | static |
---|
◆ parseCoverageFeatures()
int parseCoverageFeatures ( const Driver & D, const llvm::opt::Arg * A, bool DiagnoseErrors ) | static |
---|
Parse -f(no-)?sanitize-coverage= flag values, diagnosing any invalid components.
Returns OR of members of CoverageFeature
enumeration.
Definition at line 1575 of file SanitizerArgs.cpp.
References Coverage8bitCounters, CoverageBB, CoverageControlFlow, CoverageEdge, CoverageFunc, CoverageIndirCall, CoverageInline8bitCounters, CoverageInlineBoolFlag, CoverageNoPrune, CoveragePCTable, CoverageStackDepth, CoverageTraceBB, CoverageTraceCmp, CoverageTraceDiv, CoverageTraceGep, CoverageTraceLoads, CoverageTracePC, CoverageTracePCGuard, CoverageTraceStores, and D.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
◆ parseOverflowPatternExclusionValues()
static int parseOverflowPatternExclusionValues ( const Driver & D, const llvm::opt::Arg * A, bool DiagnoseErrors ) | static |
---|
◆ parseSanitizeArgs()
◆ parseSanitizeSkipHotCutoffArgs()
◆ parseSanitizeTrapArgs()
static SanitizerMask parseSanitizeTrapArgs ( const Driver & D, const llvm::opt::ArgList & Args, bool DiagnoseErrors ) | static |
---|
◆ parseSpecialCaseListArg()
static void parseSpecialCaseListArg ( const Driver & D, const llvm::opt::ArgList & Args, std::vector< std::string > & SCLFiles, llvm::opt::OptSpecifier SCLOptionID, llvm::opt::OptSpecifier NoSCLOptionID, unsigned MalformedSCLErrorDiagID, bool DiagnoseErrors ) | static |
---|
◆ setGroupBits()
◆ toString() [1/2]
◆ toString() [2/2]
Produce a string containing comma-separated names of sanitizers in Sanitizers
set.
Definition at line 1163 of file SanitizerArgs.cpp.
Referenced by clang::SemaOpenACC::ActOnArraySectionExpr(), clang::Sema::ActOnDesignatedInitializer(), clang::Sema::ActOnFinishSwitchStmt(), clang::Sema::ActOnGCCAsmStmt(), clang::SemaOpenMP::ActOnOMPArraySectionExpr(), clang::SemaOpenMP::ActOnOMPArrayShapingExpr(), clang::SemaOpenMP::ActOnOpenMPCriticalDirective(), clang::Sema::ActOnPragmaClangSection(), clang::driver::SanitizerArgs::addArgs(), clang::interp::AddSubMulHelper(), clang::format::JavaScriptImportSorter::analyze(), AnalyzeBitFieldAssignment(), clang::ast_matchers::AST_MATCHER_P(), clang::Sema::BuildArrayType(), clang::Sema::BuildCXXNew(), BuiltinAlignment(), clang::Sema::BuiltinConstantArgRange(), CheckArrayDesignatorExpr(), checkCaseValue(), checkCodeSegName(), CheckedIntArithmetic(), clang::Sema::CheckEnumConstant(), CheckForDuplicateEnumValues(), clang::Sema::CheckImplicitConversion(), clang::Sema::CheckLoopHintExpr(), checkPositiveIntArgument(), clang::Sema::checkSectionName(), checkSimpleDecomposition(), clang::Sema::CheckTemplateArgument(), checkTupleLikeDecomposition(), clang::Sema::CheckTypedefForVariablyModifiedType(), clang::Sema::checkUInt32Argument(), DefineTypeSize(), diagnoseWellFormedUnsatisfiedConstraintExpr(), diagnoseXorMisusedAsPow(), DiagTemplateArg(), clang::ento::Range::dump(), clang::ento::CheckerInfo::dumpToStream(), EvaluateDirectiveSubExpr(), getModuleContextHash(), clang::CompilerInvocation::getModuleHash(), clang::threadSafety::getSourceLiteralString(), clang::tooling::RefactoringASTConsumer::HandleTranslationUnit(), clang::interp::IncDecHelper(), clang::interp::interp__builtin_memcpy(), IsStructurallyEquivalent(), clang::Preprocessor::LexEmbedParameters(), makeLaunchBoundsArgExpr(), clang::interp::Neg(), clang::operator<<(), parseSanitizeArgs(), PrettyPrintInRange(), clang::format::internal::reformat(), clang::ento::CheckerManager::runCheckersForEvalCall(), clang::driver::SanitizerArgs::SanitizerArgs(), clang::format::sortCppIncludes(), clang::format::sortJavaImports(), toString(), clang::Sema::tryToFixVariablyModifiedVarType(), clang::Sema::VerifyBitField(), clang::TextNodeDumper::VisitIntegerLiteral(), clang::Interpreter::~Interpreter(), and clang::SavedStreamPosition::~SavedStreamPosition().
◆ validateSpecialCaseListFormat()
static void validateSpecialCaseListFormat ( const Driver & D, std::vector< std::string > & SCLFiles, unsigned MalformedSCLErrorDiagID, bool DiagnoseErrors ) | static |
---|
◆ AlwaysRecoverable
◆ CFIClasses
◆ CompatibleWithMinimalRuntime
◆ MergeDefault
◆ NeedsLTO
◆ NeedsUbsanCxxRt
◆ NeedsUbsanRt
Initial value:
=
SanitizerKind::Undefined | SanitizerKind::Integer |
SanitizerKind::LocalBounds | SanitizerKind::ImplicitConversion |
SanitizerKind::Nullability | SanitizerKind::CFI |
SanitizerKind::FloatDivideByZero | SanitizerKind::ObjCCast
Definition at line 29 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::needsUbsanRt().
◆ NeedsUnwindTables
◆ NotAllowedWithExecuteOnly
◆ NotAllowedWithMinimalRuntime
const SanitizerMask NotAllowedWithMinimalRuntime = SanitizerKind::Vptr | static |
---|
◆ NotAllowedWithTrap
◆ RecoverableByDefault
◆ SupportsCoverage
Initial value:
=
SanitizerKind::Address | SanitizerKind::HWAddress |
SanitizerKind::KernelAddress | SanitizerKind::KernelHWAddress |
SanitizerKind::Type | SanitizerKind::MemtagStack |
SanitizerKind::MemtagHeap | SanitizerKind::MemtagGlobals |
SanitizerKind::Memory | SanitizerKind::KernelMemory | SanitizerKind::Leak |
SanitizerKind::Undefined | SanitizerKind::Integer | SanitizerKind::Bounds |
SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
SanitizerKind::DataFlow | SanitizerKind::Fuzzer |
SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero |
SanitizerKind::SafeStack | SanitizerKind::ShadowCallStack |
SanitizerKind::Thread | SanitizerKind::ObjCCast | SanitizerKind::KCFI |
SanitizerKind::NumericalStability
Definition at line 44 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
◆ TrappingDefault
◆ TrappingSupported
Initial value:
=
(SanitizerKind::Undefined & ~SanitizerKind::Vptr) | SanitizerKind::Integer |
SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
SanitizerKind::LocalBounds | SanitizerKind::CFI |
SanitizerKind::FloatDivideByZero | SanitizerKind::ObjCCast
Definition at line 67 of file SanitizerArgs.cpp.
Referenced by parseSanitizeTrapArgs().