Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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
  56.