xref: /netbsd-src/sys/external/bsd/compiler_rt/dist/lib/stats/stats.h (revision ef84fd3bd8895f4e6be1e38baf19e6dc3255bc64)
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*ef84fd3bSjoerg inline 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