diff options
Diffstat (limited to 'rts/posix/OSThreads.c')
-rw-r--r-- | rts/posix/OSThreads.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/rts/posix/OSThreads.c b/rts/posix/OSThreads.c index c29454809f..5fd09982de 100644 --- a/rts/posix/OSThreads.c +++ b/rts/posix/OSThreads.c @@ -23,6 +23,12 @@ #include "Rts.h" +#if defined(linux_HOST_OS) +#include <unistd.h> +#include <sys/types.h> +#include <sys/syscall.h> +#endif + #if defined(THREADED_RTS) #include "RtsUtils.h" #include "Task.h" @@ -312,4 +318,24 @@ nat getNumberOfProcessors (void) return 1; } +#endif /* defined(THREADED_RTS) */ + +KernelThreadId kernelThreadId (void) +{ +#if defined(linux_HOST_OS) + pid_t tid = syscall(SYS_gettid); // no really, see man gettid + return tid; + +#elif defined(freebsd_HOST_OS) + return pthread_getthreadid_np(); + +#elif defined(darwin_HOST_OS) + uint64_t ktid; + pthread_threadid_np(NULL, &ktid); + return ktid; + +#else + // unsupported + return 0; #endif +} |