xref: /aosp_15_r20/external/clang/lib/CodeGen/SanitizerMetadata.h (revision 67e74705e28f6214e480b399dd47ea732279e315)
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