1229109Sed//===-- asan_stats.h --------------------------------------------*- C++ -*-===// 2229109Sed// 3229109Sed// The LLVM Compiler Infrastructure 4229109Sed// 5229109Sed// This file is distributed under the University of Illinois Open Source 6229109Sed// License. See LICENSE.TXT for details. 7229109Sed// 8229109Sed//===----------------------------------------------------------------------===// 9229109Sed// 10229109Sed// This file is a part of AddressSanitizer, an address sanity checker. 11229109Sed// 12229109Sed// ASan-private header for statistics. 13229109Sed//===----------------------------------------------------------------------===// 14229109Sed#ifndef ASAN_STATS_H 15229109Sed#define ASAN_STATS_H 16229109Sed 17229109Sed#include "asan_allocator.h" 18229109Sed#include "asan_internal.h" 19229109Sed 20229109Sednamespace __asan { 21229109Sed 22229109Sed// AsanStats struct is NOT thread-safe. 23229109Sed// Each AsanThread has its own AsanStats, which are sometimes flushed 24229109Sed// to the accumulated AsanStats. 25229109Sedstruct AsanStats { 26238901Sandrew // AsanStats must be a struct consisting of uptr fields only. 27238901Sandrew // When merging two AsanStats structs, we treat them as arrays of uptr. 28238901Sandrew uptr mallocs; 29238901Sandrew uptr malloced; 30238901Sandrew uptr malloced_redzones; 31238901Sandrew uptr frees; 32238901Sandrew uptr freed; 33238901Sandrew uptr real_frees; 34238901Sandrew uptr really_freed; 35238901Sandrew uptr reallocs; 36238901Sandrew uptr realloced; 37238901Sandrew uptr mmaps; 38238901Sandrew uptr mmaped; 39245614Sandrew uptr munmaps; 40245614Sandrew uptr munmaped; 41288943Sdim uptr malloc_large; 42238901Sandrew uptr malloced_by_size[kNumberOfSizeClasses]; 43229109Sed 44276789Sdim // Ctor for global AsanStats (accumulated stats for dead threads). 45229109Sed explicit AsanStats(LinkerInitialized) { } 46276789Sdim // Creates empty stats. 47229109Sed AsanStats(); 48229109Sed 49274201Sdim void Print(); // Prints formatted stats to stderr. 50274201Sdim void Clear(); 51274201Sdim void MergeFrom(const AsanStats *stats); 52229109Sed}; 53229109Sed 54251034Sed// Returns stats for GetCurrentThread(), or stats for fake "unknown thread" 55251034Sed// if GetCurrentThread() returns 0. 56251034SedAsanStats &GetCurrentThreadStats(); 57274201Sdim// Flushes a given stats into accumulated stats of dead threads. 58274201Sdimvoid FlushToDeadThreadStats(AsanStats *stats); 59251034Sed 60245614Sandrew// A cross-platform equivalent of malloc_statistics_t on Mac OS. 61245614Sandrewstruct AsanMallocStats { 62245614Sandrew uptr blocks_in_use; 63245614Sandrew uptr size_in_use; 64245614Sandrew uptr max_size_in_use; 65245614Sandrew uptr size_allocated; 66245614Sandrew}; 67245614Sandrew 68251034Sedvoid FillMallocStatistics(AsanMallocStats *malloc_stats); 69251034Sed 70229109Sed} // namespace __asan 71229109Sed 72229109Sed#endif // ASAN_STATS_H 73