1603c4be006d8c53905d736bf1f19a49f5ce98276Alexey Samsonov//===-- tsan_stat.cc ------------------------------------------------------===//
27ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany//
37ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany//                     The LLVM Compiler Infrastructure
47ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany//
57ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany// This file is distributed under the University of Illinois Open Source
67ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany// License. See LICENSE.TXT for details.
77ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany//
87ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany//===----------------------------------------------------------------------===//
97ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany//
107ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany// This file is a part of ThreadSanitizer (TSan), a race detector.
117ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany//
127ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany//===----------------------------------------------------------------------===//
137ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany#include "tsan_stat.h"
147ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany#include "tsan_rtl.h"
157ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
167ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanynamespace __tsan {
177ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
187ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanyvoid StatAggregate(u64 *dst, u64 *src) {
197ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  if (!kCollectStats)
207ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany    return;
217ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  for (int i = 0; i < StatCnt; i++)
227ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany    dst[i] += src[i];
237ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany}
247ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
257ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryanyvoid StatOutput(u64 *stat) {
267ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  if (!kCollectStats)
277ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany    return;
287ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
297ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  stat[StatShadowNonZero] = stat[StatShadowProcessed] - stat[StatShadowZero];
307ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
317ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  static const char *name[StatCnt] = {};
327ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMop]                          = "Memory accesses                   ";
337ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMopRead]                      = "  Including reads                 ";
347ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMopWrite]                     = "            writes                ";
357ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMop1]                         = "  Including size 1                ";
367ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMop2]                         = "            size 2                ";
377ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMop4]                         = "            size 4                ";
387ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMop8]                         = "            size 8                ";
397ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMopSame]                      = "  Including same                  ";
407ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMopRange]                     = "  Including range                 ";
417ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatShadowProcessed]              = "Shadow processed                  ";
427ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatShadowZero]                   = "  Including empty                 ";
437ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatShadowNonZero]                = "  Including non empty             ";
447ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatShadowSameSize]               = "  Including same size             ";
457ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatShadowIntersect]              = "            intersect             ";
467ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatShadowNotIntersect]           = "            not intersect         ";
477ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatShadowSameThread]             = "  Including same thread           ";
487ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatShadowAnotherThread]          = "            another thread        ";
497ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatShadowReplace]                = "  Including evicted               ";
507ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
517ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatFuncEnter]                    = "Function entries                  ";
527ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatFuncExit]                     = "Function exits                    ";
537ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatEvents]                       = "Events collected                  ";
547ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
557ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatThreadCreate]                 = "Total threads created             ";
567ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatThreadFinish]                 = "  threads finished                ";
577ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatThreadReuse]                  = "  threads reused                  ";
587ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatThreadMaxTid]                 = "  max tid                         ";
597ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatThreadMaxAlive]               = "  max alive threads               ";
607ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
617ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMutexCreate]                  = "Mutexes created                   ";
627ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMutexDestroy]                 = "  destroyed                       ";
637ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMutexLock]                    = "  lock                            ";
647ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMutexUnlock]                  = "  unlock                          ";
657ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMutexRecLock]                 = "  recursive lock                  ";
667ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMutexRecUnlock]               = "  recursive unlock                ";
677ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMutexReadLock]                = "  read lock                       ";
687ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMutexReadUnlock]              = "  read unlock                     ";
697ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
707ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatSyncCreated]                  = "Sync objects created              ";
717ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatSyncDestroyed]                = "             destroyed            ";
727ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatSyncAcquire]                  = "             acquired             ";
737ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatSyncRelease]                  = "             released             ";
747ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
757ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomic]                       = "Atomic operations                 ";
767ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomicLoad]                   = "  Including load                  ";
777ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomicStore]                  = "            store                 ";
787ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomicExchange]               = "            exchange              ";
797ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomicFetchAdd]               = "            fetch_add             ";
807ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomicCAS]                    = "            compare_exchange      ";
817ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomicFence]                  = "            fence                 ";
827ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomicRelaxed]                = "  Including relaxed               ";
837ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomicConsume]                = "            consume               ";
847ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomicAcquire]                = "            acquire               ";
857ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomicRelease]                = "            release               ";
867ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomicAcq_Rel]                = "            acq_rel               ";
877ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomicSeq_Cst]                = "            seq_cst               ";
887ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomic1]                      = "  Including size 1                ";
897ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomic2]                      = "            size 2                ";
907ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomic4]                      = "            size 4                ";
917ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAtomic8]                      = "            size 8                ";
927ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
937ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInterceptor]                  = "Interceptors                      ";
94f037f565b2e02878ceb6e7b49647e814e2990ef5Dmitry Vyukov  name[StatInt_longjmp]                  = "  longjmp                         ";
95f037f565b2e02878ceb6e7b49647e814e2990ef5Dmitry Vyukov  name[StatInt_siglongjmp]               = "  siglongjmp                      ";
967ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_malloc]                   = "  malloc                          ";
977ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_calloc]                   = "  calloc                          ";
987ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_realloc]                  = "  realloc                         ";
997ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_free]                     = "  free                            ";
1007ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_cfree]                    = "  cfree                           ";
1017ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_mmap]                     = "  mmap                            ";
1027ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_mmap64]                   = "  mmap64                          ";
1037ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_munmap]                   = "  munmap                          ";
1047ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_memalign]                 = "  memalign                        ";
1057ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_valloc]                   = "  valloc                          ";
1067ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pvalloc]                  = "  pvalloc                         ";
1077ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_posix_memalign]           = "  posix_memalign                  ";
1087ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt__Znwm]                    = "  _Znwm                           ";
1097ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt__ZnwmRKSt9nothrow_t]      = "  _ZnwmRKSt9nothrow_t             ";
1107ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt__Znam]                    = "  _Znam                           ";
1117ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt__ZnamRKSt9nothrow_t]      = "  _ZnamRKSt9nothrow_t             ";
1127ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt__ZdlPv]                   = "  _ZdlPv                          ";
1137ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt__ZdlPvRKSt9nothrow_t]     = "  _ZdlPvRKSt9nothrow_t            ";
1147ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt__ZdaPv]                   = "  _ZdaPv                          ";
1157ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt__ZdaPvRKSt9nothrow_t]     = "  _ZdaPvRKSt9nothrow_t            ";
1167ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_strlen]                   = "  strlen                          ";
1177ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_memset]                   = "  memset                          ";
1187ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_memcpy]                   = "  memcpy                          ";
1197ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_strcmp]                   = "  strcmp                          ";
1207ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_memchr]                   = "  memchr                          ";
1217ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_memrchr]                  = "  memrchr                         ";
1227ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_memmove]                  = "  memmove                         ";
1237ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_memcmp]                   = "  memcmp                          ";
1247ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_strchr]                   = "  strchr                          ";
1257ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_strchrnul]                = "  strchrnul                       ";
1267ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_strrchr]                  = "  strrchr                         ";
1277ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_strncmp]                  = "  strncmp                         ";
1287ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_strcpy]                   = "  strcpy                          ";
1297ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_strncpy]                  = "  strncpy                         ";
1307ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_strstr]                   = "  strstr                          ";
1317ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_atexit]                   = "  atexit                          ";
1327ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt___cxa_guard_acquire]      = "  __cxa_guard_acquire             ";
1337ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt___cxa_guard_release]      = "  __cxa_guard_release             ";
1347ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_create]           = "  pthread_create                  ";
1357ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_join]             = "  pthread_join                    ";
1367ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_detach]           = "  pthread_detach                  ";
1377ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_mutex_init]       = "  pthread_mutex_init              ";
1387ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_mutex_destroy]    = "  pthread_mutex_destroy           ";
1397ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_mutex_lock]       = "  pthread_mutex_lock              ";
1407ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_mutex_trylock]    = "  pthread_mutex_trylock           ";
1417ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_mutex_timedlock]  = "  pthread_mutex_timedlock         ";
1427ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_mutex_unlock]     = "  pthread_mutex_unlock            ";
1437ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_spin_init]        = "  pthread_spin_init               ";
1447ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_spin_destroy]     = "  pthread_spin_destroy            ";
1457ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_spin_lock]        = "  pthread_spin_lock               ";
1467ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_spin_trylock]     = "  pthread_spin_trylock            ";
1477ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_spin_unlock]      = "  pthread_spin_unlock             ";
1487ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_rwlock_init]      = "  pthread_rwlock_init             ";
1497ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_rwlock_destroy]   = "  pthread_rwlock_destroy          ";
1507ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_rwlock_rdlock]    = "  pthread_rwlock_rdlock           ";
1517ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_rwlock_tryrdlock] = "  pthread_rwlock_tryrdlock        ";
1527ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_rwlock_timedrdlock]
1537ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany                                         = "  pthread_rwlock_timedrdlock      ";
1547ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_rwlock_wrlock]    = "  pthread_rwlock_wrlock           ";
1557ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_rwlock_trywrlock] = "  pthread_rwlock_trywrlock        ";
1567ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_rwlock_timedwrlock]
1577ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany                                         = "  pthread_rwlock_timedwrlock      ";
1587ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_rwlock_unlock]    = "  pthread_rwlock_unlock           ";
1597ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_cond_init]        = "  pthread_cond_init               ";
1607ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_cond_destroy]     = "  pthread_cond_destroy            ";
1617ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_cond_signal]      = "  pthread_cond_signal             ";
1627ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_cond_broadcast]   = "  pthread_cond_broadcast          ";
1637ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_cond_wait]        = "  pthread_cond_wait               ";
1647ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_cond_timedwait]   = "  pthread_cond_timedwait          ";
1657ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_barrier_init]     = "  pthread_barrier_init            ";
1667ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_barrier_destroy]  = "  pthread_barrier_destroy         ";
1677ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_barrier_wait]     = "  pthread_barrier_wait            ";
1687ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pthread_once]             = "  pthread_once                    ";
1697ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_sem_init]                 = "  sem_init                        ";
1707ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_sem_destroy]              = "  sem_destroy                     ";
1717ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_sem_wait]                 = "  sem_wait                        ";
1727ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_sem_trywait]              = "  sem_trywait                     ";
1737ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_sem_timedwait]            = "  sem_timedwait                   ";
1747ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_sem_post]                 = "  sem_post                        ";
1757ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_sem_getvalue]             = "  sem_getvalue                    ";
1767ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_read]                     = "  read                            ";
1777ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pread]                    = "  pread                           ";
1787ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pread64]                  = "  pread64                         ";
1797ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_readv]                    = "  readv                           ";
1807ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_preadv64]                 = "  preadv64                        ";
1817ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_write]                    = "  write                           ";
1827ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pwrite]                   = "  pwrite                          ";
1837ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pwrite64]                 = "  pwrite64                        ";
1847ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_writev]                   = "  writev                          ";
1857ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_pwritev64]                = "  pwritev64                       ";
1867ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_send]                     = "  send                            ";
1877ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_sendmsg]                  = "  sendmsg                         ";
1887ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_recv]                     = "  recv                            ";
1897ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_recvmsg]                  = "  recvmsg                         ";
1907ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_unlink]                   = "  unlink                          ";
1917ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_fopen]                    = "  fopen                           ";
1927ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_fread]                    = "  fread                           ";
1937ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_fwrite]                   = "  fwrite                          ";
1947ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_puts]                     = "  puts                            ";
1957ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_rmdir]                    = "  rmdir                           ";
1967ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_opendir]                  = "  opendir                         ";
1977ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_epoll_ctl]                = "  epoll_ctl                       ";
1987ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_epoll_wait]               = "  epoll_wait                      ";
1997ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatInt_sigaction]                = "  sigaction                       ";
2007ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
2017ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotation]                   = "Dynamic annotations               ";
2027ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateHappensBefore]        = "  HappensBefore                   ";
2037ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateHappensAfter]         = "  HappensAfter                    ";
2047ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateCondVarSignal]        = "  CondVarSignal                   ";
2057ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateCondVarSignalAll]     = "  CondVarSignalAll                ";
2067ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateMutexIsNotPHB]        = "  MutexIsNotPHB                   ";
2077ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateCondVarWait]          = "  CondVarWait                     ";
2087ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateRWLockCreate]         = "  RWLockCreate                    ";
2097ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateRWLockDestroy]        = "  RWLockDestroy                   ";
2107ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateRWLockAcquired]       = "  RWLockAcquired                  ";
2117ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateRWLockReleased]       = "  RWLockReleased                  ";
2127ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateTraceMemory]          = "  TraceMemory                     ";
2137ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateFlushState]           = "  FlushState                      ";
2147ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateNewMemory]            = "  NewMemory                       ";
2157ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateNoOp]                 = "  NoOp                            ";
2167ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateFlushExpectedRaces]   = "  FlushExpectedRaces              ";
2177ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateEnableRaceDetection]  = "  EnableRaceDetection             ";
2187ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateMutexIsUsedAsCondVar] = "  MutexIsUsedAsCondVar            ";
2197ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotatePCQGet]               = "  PCQGet                          ";
2207ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotatePCQPut]               = "  PCQPut                          ";
2217ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotatePCQDestroy]           = "  PCQDestroy                      ";
2227ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotatePCQCreate]            = "  PCQCreate                       ";
2237ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateExpectRace]           = "  ExpectRace                      ";
2247ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateBenignRaceSized]      = "  BenignRaceSized                 ";
2257ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateBenignRace]           = "  BenignRace                      ";
2267ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateIgnoreReadsBegin]     = "  IgnoreReadsBegin                ";
2277ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateIgnoreReadsEnd]       = "  IgnoreReadsEnd                  ";
2287ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateIgnoreWritesBegin]    = "  IgnoreWritesBegin               ";
2297ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateIgnoreWritesEnd]      = "  IgnoreWritesEnd                 ";
2307ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotatePublishMemoryRange]   = "  PublishMemoryRange              ";
2317ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateUnpublishMemoryRange] = "  UnpublishMemoryRange            ";
2327ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatAnnotateThreadName]           = "  ThreadName                      ";
2337ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
2347ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMtxTotal]                     = "Contentionz                       ";
2357ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMtxTrace]                     = "  Trace                           ";
2367ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMtxThreads]                   = "  Threads                         ";
2377ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMtxReport]                    = "  Report                          ";
2387ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMtxSyncVar]                   = "  SyncVar                         ";
2397ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMtxSyncTab]                   = "  SyncTab                         ";
2407ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMtxSlab]                      = "  Slab                            ";
2417ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMtxAtExit]                    = "  Atexit                          ";
2427ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  name[StatMtxAnnotations]               = "  Annotations                     ";
2437ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
24467a64dd8259fdbd867633b27f54d584f435f1ce6Alexey Samsonov  TsanPrintf("Statistics:\n");
2457ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany  for (int i = 0; i < StatCnt; i++)
246e954101f6602ac181a2c3accfbbad0ae51b0bf7cAlexey Samsonov    TsanPrintf("%s: %zu\n", name[i], (uptr)stat[i]);
2477ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany}
2487ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany
2497ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany}  // namespace __tsan
250