diff options
author | Wei Mi <wmi@google.com> | 2012-11-22 22:03:11 +0000 |
---|---|---|
committer | Wei Mi <wmi@gcc.gnu.org> | 2012-11-22 22:03:11 +0000 |
commit | cd0be65c262d477ac094fc1038824f766d976999 (patch) | |
tree | f83ad11b95452b47f813e942d24914f31a50394e /libsanitizer/tsan/tsan_trace.h | |
parent | 32b4b7f53e341be663438f69fd6cb2f909427188 (diff) |
tsan: New directory.
libsanitizer/
* tsan: New directory. Import tsan runtime from llvm.
* configure.ac: Add 64 bits tsan build.
* Makefile.am: Likewise.
* configure: Regenerated.
* Makefile.in: Likewise.
From-SVN: r193737
Diffstat (limited to 'libsanitizer/tsan/tsan_trace.h')
-rw-r--r-- | libsanitizer/tsan/tsan_trace.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/libsanitizer/tsan/tsan_trace.h b/libsanitizer/tsan/tsan_trace.h new file mode 100644 index 00000000000..69233a61bab --- /dev/null +++ b/libsanitizer/tsan/tsan_trace.h @@ -0,0 +1,73 @@ +//===-- tsan_trace.h --------------------------------------------*- C++ -*-===// +// +// 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_TRACE_H +#define TSAN_TRACE_H + +#include "tsan_defs.h" +#include "tsan_mutex.h" +#include "tsan_sync.h" + +namespace __tsan { + +#ifndef TSAN_HISTORY_SIZE // in kibitraces +#define TSAN_HISTORY_SIZE 128 +#endif + +const int kTracePartSize = 16 * 1024; +const int kTraceParts = TSAN_HISTORY_SIZE * 1024 / kTracePartSize; +const int kTraceSize = kTracePartSize * kTraceParts; + +// Must fit into 3 bits. +enum EventType { + EventTypeMop, + EventTypeFuncEnter, + EventTypeFuncExit, + EventTypeLock, + EventTypeUnlock, + EventTypeRLock, + EventTypeRUnlock +}; + +// Represents a thread event (from most significant bit): +// u64 typ : 3; // EventType. +// u64 addr : 61; // Associated pc. +typedef u64 Event; + +struct TraceHeader { + StackTrace stack0; // Start stack for the trace. + u64 epoch0; // Start epoch for the trace. +#ifndef TSAN_GO + uptr stack0buf[kTraceStackSize]; +#endif + + TraceHeader() +#ifndef TSAN_GO + : stack0(stack0buf, kTraceStackSize) +#else + : stack0() +#endif + , epoch0() { + } +}; + +struct Trace { + Event events[kTraceSize]; + TraceHeader headers[kTraceParts]; + Mutex mtx; + + Trace() + : mtx(MutexTypeTrace, StatMtxTrace) { + } +}; + +} // namespace __tsan + +#endif // TSAN_TRACE_H |