1 //=-- lsan_thread.h -------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file is a part of LeakSanitizer.
10 // Thread registry for standalone LSan.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LSAN_THREAD_H
15 #define LSAN_THREAD_H
16 
17 #include "sanitizer_common/sanitizer_thread_registry.h"
18 
19 namespace __sanitizer {
20 struct DTLS;
21 }
22 
23 namespace __lsan {
24 
25 class ThreadContext : public ThreadContextBase {
26  public:
27   explicit ThreadContext(int tid);
28   void OnStarted(void *arg) override;
29   void OnFinished() override;
30   uptr stack_begin() { return stack_begin_; }
31   uptr stack_end() { return stack_end_; }
32   uptr tls_begin() { return tls_begin_; }
33   uptr tls_end() { return tls_end_; }
34   uptr cache_begin() { return cache_begin_; }
35   uptr cache_end() { return cache_end_; }
36   DTLS *dtls() { return dtls_; }
37 
38  private:
39   uptr stack_begin_, stack_end_,
40        cache_begin_, cache_end_,
41        tls_begin_, tls_end_;
42   DTLS *dtls_;
43 };
44 
45 void InitializeThreadRegistry();
46 
47 void ThreadStart(u32 tid, tid_t os_id,
48                  ThreadType thread_type = ThreadType::Regular);
49 void ThreadFinish();
50 u32 ThreadCreate(u32 tid, uptr uid, bool detached);
51 void ThreadJoin(u32 tid);
52 u32 ThreadTid(uptr uid);
53 
54 u32 GetCurrentThread();
55 void SetCurrentThread(u32 tid);
56 ThreadContext *CurrentThreadContext();
57 void EnsureMainThreadIDIsCorrect();
58 }  // namespace __lsan
59 
60 #endif  // LSAN_THREAD_H
61