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