diff options
Diffstat (limited to 'final/runtime/src/tsan_annotations.h')
-rw-r--r-- | final/runtime/src/tsan_annotations.h | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/final/runtime/src/tsan_annotations.h b/final/runtime/src/tsan_annotations.h new file mode 100644 index 0000000..2b1debb --- /dev/null +++ b/final/runtime/src/tsan_annotations.h @@ -0,0 +1,169 @@ +/*! \file */ +/* + * tsan_annotations.h -- ThreadSanitizer annotations to support data + * race detection in OpenMP programs. + */ + +//===----------------------------------------------------------------------===// +// +// 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 TSAN_ANNOTATIONS_H +#define TSAN_ANNOTATIONS_H + +#include "kmp_config.h" + +/* types as used in tsan/rtl/tsan_interface_ann.cc */ +typedef unsigned long uptr; +typedef signed long sptr; + +#ifdef __cplusplus +extern "C" { +#endif + +/* Declaration of all annotation functions in tsan/rtl/tsan_interface_ann.cc */ +void AnnotateHappensBefore(const char *f, int l, uptr addr); +void AnnotateHappensAfter(const char *f, int l, uptr addr); +void AnnotateCondVarSignal(const char *f, int l, uptr cv); +void AnnotateCondVarSignalAll(const char *f, int l, uptr cv); +void AnnotateMutexIsNotPHB(const char *f, int l, uptr mu); +void AnnotateCondVarWait(const char *f, int l, uptr cv, uptr lock); +void AnnotateRWLockCreate(const char *f, int l, uptr m); +void AnnotateRWLockCreateStatic(const char *f, int l, uptr m); +void AnnotateRWLockDestroy(const char *f, int l, uptr m); +void AnnotateRWLockAcquired(const char *f, int l, uptr m, uptr is_w); +void AnnotateRWLockReleased(const char *f, int l, uptr m, uptr is_w); +void AnnotateTraceMemory(const char *f, int l, uptr mem); +void AnnotateFlushState(const char *f, int l); +void AnnotateNewMemory(const char *f, int l, uptr mem, uptr size); +void AnnotateNoOp(const char *f, int l, uptr mem); +void AnnotateFlushExpectedRaces(const char *f, int l); +void AnnotateEnableRaceDetection(const char *f, int l, int enable); +void AnnotateMutexIsUsedAsCondVar(const char *f, int l, uptr mu); +void AnnotatePCQGet(const char *f, int l, uptr pcq); +void AnnotatePCQPut(const char *f, int l, uptr pcq); +void AnnotatePCQDestroy(const char *f, int l, uptr pcq); +void AnnotatePCQCreate(const char *f, int l, uptr pcq); +void AnnotateExpectRace(const char *f, int l, uptr mem, char *desc); +void AnnotateBenignRaceSized(const char *f, int l, uptr mem, uptr size, + char *desc); +void AnnotateBenignRace(const char *f, int l, uptr mem, char *desc); +void AnnotateIgnoreReadsBegin(const char *f, int l); +void AnnotateIgnoreReadsEnd(const char *f, int l); +void AnnotateIgnoreWritesBegin(const char *f, int l); +void AnnotateIgnoreWritesEnd(const char *f, int l); +void AnnotateIgnoreSyncBegin(const char *f, int l); +void AnnotateIgnoreSyncEnd(const char *f, int l); +void AnnotatePublishMemoryRange(const char *f, int l, uptr addr, uptr size); +void AnnotateUnpublishMemoryRange(const char *f, int l, uptr addr, uptr size); +void AnnotateThreadName(const char *f, int l, char *name); +void WTFAnnotateHappensBefore(const char *f, int l, uptr addr); +void WTFAnnotateHappensAfter(const char *f, int l, uptr addr); +void WTFAnnotateBenignRaceSized(const char *f, int l, uptr mem, uptr sz, + char *desc); +int RunningOnValgrind(); +double ValgrindSlowdown(void); +const char *ThreadSanitizerQuery(const char *query); +void AnnotateMemoryIsInitialized(const char *f, int l, uptr mem, uptr sz); + +#ifdef __cplusplus +} +#endif + +#ifdef TSAN_SUPPORT +#define ANNOTATE_HAPPENS_AFTER(addr) \ + AnnotateHappensAfter(__FILE__, __LINE__, (uptr)addr) +#define ANNOTATE_HAPPENS_BEFORE(addr) \ + AnnotateHappensBefore(__FILE__, __LINE__, (uptr)addr) +#define ANNOTATE_IGNORE_WRITES_BEGIN() \ + AnnotateIgnoreWritesBegin(__FILE__, __LINE__) +#define ANNOTATE_IGNORE_WRITES_END() AnnotateIgnoreWritesEnd(__FILE__, __LINE__) +#define ANNOTATE_RWLOCK_CREATE(lck) \ + AnnotateRWLockCreate(__FILE__, __LINE__, (uptr)lck) +#define ANNOTATE_RWLOCK_RELEASED(lck) \ + AnnotateRWLockAcquired(__FILE__, __LINE__, (uptr)lck, 1) +#define ANNOTATE_RWLOCK_ACQUIRED(lck) \ + AnnotateRWLockReleased(__FILE__, __LINE__, (uptr)lck, 1) +#define ANNOTATE_BARRIER_BEGIN(addr) \ + AnnotateHappensBefore(__FILE__, __LINE__, (uptr)addr) +#define ANNOTATE_BARRIER_END(addr) \ + AnnotateHappensAfter(__FILE__, __LINE__, (uptr)addr) +#define ANNOTATE_REDUCE_AFTER(addr) \ + AnnotateHappensAfter(__FILE__, __LINE__, (uptr)addr) +#define ANNOTATE_REDUCE_BEFORE(addr) \ + AnnotateHappensBefore(__FILE__, __LINE__, (uptr)addr) +#else +#define ANNOTATE_HAPPENS_AFTER(addr) +#define ANNOTATE_HAPPENS_BEFORE(addr) +#define ANNOTATE_IGNORE_WRITES_BEGIN() +#define ANNOTATE_IGNORE_WRITES_END() +#define ANNOTATE_RWLOCK_CREATE(lck) +#define ANNOTATE_RWLOCK_RELEASED(lck) +#define ANNOTATE_RWLOCK_ACQUIRED(lck) +#define ANNOTATE_BARRIER_BEGIN(addr) +#define ANNOTATE_BARRIER_END(addr) +#define ANNOTATE_REDUCE_AFTER(addr) +#define ANNOTATE_REDUCE_BEFORE(addr) +#endif + +#define ANNOTATE_QUEUING +#define ANNOTATE_TICKET +#define ANNOTATE_FUTEX +#define ANNOTATE_TAS +#define ANNOTATE_DRDPA + +#ifdef ANNOTATE_QUEUING +#define ANNOTATE_QUEUING_CREATE(lck) +#define ANNOTATE_QUEUING_RELEASED(lck) ANNOTATE_HAPPENS_BEFORE(lck) +#define ANNOTATE_QUEUING_ACQUIRED(lck) ANNOTATE_HAPPENS_AFTER(lck) +#else +#define ANNOTATE_QUEUING_CREATE(lck) +#define ANNOTATE_QUEUING_RELEASED(lck) +#define ANNOTATE_QUEUING_ACQUIRED(lck) +#endif + +#ifdef ANNOTATE_TICKET +#define ANNOTATE_TICKET_CREATE(lck) +#define ANNOTATE_TICKET_RELEASED(lck) ANNOTATE_HAPPENS_BEFORE(lck) +#define ANNOTATE_TICKET_ACQUIRED(lck) ANNOTATE_HAPPENS_AFTER(lck) +#else +#define ANNOTATE_TICKET_CREATE(lck) +#define ANNOTATE_TICKET_RELEASED(lck) +#define ANNOTATE_TICKET_ACQUIRED(lck) +#endif + +#ifdef ANNOTATE_FUTEX +#define ANNOTATE_FUTEX_CREATE(lck) +#define ANNOTATE_FUTEX_RELEASED(lck) ANNOTATE_HAPPENS_BEFORE(lck) +#define ANNOTATE_FUTEX_ACQUIRED(lck) ANNOTATE_HAPPENS_AFTER(lck) +#else +#define ANNOTATE_FUTEX_CREATE(lck) +#define ANNOTATE_FUTEX_RELEASED(lck) +#define ANNOTATE_FUTEX_ACQUIRED(lck) +#endif + +#ifdef ANNOTATE_TAS +#define ANNOTATE_TAS_CREATE(lck) +#define ANNOTATE_TAS_RELEASED(lck) ANNOTATE_HAPPENS_BEFORE(lck) +#define ANNOTATE_TAS_ACQUIRED(lck) ANNOTATE_HAPPENS_AFTER(lck) +#else +#define ANNOTATE_TAS_CREATE(lck) +#define ANNOTATE_TAS_RELEASED(lck) +#define ANNOTATE_TAS_ACQUIRED(lck) +#endif + +#ifdef ANNOTATE_DRDPA +#define ANNOTATE_DRDPA_CREATE(lck) +#define ANNOTATE_DRDPA_RELEASED(lck) ANNOTATE_HAPPENS_BEFORE(lck) +#define ANNOTATE_DRDPA_ACQUIRED(lck) ANNOTATE_HAPPENS_AFTER(lck) +#else +#define ANNOTATE_DRDPA_CREATE(lck) +#define ANNOTATE_DRDPA_RELEASED(lck) +#define ANNOTATE_DRDPA_ACQUIRED(lck) +#endif + +#endif |