xref: /openbsd-src/gnu/llvm/lldb/packages/Python/lldbsuite/test/make/thread.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
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()20be691f3bSpatrick inline 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