| //===-- dd_rtl.h ----------------------------------------------------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef DD_RTL_H |
| #define DD_RTL_H |
| |
| #include "sanitizer_common/sanitizer_internal_defs.h" |
| #include "sanitizer_common/sanitizer_deadlock_detector_interface.h" |
| #include "sanitizer_common/sanitizer_flags.h" |
| #include "sanitizer_common/sanitizer_allocator_internal.h" |
| #include "sanitizer_common/sanitizer_addrhashmap.h" |
| #include "sanitizer_common/sanitizer_mutex.h" |
| |
| namespace __dsan { |
| |
| typedef DDFlags Flags; |
| |
| struct Mutex { |
| DDMutex dd; |
| }; |
| |
| struct Thread { |
| DDPhysicalThread *dd_pt; |
| DDLogicalThread *dd_lt; |
| |
| bool ignore_interceptors; |
| }; |
| |
| struct Callback : DDCallback { |
| Thread *thr; |
| |
| Callback(Thread *thr); |
| u32 Unwind() override; |
| }; |
| |
| typedef AddrHashMap<Mutex, 31051> MutexHashMap; |
| |
| struct Context { |
| DDetector *dd; |
| |
| BlockingMutex report_mutex; |
| MutexHashMap mutex_map; |
| }; |
| |
| inline Flags* flags() { |
| static Flags flags; |
| return &flags; |
| } |
| |
| void Initialize(); |
| void InitializeInterceptors(); |
| |
| void ThreadInit(Thread *thr); |
| void ThreadDestroy(Thread *thr); |
| |
| void MutexBeforeLock(Thread *thr, uptr m, bool writelock); |
| void MutexAfterLock(Thread *thr, uptr m, bool writelock, bool trylock); |
| void MutexBeforeUnlock(Thread *thr, uptr m, bool writelock); |
| void MutexDestroy(Thread *thr, uptr m); |
| |
| } // namespace __dsan |
| #endif // DD_RTL_H |