1*3cab2bb3Spatrick //===-- stats.h -------------------------------------------------*- C++ -*-===// 2*3cab2bb3Spatrick // 3*3cab2bb3Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*3cab2bb3Spatrick // See https://llvm.org/LICENSE.txt for license information. 5*3cab2bb3Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*3cab2bb3Spatrick // 7*3cab2bb3Spatrick //===----------------------------------------------------------------------===// 8*3cab2bb3Spatrick // 9*3cab2bb3Spatrick // Data definitions for sanitizer statistics gathering. 10*3cab2bb3Spatrick // 11*3cab2bb3Spatrick //===----------------------------------------------------------------------===// 12*3cab2bb3Spatrick 13*3cab2bb3Spatrick #ifndef SANITIZER_STATS_STATS_H 14*3cab2bb3Spatrick #define SANITIZER_STATS_STATS_H 15*3cab2bb3Spatrick 16*3cab2bb3Spatrick #include "sanitizer_common/sanitizer_internal_defs.h" 17*3cab2bb3Spatrick 18*3cab2bb3Spatrick namespace __sanitizer { 19*3cab2bb3Spatrick 20*3cab2bb3Spatrick // Number of bits in data that are used for the sanitizer kind. Needs to match 21*3cab2bb3Spatrick // llvm::kSanitizerStatKindBits in 22*3cab2bb3Spatrick // llvm/include/llvm/Transforms/Utils/SanitizerStats.h 23*3cab2bb3Spatrick enum { kKindBits = 3 }; 24*3cab2bb3Spatrick 25*3cab2bb3Spatrick struct StatInfo { 26*3cab2bb3Spatrick uptr addr; 27*3cab2bb3Spatrick uptr data; 28*3cab2bb3Spatrick }; 29*3cab2bb3Spatrick 30*3cab2bb3Spatrick struct StatModule { 31*3cab2bb3Spatrick StatModule *next; 32*3cab2bb3Spatrick u32 size; 33*3cab2bb3Spatrick StatInfo infos[1]; 34*3cab2bb3Spatrick }; 35*3cab2bb3Spatrick CountFromData(uptr data)36*3cab2bb3Spatrickinline uptr CountFromData(uptr data) { 37*3cab2bb3Spatrick return data & ((1ull << (sizeof(uptr) * 8 - kKindBits)) - 1); 38*3cab2bb3Spatrick } 39*3cab2bb3Spatrick 40*3cab2bb3Spatrick } 41*3cab2bb3Spatrick 42*3cab2bb3Spatrick #endif 43