1 //=-- lsan_thread.h -------------------------------------------------------===//
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
7 //===----------------------------------------------------------------------===//
9 // This file is a part of LeakSanitizer.
10 // Thread registry for standalone LSan.
12 //===----------------------------------------------------------------------===//
17 #include "sanitizer_common/sanitizer_thread_registry.h"
19 namespace __sanitizer {
25 class ThreadContext : public ThreadContextBase {
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_; }
39 uptr stack_begin_, stack_end_,
40 cache_begin_, cache_end_,
45 void InitializeThreadRegistry();
47 void ThreadStart(u32 tid, tid_t os_id,
48 ThreadType thread_type = ThreadType::Regular);
50 u32 ThreadCreate(u32 tid, uptr uid, bool detached);
51 void ThreadJoin(u32 tid);
52 u32 ThreadTid(uptr uid);
54 u32 GetCurrentThread();
55 void SetCurrentThread(u32 tid);
56 ThreadContext *CurrentThreadContext();
57 void EnsureMainThreadIDIsCorrect();
60 #endif // LSAN_THREAD_H