1//=-- lsan_thread.h -------------------------------------------------------===//
2//
3// This file is distributed under the University of Illinois Open Source
4// License. See LICENSE.TXT for details.
5//
6//===----------------------------------------------------------------------===//
7//
8// This file is a part of LeakSanitizer.
9// Thread registry for standalone LSan.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LSAN_THREAD_H
14#define LSAN_THREAD_H
15
16#include "sanitizer_common/sanitizer_thread_registry.h"
17
18namespace __lsan {
19
20class ThreadContext : public ThreadContextBase {
21 public:
22  explicit ThreadContext(int tid);
23  void OnStarted(void *arg);
24  void OnFinished();
25  uptr stack_begin() { return stack_begin_; }
26  uptr stack_end() { return stack_end_; }
27  uptr tls_begin() { return tls_begin_; }
28  uptr tls_end() { return tls_end_; }
29  uptr cache_begin() { return cache_begin_; }
30  uptr cache_end() { return cache_end_; }
31 private:
32  uptr stack_begin_, stack_end_,
33       cache_begin_, cache_end_,
34       tls_begin_, tls_end_;
35};
36
37void InitializeThreadRegistry();
38
39void ThreadStart(u32 tid, uptr os_id);
40void ThreadFinish();
41u32 ThreadCreate(u32 tid, uptr uid, bool detached);
42void ThreadJoin(u32 tid);
43u32 ThreadTid(uptr uid);
44
45u32 GetCurrentThread();
46void SetCurrentThread(u32 tid);
47ThreadContext *CurrentThreadContext();
48void EnsureMainThreadIDIsCorrect();
49}  // namespace __lsan
50
51#endif  // LSAN_THREAD_H
52