1 //===-- tsan_mman.h ---------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file is a part of ThreadSanitizer (TSan), a race detector. 11 // 12 //===----------------------------------------------------------------------===// 13 #ifndef TSAN_MMAN_H 14 #define TSAN_MMAN_H 15 16 #include "tsan_defs.h" 17 18 namespace __tsan { 19 20 const uptr kDefaultAlignment = 16; 21 22 void InitializeAllocator(); 23 void ReplaceSystemMalloc(); 24 void AllocatorThreadStart(ThreadState *thr); 25 void AllocatorThreadFinish(ThreadState *thr); 26 void AllocatorPrintStats(); 27 28 // For user allocations. 29 void *user_alloc(ThreadState *thr, uptr pc, uptr sz, 30 uptr align = kDefaultAlignment, bool signal = true); 31 void *user_calloc(ThreadState *thr, uptr pc, uptr sz, uptr n); 32 // Does not accept NULL. 33 void user_free(ThreadState *thr, uptr pc, void *p, bool signal = true); 34 void *user_realloc(ThreadState *thr, uptr pc, void *p, uptr sz); 35 void *user_alloc_aligned(ThreadState *thr, uptr pc, uptr sz, uptr align); 36 uptr user_alloc_usable_size(const void *p); 37 38 // Invoking malloc/free hooks that may be installed by the user. 39 void invoke_malloc_hook(void *ptr, uptr size); 40 void invoke_free_hook(void *ptr); 41 42 enum MBlockType { 43 MBlockScopedBuf, 44 MBlockString, 45 MBlockStackTrace, 46 MBlockShadowStack, 47 MBlockSync, 48 MBlockClock, 49 MBlockThreadContex, 50 MBlockDeadInfo, 51 MBlockRacyStacks, 52 MBlockRacyAddresses, 53 MBlockAtExit, 54 MBlockFlag, 55 MBlockReport, 56 MBlockReportMop, 57 MBlockReportThread, 58 MBlockReportMutex, 59 MBlockReportLoc, 60 MBlockReportStack, 61 MBlockSuppression, 62 MBlockExpectRace, 63 MBlockSignal, 64 MBlockJmpBuf, 65 66 // This must be the last. 67 MBlockTypeCount 68 }; 69 70 // For internal data structures. 71 void *internal_alloc(MBlockType typ, uptr sz); 72 void internal_free(void *p); 73 74 template<typename T> 75 void DestroyAndFree(T *&p) { 76 p->~T(); 77 internal_free(p); 78 p = 0; 79 } 80 81 } // namespace __tsan 82 #endif // TSAN_MMAN_H 83