clang  8.0.0svn
Macros | Enumerations | Functions
SanitizerArgs.cpp File Reference
#include "clang/Driver/SanitizerArgs.h"
#include "ToolChains/CommonArgs.h"
#include "clang/Basic/Sanitizers.h"
#include "clang/Driver/Driver.h"
#include "clang/Driver/DriverDiagnostic.h"
#include "clang/Driver/Options.h"
#include "clang/Driver/ToolChain.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/SpecialCaseList.h"
#include "llvm/Support/TargetParser.h"
#include <memory>
#include "clang/Basic/Sanitizers.def"
Include dependency graph for SanitizerArgs.cpp:

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  : SanitizerMask {
  NeedsUbsanRt = Undefined | Integer | ImplicitConversion | Nullability | CFI, NeedsUbsanCxxRt = Vptr | CFI, NotAllowedWithTrap = Vptr, NotAllowedWithMinimalRuntime = Vptr,
  RequiresPIE = DataFlow | HWAddress | Scudo, NeedsUnwindTables = Address | HWAddress | Thread | Memory | DataFlow, SupportsCoverage, RecoverableByDefault = Undefined | Integer | ImplicitConversion | Nullability,
  Unrecoverable = Unreachable | Return, AlwaysRecoverable = KernelAddress | KernelHWAddress, LegacyFsanitizeRecoverMask = Undefined | Integer, NeedsLTO = CFI,
  TrappingSupported, TrappingDefault = CFI, CFIClasses, CompatibleWithMinimalRuntime = TrappingSupported | Scudo | ShadowCallStack
}
 
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
}
 

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. More...
 
static int parseCoverageFeatures (const Driver &D, const llvm::opt::Arg *A)
 Parse -f(no-)?sanitize-coverage= flag values, diagnosing any invalid components. More...
 
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. More...
 
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. More...
 
static std::string toString (const clang::SanitizerSet &Sanitizers)
 Produce a string containing comma-separated names of sanitizers in Sanitizers set. More...
 
static void addDefaultBlacklists (const Driver &D, SanitizerMask Kinds, std::vector< std::string > &BlacklistFiles)
 
static SanitizerMask setGroupBits (SanitizerMask Kinds)
 Sets group bits for every group that has at least one representative already enabled in Kinds. More...
 
static SanitizerMask parseSanitizeTrapArgs (const Driver &D, const llvm::opt::ArgList &Args)
 
static void addIncludeLinkerOption (const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, StringRef SymbolName)
 

Macro Definition Documentation

◆ SANITIZER [1/2]

#define SANITIZER (   NAME,
  ID 
)

◆ SANITIZER [2/2]

#define SANITIZER (   NAME,
  ID 
)
Value:
if (Sanitizers.has(ID)) { \
if (!Res.empty()) \
Res += ","; \
Res += NAME; \
}

◆ SANITIZER_GROUP

#define SANITIZER_GROUP (   NAME,
  ID,
  ALIAS 
)
Value:
if (Kinds & SanitizerKind::ID) \
Kinds |= SanitizerKind::ID##Group;

Enumeration Type Documentation

◆ anonymous enum

anonymous enum : SanitizerMask
Enumerator
NeedsUbsanRt 
NeedsUbsanCxxRt 
NotAllowedWithTrap 
NotAllowedWithMinimalRuntime 
RequiresPIE 
NeedsUnwindTables 
SupportsCoverage 
RecoverableByDefault 
Unrecoverable 
AlwaysRecoverable 
LegacyFsanitizeRecoverMask 
NeedsLTO 
TrappingSupported 
TrappingDefault 
CFIClasses 
CompatibleWithMinimalRuntime 

Definition at line 29 of file SanitizerArgs.cpp.

◆ CoverageFeature

Enumerator
CoverageFunc 
CoverageBB 
CoverageEdge 
CoverageIndirCall 
CoverageTraceBB 
CoverageTraceCmp 
CoverageTraceDiv 
CoverageTraceGep 
Coverage8bitCounters 
CoverageTracePC 
CoverageTracePCGuard 
CoverageNoPrune 
CoverageInline8bitCounters 
CoveragePCTable 
CoverageStackDepth 

Definition at line 53 of file SanitizerArgs.cpp.

Function Documentation

◆ addDefaultBlacklists()

static void addDefaultBlacklists ( const Driver D,
SanitizerMask  Kinds,
std::vector< std::string > &  BlacklistFiles 
)
static

◆ addIncludeLinkerOption()

static void addIncludeLinkerOption ( const ToolChain TC,
const llvm::opt::ArgList &  Args,
llvm::opt::ArgStringList &  CmdArgs,
StringRef  SymbolName 
)
static

◆ describeSanitizeArg()

std::string describeSanitizeArg ( const llvm::opt::Arg *  A,
SanitizerMask  Mask 
)
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 1019 of file SanitizerArgs.cpp.

References clang::expandSanitizerGroups(), and clang::parseSanitizerValue().

Referenced by lastArgumentForMask(), and clang::driver::SanitizerArgs::SanitizerArgs().

◆ lastArgumentForMask()

std::string lastArgumentForMask ( const Driver D,
const llvm::opt::ArgList &  Args,
SanitizerMask  Mask 
)
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 999 of file SanitizerArgs.cpp.

References describeSanitizeArg(), clang::expandSanitizerGroups(), and parseArgValues().

Referenced by clang::driver::SanitizerArgs::addArgs(), and clang::driver::SanitizerArgs::SanitizerArgs().

◆ parseArgValues()

SanitizerMask parseArgValues ( const Driver D,
const llvm::opt::Arg *  A,
bool  DiagnoseErrors 
)
static

Parse a -fsanitize= or -fno-sanitize= argument's values, diagnosing any invalid components.

Returns a SanitizerMask.

Definition at line 935 of file SanitizerArgs.cpp.

References clang::driver::Driver::Diag(), and clang::parseSanitizerValue().

Referenced by lastArgumentForMask(), parseSanitizeTrapArgs(), and clang::driver::SanitizerArgs::SanitizerArgs().

◆ parseCoverageFeatures()

int parseCoverageFeatures ( const Driver D,
const llvm::opt::Arg *  A 
)
static

Parse -f(no-)?sanitize-coverage= flag values, diagnosing any invalid components.

Returns OR of members of CoverageFeature enumeration.

Definition at line 968 of file SanitizerArgs.cpp.

References Coverage8bitCounters, CoverageBB, CoverageEdge, CoverageFunc, CoverageIndirCall, CoverageInline8bitCounters, CoverageNoPrune, CoveragePCTable, CoverageStackDepth, CoverageTraceBB, CoverageTraceCmp, CoverageTraceDiv, CoverageTraceGep, CoverageTracePC, CoverageTracePCGuard, and clang::driver::Driver::Diag().

◆ parseSanitizeTrapArgs()

static SanitizerMask parseSanitizeTrapArgs ( const Driver D,
const llvm::opt::ArgList &  Args 
)
static

◆ setGroupBits()

static SanitizerMask setGroupBits ( SanitizerMask  Kinds)
static

Sets group bits for every group that has at least one representative already enabled in Kinds.

Definition at line 129 of file SanitizerArgs.cpp.

Referenced by parseSanitizeTrapArgs(), and clang::driver::SanitizerArgs::SanitizerArgs().

◆ toString()

static std::string toString ( const clang::SanitizerSet Sanitizers)
static