1*ef84fd3bSjoerg //===-- stats.h -------------------------------------------------*- C++ -*-===// 2*ef84fd3bSjoerg // 3*ef84fd3bSjoerg // The LLVM Compiler Infrastructure 4*ef84fd3bSjoerg // 5*ef84fd3bSjoerg // This file is distributed under the University of Illinois Open Source 6*ef84fd3bSjoerg // License. See LICENSE.TXT for details. 7*ef84fd3bSjoerg // 8*ef84fd3bSjoerg //===----------------------------------------------------------------------===// 9*ef84fd3bSjoerg // 10*ef84fd3bSjoerg // Data definitions for sanitizer statistics gathering. 11*ef84fd3bSjoerg // 12*ef84fd3bSjoerg //===----------------------------------------------------------------------===// 13*ef84fd3bSjoerg 14*ef84fd3bSjoerg #ifndef SANITIZER_STATS_STATS_H 15*ef84fd3bSjoerg #define SANITIZER_STATS_STATS_H 16*ef84fd3bSjoerg 17*ef84fd3bSjoerg #include "sanitizer_common/sanitizer_internal_defs.h" 18*ef84fd3bSjoerg 19*ef84fd3bSjoerg namespace __sanitizer { 20*ef84fd3bSjoerg 21*ef84fd3bSjoerg // Number of bits in data that are used for the sanitizer kind. Needs to match 22*ef84fd3bSjoerg // llvm::kSanitizerStatKindBits in 23*ef84fd3bSjoerg // llvm/include/llvm/Transforms/Utils/SanitizerStats.h 24*ef84fd3bSjoerg enum { kKindBits = 3 }; 25*ef84fd3bSjoerg 26*ef84fd3bSjoerg struct StatInfo { 27*ef84fd3bSjoerg uptr addr; 28*ef84fd3bSjoerg uptr data; 29*ef84fd3bSjoerg }; 30*ef84fd3bSjoerg 31*ef84fd3bSjoerg struct StatModule { 32*ef84fd3bSjoerg StatModule *next; 33*ef84fd3bSjoerg u32 size; 34*ef84fd3bSjoerg StatInfo infos[1]; 35*ef84fd3bSjoerg }; 36*ef84fd3bSjoerg CountFromData(uptr data)37*ef84fd3bSjoerginline uptr CountFromData(uptr data) { 38*ef84fd3bSjoerg return data & ((1ull << (sizeof(uptr) * 8 - kKindBits)) - 1); 39*ef84fd3bSjoerg } 40*ef84fd3bSjoerg 41*ef84fd3bSjoerg } 42*ef84fd3bSjoerg 43*ef84fd3bSjoerg #endif 44