blob: 7ffac4360d9cdb069414845142e19d93425e9f1b [file] [log] [blame]
Alexey Samsonov4b8de112014-08-01 21:35:28 +00001//===--- SanitizerMetadata.h - Metadata for sanitizers ----------*- C++ -*-===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Alexey Samsonov4b8de112014-08-01 21:35:28 +00006//
7//===----------------------------------------------------------------------===//
8//
9// Class which emits metadata consumed by sanitizer instrumentation passes.
10//
11//===----------------------------------------------------------------------===//
Benjamin Kramer2f5db8b2014-08-13 16:25:19 +000012#ifndef LLVM_CLANG_LIB_CODEGEN_SANITIZERMETADATA_H
13#define LLVM_CLANG_LIB_CODEGEN_SANITIZERMETADATA_H
Alexey Samsonov4b8de112014-08-01 21:35:28 +000014
Chandler Carruth0d9593d2015-01-14 11:29:14 +000015#include "clang/AST/Type.h"
Alexey Samsonov4b8de112014-08-01 21:35:28 +000016#include "clang/Basic/LLVM.h"
17#include "clang/Basic/SourceLocation.h"
18
19namespace llvm {
20class GlobalVariable;
Kostya Serebryany4ee69042014-08-26 02:29:59 +000021class Instruction;
Alexey Samsonovd9ad5ce2014-08-02 00:35:50 +000022class MDNode;
Alexey Samsonov4b8de112014-08-01 21:35:28 +000023}
24
25namespace clang {
26class VarDecl;
27
28namespace CodeGen {
29
30class CodeGenModule;
31
32class SanitizerMetadata {
Aaron Ballmanabc18922015-02-15 22:54:08 +000033 SanitizerMetadata(const SanitizerMetadata &) = delete;
34 void operator=(const SanitizerMetadata &) = delete;
Alexey Samsonov4b8de112014-08-01 21:35:28 +000035
36 CodeGenModule &CGM;
37public:
38 SanitizerMetadata(CodeGenModule &CGM);
39 void reportGlobalToASan(llvm::GlobalVariable *GV, const VarDecl &D,
40 bool IsDynInit = false);
41 void reportGlobalToASan(llvm::GlobalVariable *GV, SourceLocation Loc,
Alexey Samsonova0ac3c22014-10-17 22:37:33 +000042 StringRef Name, QualType Ty, bool IsDynInit = false,
Alexey Samsonov4b8de112014-08-01 21:35:28 +000043 bool IsBlacklisted = false);
44 void disableSanitizerForGlobal(llvm::GlobalVariable *GV);
Kostya Serebryany4ee69042014-08-26 02:29:59 +000045 void disableSanitizerForInstruction(llvm::Instruction *I);
Alexey Samsonovd9ad5ce2014-08-02 00:35:50 +000046private:
47 llvm::MDNode *getLocationMetadata(SourceLocation Loc);
Alexey Samsonov4b8de112014-08-01 21:35:28 +000048};
49} // end namespace CodeGen
50} // end namespace clang
51
52#endif