1 //===--- SanitizerArgs.h - Arguments for sanitizer tools -------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_CLANG_DRIVER_SANITIZERARGS_H
10 #define LLVM_CLANG_DRIVER_SANITIZERARGS_H
12 #include "clang/Basic/Sanitizers.h"
13 #include "llvm/Option/Arg.h"
14 #include "llvm/Option/ArgList.h"
24 SanitizerSet Sanitizers;
25 SanitizerSet RecoverableSanitizers;
27 std::string BlacklistFile;
31 bool AsanZeroBaseShadow;
32 bool UbsanTrapOnError;
33 bool AsanSharedRuntime;
37 /// Parses the sanitizer arguments from an argument list.
38 SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args);
40 bool needsAsanRt() const { return Sanitizers.has(SanitizerKind::Address); }
41 bool needsSharedAsanRt() const { return AsanSharedRuntime; }
42 bool needsTsanRt() const { return Sanitizers.has(SanitizerKind::Thread); }
43 bool needsMsanRt() const { return Sanitizers.has(SanitizerKind::Memory); }
44 bool needsLsanRt() const {
45 return Sanitizers.has(SanitizerKind::Leak) &&
46 !Sanitizers.has(SanitizerKind::Address);
48 bool needsUbsanRt() const;
49 bool needsDfsanRt() const { return Sanitizers.has(SanitizerKind::DataFlow); }
51 bool sanitizesVptr() const { return Sanitizers.has(SanitizerKind::Vptr); }
52 bool requiresPIE() const;
53 bool needsUnwindTables() const;
54 bool linkCXXRuntimes() const { return LinkCXXRuntimes; }
55 void addArgs(const llvm::opt::ArgList &Args,
56 llvm::opt::ArgStringList &CmdArgs) const;
60 bool getDefaultBlacklist(const Driver &D, std::string &BLPath);