1*67e74705SXin Li //===--- SanitizerMetadata.h - Metadata for sanitizers ----------*- C++ -*-===// 2*67e74705SXin Li // 3*67e74705SXin Li // The LLVM Compiler Infrastructure 4*67e74705SXin Li // 5*67e74705SXin Li // This file is distributed under the University of Illinois Open Source 6*67e74705SXin Li // License. See LICENSE.TXT for details. 7*67e74705SXin Li // 8*67e74705SXin Li //===----------------------------------------------------------------------===// 9*67e74705SXin Li // 10*67e74705SXin Li // Class which emits metadata consumed by sanitizer instrumentation passes. 11*67e74705SXin Li // 12*67e74705SXin Li //===----------------------------------------------------------------------===// 13*67e74705SXin Li #ifndef LLVM_CLANG_LIB_CODEGEN_SANITIZERMETADATA_H 14*67e74705SXin Li #define LLVM_CLANG_LIB_CODEGEN_SANITIZERMETADATA_H 15*67e74705SXin Li 16*67e74705SXin Li #include "clang/AST/Type.h" 17*67e74705SXin Li #include "clang/Basic/LLVM.h" 18*67e74705SXin Li #include "clang/Basic/SourceLocation.h" 19*67e74705SXin Li 20*67e74705SXin Li namespace llvm { 21*67e74705SXin Li class GlobalVariable; 22*67e74705SXin Li class Instruction; 23*67e74705SXin Li class MDNode; 24*67e74705SXin Li } 25*67e74705SXin Li 26*67e74705SXin Li namespace clang { 27*67e74705SXin Li class VarDecl; 28*67e74705SXin Li 29*67e74705SXin Li namespace CodeGen { 30*67e74705SXin Li 31*67e74705SXin Li class CodeGenModule; 32*67e74705SXin Li 33*67e74705SXin Li class SanitizerMetadata { 34*67e74705SXin Li SanitizerMetadata(const SanitizerMetadata &) = delete; 35*67e74705SXin Li void operator=(const SanitizerMetadata &) = delete; 36*67e74705SXin Li 37*67e74705SXin Li CodeGenModule &CGM; 38*67e74705SXin Li public: 39*67e74705SXin Li SanitizerMetadata(CodeGenModule &CGM); 40*67e74705SXin Li void reportGlobalToASan(llvm::GlobalVariable *GV, const VarDecl &D, 41*67e74705SXin Li bool IsDynInit = false); 42*67e74705SXin Li void reportGlobalToASan(llvm::GlobalVariable *GV, SourceLocation Loc, 43*67e74705SXin Li StringRef Name, QualType Ty, bool IsDynInit = false, 44*67e74705SXin Li bool IsBlacklisted = false); 45*67e74705SXin Li void disableSanitizerForGlobal(llvm::GlobalVariable *GV); 46*67e74705SXin Li void disableSanitizerForInstruction(llvm::Instruction *I); 47*67e74705SXin Li private: 48*67e74705SXin Li llvm::MDNode *getLocationMetadata(SourceLocation Loc); 49*67e74705SXin Li }; 50*67e74705SXin Li } // end namespace CodeGen 51*67e74705SXin Li } // end namespace clang 52*67e74705SXin Li 53*67e74705SXin Li #endif 54