#include "clang/Basic/Sanitizers.def"">

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().

Unrecoverable