diff options
Diffstat (limited to 'lib/tsan/rtl/tsan_report.h')
-rw-r--r-- | lib/tsan/rtl/tsan_report.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/lib/tsan/rtl/tsan_report.h b/lib/tsan/rtl/tsan_report.h new file mode 100644 index 0000000..d139296 --- /dev/null +++ b/lib/tsan/rtl/tsan_report.h @@ -0,0 +1,102 @@ +//===-- tsan_report.h -------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file is a part of ThreadSanitizer (TSan), a race detector. +// +//===----------------------------------------------------------------------===// +#ifndef TSAN_REPORT_H +#define TSAN_REPORT_H + +#include "tsan_defs.h" +#include "tsan_vector.h" + +namespace __tsan { + +enum ReportType { + ReportTypeRace, + ReportTypeUseAfterFree, + ReportTypeThreadLeak, + ReportTypeMutexDestroyLocked, + ReportTypeSignalUnsafe, + ReportTypeErrnoInSignal, +}; + +struct ReportStack { + ReportStack *next; + char *module; + uptr offset; + uptr pc; + char *func; + char *file; + int line; + int col; +}; + +struct ReportMop { + int tid; + uptr addr; + int size; + bool write; + int nmutex; + int *mutex; + ReportStack *stack; +}; + +enum ReportLocationType { + ReportLocationGlobal, + ReportLocationHeap, + ReportLocationStack, +}; + +struct ReportLocation { + ReportLocationType type; + uptr addr; + uptr size; + int tid; + char *name; + char *file; + int line; + ReportStack *stack; +}; + +struct ReportThread { + int id; + bool running; + char *name; + ReportStack *stack; +}; + +struct ReportMutex { + int id; + ReportStack *stack; +}; + +class ReportDesc { + public: + ReportType typ; + Vector<ReportStack*> stacks; + Vector<ReportMop*> mops; + Vector<ReportLocation*> locs; + Vector<ReportMutex*> mutexes; + Vector<ReportThread*> threads; + + ReportDesc(); + ~ReportDesc(); + + private: + ReportDesc(const ReportDesc&); + void operator = (const ReportDesc&); +}; + +// Format and output the report to the console/log. No additional logic. +void PrintReport(const ReportDesc *rep); + +} // namespace __tsan + +#endif // TSAN_REPORT_H |