//===-- dd_rtl.h ----------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #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 final : public DDCallback { Thread *thr; Callback(Thread *thr); u32 Unwind() override; }; typedef AddrHashMap 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