1 #ifndef LLDB_THREAD_H
2 #define LLDB_THREAD_H
3 
4 #include <stdint.h>
5 
6 #if defined(__APPLE__)
7 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2)
8 int pthread_threadid_np(pthread_t, __uint64_t *);
9 #elif defined(__linux__)
10 #include <sys/syscall.h>
11 #include <unistd.h>
12 #elif defined(__FreeBSD__)
13 #include <pthread_np.h>
14 #elif defined(__NetBSD__)
15 #include <lwp.h>
16 #elif defined(_WIN32)
17 #include <windows.h>
18 #endif
19 
get_thread_id()20 inline uint64_t get_thread_id() {
21 #if defined(__APPLE__)
22   __uint64_t tid = 0;
23   pthread_threadid_np(pthread_self(), &tid);
24   return tid;
25 #elif defined(__linux__)
26   return syscall(__NR_gettid);
27 #elif defined(__FreeBSD__)
28   return static_cast<uint64_t>(pthread_getthreadid_np());
29 #elif defined(__NetBSD__)
30   // Technically lwpid_t is 32-bit signed integer
31   return static_cast<uint64_t>(_lwp_self());
32 #elif defined(_WIN32)
33   return static_cast<uint64_t>(::GetCurrentThreadId());
34 #else
35   return -1;
36 #endif
37 }
38 
39 #endif // LLDB_THREAD_H
40