61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
//=-- lsan_thread.h -------------------------------------------------------===//
 | 
						|
//
 | 
						|
//                     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 LeakSanitizer.
 | 
						|
// Thread registry for standalone LSan.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#ifndef LSAN_THREAD_H
 | 
						|
#define LSAN_THREAD_H
 | 
						|
 | 
						|
#include "sanitizer_common/sanitizer_thread_registry.h"
 | 
						|
 | 
						|
namespace __sanitizer {
 | 
						|
struct DTLS;
 | 
						|
}
 | 
						|
 | 
						|
namespace __lsan {
 | 
						|
 | 
						|
class ThreadContext : public ThreadContextBase {
 | 
						|
 public:
 | 
						|
  explicit ThreadContext(int tid);
 | 
						|
  void OnStarted(void *arg) override;
 | 
						|
  void OnFinished() override;
 | 
						|
  uptr stack_begin() { return stack_begin_; }
 | 
						|
  uptr stack_end() { return stack_end_; }
 | 
						|
  uptr tls_begin() { return tls_begin_; }
 | 
						|
  uptr tls_end() { return tls_end_; }
 | 
						|
  uptr cache_begin() { return cache_begin_; }
 | 
						|
  uptr cache_end() { return cache_end_; }
 | 
						|
  DTLS *dtls() { return dtls_; }
 | 
						|
 | 
						|
 private:
 | 
						|
  uptr stack_begin_, stack_end_,
 | 
						|
       cache_begin_, cache_end_,
 | 
						|
       tls_begin_, tls_end_;
 | 
						|
  DTLS *dtls_;
 | 
						|
};
 | 
						|
 | 
						|
void InitializeThreadRegistry();
 | 
						|
 | 
						|
void ThreadStart(u32 tid, tid_t os_id, bool workerthread = false);
 | 
						|
void ThreadFinish();
 | 
						|
u32 ThreadCreate(u32 tid, uptr uid, bool detached);
 | 
						|
void ThreadJoin(u32 tid);
 | 
						|
u32 ThreadTid(uptr uid);
 | 
						|
 | 
						|
u32 GetCurrentThread();
 | 
						|
void SetCurrentThread(u32 tid);
 | 
						|
ThreadContext *CurrentThreadContext();
 | 
						|
void EnsureMainThreadIDIsCorrect();
 | 
						|
}  // namespace __lsan
 | 
						|
 | 
						|
#endif  // LSAN_THREAD_H
 |