|
clang 24.0.0git
|
#include "clang/Driver/SanitizerArgs.h"#include "clang/Basic/Sanitizers.h"#include "clang/Driver/Driver.h"#include "clang/Driver/ToolChain.h"#include "clang/Options/Options.h"#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) |
| #define | SANITIZER(NAME, ID) |
| #define | SANITIZER_GROUP(NAME, ID, ALIAS) |
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 , CoverageTracePCEntryExit = 1 << 19 } |
| 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=<sanitizer1>=<value1>... 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 options::ID | getHexagonFixedRegOption (unsigned RegNo) |
| Map a Hexagon callee-saved register number (16-27) to its -ffixed-rN option, used to check that the shadow call stack pointer is reserved. | |
| static std::string | toStringWithGroups (const clang::SanitizerSet &Sanitizers) |
Produce a string containing comma-separated names of sanitizers and sanitizer groups 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 |
| static const SanitizerMask | TrappingDefault |
| static const SanitizerMask | AnnotateDebugInfoDefault |
| static const SanitizerMask | CFIClasses |
| static const SanitizerMask | CompatibleWithMinimalRuntime |
| #define SANITIZER | ( | NAME, | |
| ID ) |
| #define SANITIZER | ( | NAME, | |
| ID ) |
| #define SANITIZER | ( | NAME, | |
| ID ) |
| #define SANITIZER_GROUP | ( | NAME, | |
| ID, | |||
| ALIAS ) |
| Enumerator | |
|---|---|
| BinaryMetadataCovered | |
| BinaryMetadataAtomics | |
| BinaryMetadataUAR | |
Definition at line 115 of file SanitizerArgs.cpp.
| enum CoverageFeature |
Definition at line 92 of file SanitizerArgs.cpp.
|
static |
Definition at line 227 of file SanitizerArgs.cpp.
References clang::driver::Driver::Diag(), clang::File, clang::driver::Driver::getVFS(), clang::driver::Driver::ResourceDir, and validateSpecialCaseListFormat().
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 1410 of file SanitizerArgs.cpp.
References clang::driver::ToolChain::getTriple().
Referenced by clang::driver::SanitizerArgs::addArgs().
|
static |
Definition at line 1399 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::addArgs().
|
static |
Produce an argument string from argument A, which shows how it provides a value in Mask.
For instance, the argument "-fsanitize=address,alignment" with mask NeedsUbsanRt would produce "-fsanitize=alignment".
Definition at line 1924 of file SanitizerArgs.cpp.
References clang::expandSanitizerGroups(), and clang::parseSanitizerValue().
Referenced by lastArgumentForMask(), and clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Map a Hexagon callee-saved register number (16-27) to its -ffixed-rN option, used to check that the shadow call stack pointer is reserved.
Definition at line 169 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 1424 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::addArgs().
|
static |
Return true if an execute-only target disallows data access to code sections.
Definition at line 205 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Produce an argument string from ArgList Args, which shows how it provides some sanitizer kind from Mask.
For example, the argument list "-fsanitize=thread,vptr -fsanitize=address" with mask NeedsUbsanRt would produce "-fsanitize=vptr".
Definition at line 1904 of file SanitizerArgs.cpp.
References describeSanitizeArg(), clang::expandSanitizerGroups(), and parseArgValues().
Referenced by clang::driver::SanitizerArgs::addArgs(), and clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Parse a -fsanitize=<sanitizer1>=<value1>... or -fno-sanitize= argument's values, diagnosing any invalid components.
Cutoffs are stored in the passed parameter.
Definition at line 1803 of file SanitizerArgs.cpp.
References clang::driver::Driver::Diag(), and clang::parseSanitizerWeightedValue().
Referenced by parseSanitizeSkipHotCutoffArgs().
|
static |
Parse a -fsanitize= or -fno-sanitize= argument's values, diagnosing any invalid components.
Returns a SanitizerMask.
Definition at line 1766 of file SanitizerArgs.cpp.
References clang::driver::Driver::Diag(), and clang::parseSanitizerValue().
Referenced by lastArgumentForMask(), parseSanitizeArgs(), and clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Parse -f(no-)?sanitize-metadata= flag values, diagnosing any invalid components.
Returns OR of members of BinaryMetadataFeature enumeration.
Definition at line 1881 of file SanitizerArgs.cpp.
References BinaryMetadataAtomics, BinaryMetadataCovered, BinaryMetadataUAR, and clang::driver::Driver::Diag().
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Parse -f(no-)?sanitize-coverage= flag values, diagnosing any invalid components.
Returns OR of members of CoverageFeature enumeration.
Definition at line 1844 of file SanitizerArgs.cpp.
References Coverage8bitCounters, CoverageBB, CoverageControlFlow, CoverageEdge, CoverageFunc, CoverageIndirCall, CoverageInline8bitCounters, CoverageInlineBoolFlag, CoverageNoPrune, CoveragePCTable, CoverageStackDepth, CoverageTraceBB, CoverageTraceCmp, CoverageTraceDiv, CoverageTraceGep, CoverageTraceLoads, CoverageTracePC, CoverageTracePCEntryExit, CoverageTracePCGuard, CoverageTraceStores, and clang::driver::Driver::Diag().
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Parse -fsanitize-undefined-ignore-overflow-pattern= flag values, diagnosing any invalid values.
Returns a mask of excluded overflow patterns.
Definition at line 1819 of file SanitizerArgs.cpp.
References clang::LangOptionsBase::AddSignedOverflowTest, clang::LangOptionsBase::AddUnsignedOverflowTest, clang::LangOptionsBase::All, clang::driver::Driver::Diag(), clang::LangOptionsBase::NegUnsignedConst, clang::LangOptionsBase::None, and clang::LangOptionsBase::PostDecrInWhile.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 310 of file SanitizerArgs.cpp.
References clang::AlwaysIn, clang::AlwaysOut, clang::Default, clang::driver::Driver::Diag(), clang::expandSanitizerGroups(), clang::SanitizerSet::Mask, parseArgValues(), and toStringWithGroups().
Referenced by parseSanitizeTrapArgs(), and clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 376 of file SanitizerArgs.cpp.
References parseArgCutoffs().
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 364 of file SanitizerArgs.cpp.
References parseSanitizeArgs(), setGroupBits(), TrappingDefault, and TrappingSupported.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Parse -f(no-)?sanitize-(coverage-)?(allow|ignore)list argument's values, diagnosing any invalid file paths and validating special case list format.
Definition at line 268 of file SanitizerArgs.cpp.
References clang::driver::Driver::Diag(), clang::driver::Driver::getVFS(), and validateSpecialCaseListFormat().
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Sets group bits for every group that has at least one representative already enabled in Kinds.
Definition at line 297 of file SanitizerArgs.cpp.
Referenced by parseSanitizeTrapArgs(), and clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 1380 of file SanitizerArgs.cpp.
References clang::serializeSanitizerMaskCutoffs().
|
static |
Produce a string containing comma-separated names of sanitizers in Sanitizers set.
Definition at line 1368 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::format::JavaScriptImportSorter::analyze(), AnalyzeBitFieldAssignment(), clang::ast_matchers::AST_MATCHER_P(), clang::driver::Driver::BuildJobs(), BuiltinAlignment(), clang::Sema::BuiltinConstantArgRange(), CheckArrayDesignatorExpr(), clang::Sema::checkArrayTooLarge(), clang::SemaX86::CheckBuiltinVUnpackBImm(), checkCaseValue(), checkCodeSegName(), CheckedIntArithmetic(), clang::Sema::CheckEnumConstant(), CheckForDuplicateEnumValues(), clang::checkFPMScaleIfConstant(), clang::Sema::CheckImplicitConversion(), clang::Sema::CheckLoopHintExpr(), checkPositiveIntArgument(), clang::SemaPPC::CheckPPCBuiltinFunctionCall(), clang::Sema::checkSectionName(), clang::Sema::CheckTemplateArgument(), clang::Sema::CheckTypedefForVariablyModifiedType(), clang::Sema::checkUInt32Argument(), compileModuleBehindLockOrRead(), clang::CompilerInvocation::computeContextHash(), DefineTypeSize(), diagnoseWellFormedUnsatisfiedConstraintExpr(), diagnoseXorMisusedAsPow(), DiagTemplateArg(), clang::ento::Range::dump(), clang::ento::CheckerInfo::dumpToStream(), clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), EvaluateDirectiveSubExpr(), getModuleContextHash(), clang::threadSafety::getSourceLiteralString(), handlePatchableFunctionEntryAttr(), clang::tooling::RefactoringASTConsumer::HandleTranslationUnit(), clang::interp::interp__builtin_memcpy(), IsStructurallyEquivalent(), clang::Preprocessor::LexEmbedParameters(), clang::CompilerInstance::LoadRequestedPlugins(), makeAttributeArgExpr(), makeClusterDimsArgExpr(), makeLaunchBoundsArgExpr(), clang::operator<<(), clang::operator<<(), clang::operator<<(), PrettyPrintInRange(), clang::format::internal::reformat(), clang::ento::CheckerManager::runCheckersForEvalCall(), clang::driver::SanitizerArgs::SanitizerArgs(), sharedInstantiateConstructorDestructorAttr(), clang::format::sortCppIncludes(), clang::format::sortJavaImports(), toString(), clang::Sema::tryToFixVariablyModifiedVarType(), clang::Sema::VerifyBitField(), clang::TextNodeDumper::VisitIntegerLiteral(), clang::Interpreter::~Interpreter(), and clang::SavedStreamPosition::~SavedStreamPosition().
|
static |
Produce a string containing comma-separated names of sanitizers and sanitizer groups in Sanitizers set.
Definition at line 1386 of file SanitizerArgs.cpp.
Referenced by parseSanitizeArgs().
|
static |
Definition at line 213 of file SanitizerArgs.cpp.
References clang::driver::Driver::Diag(), and clang::driver::Driver::getVFS().
Referenced by addDefaultIgnorelists(), and parseSpecialCaseListArg().
|
static |
Definition at line 68 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 81 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 82 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::addArgs().
|
static |
Definition at line 86 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 77 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 71 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::needsLTO(), and clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 35 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::needsUbsanCXXRt(), and clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 29 of file SanitizerArgs.cpp.
Referenced by collectSanitizerRuntimes(), and clang::driver::SanitizerArgs::needsUbsanRt().
|
static |
Definition at line 41 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::needsUnwindTables().
|
static |
Definition at line 39 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 38 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 37 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 60 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 45 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().
|
static |
Definition at line 79 of file SanitizerArgs.cpp.
Referenced by parseSanitizeTrapArgs().
|
static |
Definition at line 72 of file SanitizerArgs.cpp.
Referenced by parseSanitizeTrapArgs().
|
static |
Definition at line 65 of file SanitizerArgs.cpp.
Referenced by clang::driver::SanitizerArgs::SanitizerArgs().