Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- SanitizerStats.h - Sanitizer statistics gathering  -------*- C++ -*-===//
2
//
3
// 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
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// Declares functions and data structures for sanitizer statistics gathering.
10
//
11
//===----------------------------------------------------------------------===//
12
 
13
#ifndef LLVM_TRANSFORMS_UTILS_SANITIZERSTATS_H
14
#define LLVM_TRANSFORMS_UTILS_SANITIZERSTATS_H
15
 
16
#include "llvm/IR/IRBuilder.h"
17
 
18
namespace llvm {
19
 
20
// Number of bits in data that are used for the sanitizer kind. Needs to match
21
// __sanitizer::kKindBits in compiler-rt/lib/stats/stats.h
22
enum { kSanitizerStatKindBits = 3 };
23
 
24
enum SanitizerStatKind {
25
  SanStat_CFI_VCall,
26
  SanStat_CFI_NVCall,
27
  SanStat_CFI_DerivedCast,
28
  SanStat_CFI_UnrelatedCast,
29
  SanStat_CFI_ICall,
30
};
31
 
32
struct SanitizerStatReport {
33
  SanitizerStatReport(Module *M);
34
 
35
  /// Generates code into B that increments a location-specific counter tagged
36
  /// with the given sanitizer kind SK.
37
  void create(IRBuilder<> &B, SanitizerStatKind SK);
38
 
39
  /// Finalize module stats array and add global constructor to register it.
40
  void finish();
41
 
42
private:
43
  Module *M;
44
  GlobalVariable *ModuleStatsGV;
45
  ArrayType *StatTy;
46
  StructType *EmptyModuleStatsTy;
47
 
48
  std::vector<Constant *> Inits;
49
  ArrayType *makeModuleStatsArrayTy();
50
  StructType *makeModuleStatsTy();
51
};
52
 
53
}
54
 
55
#endif