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 AlloctorThreadFinish(ThreadState *thr); 24 25 // For user allocations. 26 void *user_alloc(ThreadState *thr, uptr pc, uptr sz, 27 uptr align = kDefaultAlignment); 28 // Does not accept NULL. 29 void user_free(ThreadState *thr, uptr pc, void *p); 30 void *user_realloc(ThreadState *thr, uptr pc, void *p, uptr sz); 31 void *user_alloc_aligned(ThreadState *thr, uptr pc, uptr sz, uptr align); 32 // Given the pointer p into a valid allocated block, 33 // returns the descriptor of the block. 34 MBlock *user_mblock(ThreadState *thr, void *p); 35 36 enum MBlockType { 37 MBlockScopedBuf, 38 MBlockString, 39 MBlockStackTrace, 40 MBlockShadowStack, 41 MBlockSync, 42 MBlockClock, 43 MBlockThreadContex, 44 MBlockDeadInfo, 45 MBlockRacyStacks, 46 MBlockRacyAddresses, 47 MBlockAtExit, 48 MBlockFlag, 49 MBlockReport, 50 MBlockReportMop, 51 MBlockReportThread, 52 MBlockReportMutex, 53 MBlockReportLoc, 54 MBlockReportStack, 55 MBlockSuppression, 56 MBlockExpectRace, 57 MBlockSignal, 58 59 // This must be the last. 60 MBlockTypeCount, 61 }; 62 63 // For internal data structures. 64 void *internal_alloc(MBlockType typ, uptr sz); 65 void internal_free(void *p); 66 67 template<typename T> 68 void DestroyAndFree(T *&p) { 69 p->~T(); 70 internal_free(p); 71 p = 0; 72 } 73 74 } // namespace __tsan 75 #endif // TSAN_MMAN_H 76