111394Sswallace//===--- SanitizerMetadata.h - Metadata for sanitizers ----------*- C++ -*-===// 2139799Simp// 311394Sswallace// The LLVM Compiler Infrastructure 4139799Simp// 511394Sswallace// This file is distributed under the University of Illinois Open Source 611394Sswallace// License. See LICENSE.TXT for details. 711394Sswallace// 811394Sswallace//===----------------------------------------------------------------------===// 911394Sswallace// 1011394Sswallace// Class which emits metadata consumed by sanitizer instrumentation passes. 1111394Sswallace// 1211394Sswallace//===----------------------------------------------------------------------===// 1311394Sswallace#ifndef LLVM_CLANG_LIB_CODEGEN_SANITIZERMETADATA_H 1411394Sswallace#define LLVM_CLANG_LIB_CODEGEN_SANITIZERMETADATA_H 1511394Sswallace 1611394Sswallace#include "clang/AST/Type.h" 1711394Sswallace#include "clang/Basic/LLVM.h" 1811394Sswallace#include "clang/Basic/SourceLocation.h" 1911394Sswallace 2011394Sswallacenamespace llvm { 2111394Sswallaceclass GlobalVariable; 2211394Sswallaceclass Instruction; 2311394Sswallaceclass MDNode; 2411394Sswallace} 2511394Sswallace 2611394Sswallacenamespace clang { 2711394Sswallaceclass VarDecl; 2811394Sswallace 2911394Sswallacenamespace CodeGen { 3011394Sswallace 3111394Sswallaceclass CodeGenModule; 3211394Sswallace 3311394Sswallaceclass SanitizerMetadata { 3411394Sswallace SanitizerMetadata(const SanitizerMetadata &) = delete; 3511394Sswallace void operator=(const SanitizerMetadata &) = delete; 3611394Sswallace 3711394Sswallace CodeGenModule &CGM; 3811394Sswallacepublic: 3911394Sswallace SanitizerMetadata(CodeGenModule &CGM); 4011394Sswallace void reportGlobalToASan(llvm::GlobalVariable *GV, const VarDecl &D, 4111394Sswallace bool IsDynInit = false); 4211394Sswallace void reportGlobalToASan(llvm::GlobalVariable *GV, SourceLocation Loc, 43 StringRef Name, QualType Ty, bool IsDynInit = false, 44 bool IsBlacklisted = false); 45 void disableSanitizerForGlobal(llvm::GlobalVariable *GV); 46 void disableSanitizerForInstruction(llvm::Instruction *I); 47private: 48 llvm::MDNode *getLocationMetadata(SourceLocation Loc); 49}; 50} // end namespace CodeGen 51} // end namespace clang 52 53#endif 54