diff options
Diffstat (limited to 'lib/tsan/dd/dd_rtl.h')
-rw-r--r-- | lib/tsan/dd/dd_rtl.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/lib/tsan/dd/dd_rtl.h b/lib/tsan/dd/dd_rtl.h new file mode 100644 index 0000000000000..bb1b20205b54d --- /dev/null +++ b/lib/tsan/dd/dd_rtl.h @@ -0,0 +1,67 @@ +//===-- 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); + virtual u32 Unwind(); +}; + +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 |