tsan_mman.h 2.0 KB

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