tsan_mman.h revision 360784
1//===-- tsan_mman.h ---------------------------------------------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file is a part of ThreadSanitizer (TSan), a race detector. 10// 11//===----------------------------------------------------------------------===// 12#ifndef TSAN_MMAN_H 13#define TSAN_MMAN_H 14 15#include "tsan_defs.h" 16 17namespace __tsan { 18 19const uptr kDefaultAlignment = 16; 20 21void InitializeAllocator(); 22void InitializeAllocatorLate(); 23void ReplaceSystemMalloc(); 24void AllocatorProcStart(Processor *proc); 25void AllocatorProcFinish(Processor *proc); 26void AllocatorPrintStats(); 27 28// For user allocations. 29void *user_alloc_internal(ThreadState *thr, uptr pc, uptr sz, 30 uptr align = kDefaultAlignment, bool signal = true); 31// Does not accept NULL. 32void user_free(ThreadState *thr, uptr pc, void *p, bool signal = true); 33// Interceptor implementations. 34void *user_alloc(ThreadState *thr, uptr pc, uptr sz); 35void *user_calloc(ThreadState *thr, uptr pc, uptr sz, uptr n); 36void *user_realloc(ThreadState *thr, uptr pc, void *p, uptr sz); 37void *user_reallocarray(ThreadState *thr, uptr pc, void *p, uptr sz, uptr n); 38void *user_memalign(ThreadState *thr, uptr pc, uptr align, uptr sz); 39int user_posix_memalign(ThreadState *thr, uptr pc, void **memptr, uptr align, 40 uptr sz); 41void *user_aligned_alloc(ThreadState *thr, uptr pc, uptr align, uptr sz); 42void *user_valloc(ThreadState *thr, uptr pc, uptr sz); 43void *user_pvalloc(ThreadState *thr, uptr pc, uptr sz); 44uptr user_alloc_usable_size(const void *p); 45 46// Invoking malloc/free hooks that may be installed by the user. 47void invoke_malloc_hook(void *ptr, uptr size); 48void invoke_free_hook(void *ptr); 49 50enum MBlockType { 51 MBlockScopedBuf, 52 MBlockString, 53 MBlockStackTrace, 54 MBlockShadowStack, 55 MBlockSync, 56 MBlockClock, 57 MBlockThreadContex, 58 MBlockDeadInfo, 59 MBlockRacyStacks, 60 MBlockRacyAddresses, 61 MBlockAtExit, 62 MBlockFlag, 63 MBlockReport, 64 MBlockReportMop, 65 MBlockReportThread, 66 MBlockReportMutex, 67 MBlockReportLoc, 68 MBlockReportStack, 69 MBlockSuppression, 70 MBlockExpectRace, 71 MBlockSignal, 72 MBlockJmpBuf, 73 74 // This must be the last. 75 MBlockTypeCount 76}; 77 78// For internal data structures. 79void *internal_alloc(MBlockType typ, uptr sz); 80void internal_free(void *p); 81 82template <typename T> 83void DestroyAndFree(T *p) { 84 p->~T(); 85 internal_free(p); 86} 87 88} // namespace __tsan 89#endif // TSAN_MMAN_H 90