Home | History | Annotate | Line # | Download | only in asan
      1  1.1  kamil //===-- asan_stats.h --------------------------------------------*- C++ -*-===//
      2  1.1  kamil //
      3  1.1  kamil //                     The LLVM Compiler Infrastructure
      4  1.1  kamil //
      5  1.1  kamil // This file is distributed under the University of Illinois Open Source
      6  1.1  kamil // License. See LICENSE.TXT for details.
      7  1.1  kamil //
      8  1.1  kamil //===----------------------------------------------------------------------===//
      9  1.1  kamil //
     10  1.1  kamil // This file is a part of AddressSanitizer, an address sanity checker.
     11  1.1  kamil //
     12  1.1  kamil // ASan-private header for statistics.
     13  1.1  kamil //===----------------------------------------------------------------------===//
     14  1.1  kamil #ifndef ASAN_STATS_H
     15  1.1  kamil #define ASAN_STATS_H
     16  1.1  kamil 
     17  1.1  kamil #include "asan_allocator.h"
     18  1.1  kamil #include "asan_internal.h"
     19  1.1  kamil 
     20  1.1  kamil namespace __asan {
     21  1.1  kamil 
     22  1.1  kamil // AsanStats struct is NOT thread-safe.
     23  1.1  kamil // Each AsanThread has its own AsanStats, which are sometimes flushed
     24  1.1  kamil // to the accumulated AsanStats.
     25  1.1  kamil struct AsanStats {
     26  1.1  kamil   // AsanStats must be a struct consisting of uptr fields only.
     27  1.1  kamil   // When merging two AsanStats structs, we treat them as arrays of uptr.
     28  1.1  kamil   uptr mallocs;
     29  1.1  kamil   uptr malloced;
     30  1.1  kamil   uptr malloced_redzones;
     31  1.1  kamil   uptr frees;
     32  1.1  kamil   uptr freed;
     33  1.1  kamil   uptr real_frees;
     34  1.1  kamil   uptr really_freed;
     35  1.1  kamil   uptr reallocs;
     36  1.1  kamil   uptr realloced;
     37  1.1  kamil   uptr mmaps;
     38  1.1  kamil   uptr mmaped;
     39  1.1  kamil   uptr munmaps;
     40  1.1  kamil   uptr munmaped;
     41  1.1  kamil   uptr malloc_large;
     42  1.1  kamil   uptr malloced_by_size[kNumberOfSizeClasses];
     43  1.1  kamil 
     44  1.1  kamil   // Ctor for global AsanStats (accumulated stats for dead threads).
     45  1.1  kamil   explicit AsanStats(LinkerInitialized) { }
     46  1.1  kamil   // Creates empty stats.
     47  1.1  kamil   AsanStats();
     48  1.1  kamil 
     49  1.1  kamil   void Print();  // Prints formatted stats to stderr.
     50  1.1  kamil   void Clear();
     51  1.1  kamil   void MergeFrom(const AsanStats *stats);
     52  1.1  kamil };
     53  1.1  kamil 
     54  1.1  kamil // Returns stats for GetCurrentThread(), or stats for fake "unknown thread"
     55  1.1  kamil // if GetCurrentThread() returns 0.
     56  1.1  kamil AsanStats &GetCurrentThreadStats();
     57  1.1  kamil // Flushes a given stats into accumulated stats of dead threads.
     58  1.1  kamil void FlushToDeadThreadStats(AsanStats *stats);
     59  1.1  kamil 
     60  1.1  kamil // A cross-platform equivalent of malloc_statistics_t on Mac OS.
     61  1.1  kamil struct AsanMallocStats {
     62  1.1  kamil   uptr blocks_in_use;
     63  1.1  kamil   uptr size_in_use;
     64  1.1  kamil   uptr max_size_in_use;
     65  1.1  kamil   uptr size_allocated;
     66  1.1  kamil };
     67  1.1  kamil 
     68  1.1  kamil void FillMallocStatistics(AsanMallocStats *malloc_stats);
     69  1.1  kamil 
     70  1.1  kamil }  // namespace __asan
     71  1.1  kamil 
     72  1.1  kamil #endif  // ASAN_STATS_H
     73