asan_stats.h revision e3091193af47f4932b42ba1773416dfeb3aa2e87
11e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany//===-- asan_stats.h --------------------------------------------*- C++ -*-===// 21e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 31e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// The LLVM Compiler Infrastructure 41e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 51e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// This file is distributed under the University of Illinois Open Source 61e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// License. See LICENSE.TXT for details. 71e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 81e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany//===----------------------------------------------------------------------===// 91e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 101e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// This file is a part of AddressSanitizer, an address sanity checker. 111e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 121e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// ASan-private header for statistics. 131e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany//===----------------------------------------------------------------------===// 141e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#ifndef ASAN_STATS_H 151e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#define ASAN_STATS_H 161e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany 171e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#include "asan_allocator.h" 181e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#include "asan_internal.h" 191e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany 201e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryanynamespace __asan { 211e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany 221e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// AsanStats struct is NOT thread-safe. 231e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// Each AsanThread has its own AsanStats, which are sometimes flushed 241e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// to the accumulated AsanStats. 251e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryanystruct AsanStats { 263f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany // AsanStats must be a struct consisting of uptr fields only. 273f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany // When merging two AsanStats structs, we treat them as arrays of uptr. 283f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr mallocs; 293f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr malloced; 303f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr malloced_redzones; 313f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr frees; 323f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr freed; 333f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr real_frees; 343f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr really_freed; 353f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr really_freed_redzones; 363f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr reallocs; 373f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr realloced; 383f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr mmaps; 393f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr mmaped; 40e3091193af47f4932b42ba1773416dfeb3aa2e87Kostya Serebryany uptr munmaps; 41e3091193af47f4932b42ba1773416dfeb3aa2e87Kostya Serebryany uptr munmaped; 423f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr mmaped_by_size[kNumberOfSizeClasses]; 433f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr malloced_by_size[kNumberOfSizeClasses]; 443f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr freed_by_size[kNumberOfSizeClasses]; 453f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr really_freed_by_size[kNumberOfSizeClasses]; 463f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany 473f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr malloc_large; 483f4c3875c42078e22c7e5356c5746fd18756d958Kostya Serebryany uptr malloc_small_slow; 491e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany 501e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany // Ctor for global AsanStats (accumulated stats and main thread stats). 511e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany explicit AsanStats(LinkerInitialized) { } 521e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany // Default ctor for thread-local stats. 531e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany AsanStats(); 541e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany 551e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany // Prints formatted stats to stderr. 561e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany void Print(); 571e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany}; 581e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany 59ca2cdd989076d091d8c4d4c277f8b47d9b5903adAlexander Potapenko// A cross-platform equivalent of malloc_statistics_t on Mac OS. 60ca2cdd989076d091d8c4d4c277f8b47d9b5903adAlexander Potapenkostruct AsanMallocStats { 61ca2cdd989076d091d8c4d4c277f8b47d9b5903adAlexander Potapenko uptr blocks_in_use; 62ca2cdd989076d091d8c4d4c277f8b47d9b5903adAlexander Potapenko uptr size_in_use; 63ca2cdd989076d091d8c4d4c277f8b47d9b5903adAlexander Potapenko uptr max_size_in_use; 64ca2cdd989076d091d8c4d4c277f8b47d9b5903adAlexander Potapenko uptr size_allocated; 65ca2cdd989076d091d8c4d4c277f8b47d9b5903adAlexander Potapenko}; 66ca2cdd989076d091d8c4d4c277f8b47d9b5903adAlexander Potapenko 671e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany} // namespace __asan 681e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany 691e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#endif // ASAN_STATS_H 70