xref: /freebsd-src/contrib/llvm-project/openmp/runtime/src/kmp_wrapper_getpid.h (revision 1db9f3b21e39176dd5b67cf8ac378633b172463e)
10b57cec5SDimitry Andric /*
20b57cec5SDimitry Andric  * kmp_wrapper_getpid.h -- getpid() declaration.
30b57cec5SDimitry Andric  */
40b57cec5SDimitry Andric 
50b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
80b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
90b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
100b57cec5SDimitry Andric //
110b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
120b57cec5SDimitry Andric 
130b57cec5SDimitry Andric #ifndef KMP_WRAPPER_GETPID_H
140b57cec5SDimitry Andric #define KMP_WRAPPER_GETPID_H
150b57cec5SDimitry Andric 
160b57cec5SDimitry Andric #if KMP_OS_UNIX
170b57cec5SDimitry Andric 
180b57cec5SDimitry Andric // On Unix-like systems (Linux* OS and OS X*) getpid() is declared in standard
190b57cec5SDimitry Andric // headers.
20*1db9f3b2SDimitry Andric #if !defined(KMP_OS_AIX)
210b57cec5SDimitry Andric #include <sys/syscall.h>
22*1db9f3b2SDimitry Andric #endif
230b57cec5SDimitry Andric #include <sys/types.h>
240b57cec5SDimitry Andric #include <unistd.h>
250b57cec5SDimitry Andric #if KMP_OS_DARWIN
260b57cec5SDimitry Andric // OS X
27e8d8bef9SDimitry Andric #define __kmp_gettid() pthread_mach_thread_np(pthread_self())
285f757f3fSDimitry Andric #elif KMP_OS_FREEBSD || KMP_OS_DRAGONFLY
290b57cec5SDimitry Andric #include <pthread_np.h>
300b57cec5SDimitry Andric #define __kmp_gettid() pthread_getthreadid_np()
310b57cec5SDimitry Andric #elif KMP_OS_NETBSD
320b57cec5SDimitry Andric #include <lwp.h>
330b57cec5SDimitry Andric #define __kmp_gettid() _lwp_self()
34480093f4SDimitry Andric #elif KMP_OS_OPENBSD
35b121cb00SDimitry Andric #define __kmp_gettid() getthrid()
36*1db9f3b2SDimitry Andric #elif KMP_OS_AIX
37*1db9f3b2SDimitry Andric #include <pthread.h>
38*1db9f3b2SDimitry Andric #define __kmp_gettid() pthread_self()
390b57cec5SDimitry Andric #elif defined(SYS_gettid)
400b57cec5SDimitry Andric // Hopefully other Unix systems define SYS_gettid syscall for getting os thread
410b57cec5SDimitry Andric // id
420b57cec5SDimitry Andric #define __kmp_gettid() syscall(SYS_gettid)
430b57cec5SDimitry Andric #else
440b57cec5SDimitry Andric #warning No gettid found, use getpid instead
450b57cec5SDimitry Andric #define __kmp_gettid() getpid()
460b57cec5SDimitry Andric #endif
470b57cec5SDimitry Andric 
480b57cec5SDimitry Andric #elif KMP_OS_WINDOWS
490b57cec5SDimitry Andric 
500b57cec5SDimitry Andric // On Windows* OS _getpid() returns int (not pid_t) and is declared in
510b57cec5SDimitry Andric // "process.h".
520b57cec5SDimitry Andric #include <process.h>
530b57cec5SDimitry Andric // Let us simulate Unix.
540b57cec5SDimitry Andric #if KMP_MSVC_COMPAT
550b57cec5SDimitry Andric typedef int pid_t;
560b57cec5SDimitry Andric #endif
570b57cec5SDimitry Andric #define getpid _getpid
580b57cec5SDimitry Andric #define __kmp_gettid() GetCurrentThreadId()
590b57cec5SDimitry Andric 
600b57cec5SDimitry Andric #else
610b57cec5SDimitry Andric 
620b57cec5SDimitry Andric #error Unknown or unsupported OS.
630b57cec5SDimitry Andric 
640b57cec5SDimitry Andric #endif
650b57cec5SDimitry Andric 
660b57cec5SDimitry Andric /* TODO: All the libomp source code uses pid_t type for storing the result of
670b57cec5SDimitry Andric    getpid(), it is good. But often it printed as "%d", that is not good, because
680b57cec5SDimitry Andric    it ignores pid_t definition (may pid_t be longer that int?). It seems all pid
690b57cec5SDimitry Andric    prints should be rewritten as:
700b57cec5SDimitry Andric 
710b57cec5SDimitry Andric    printf( "%" KMP_UINT64_SPEC, (kmp_uint64) pid );
720b57cec5SDimitry Andric 
730b57cec5SDimitry Andric    or (at least) as
740b57cec5SDimitry Andric 
750b57cec5SDimitry Andric    printf( "%" KMP_UINT32_SPEC, (kmp_uint32) pid );
760b57cec5SDimitry Andric 
770b57cec5SDimitry Andric    (kmp_uint32, kmp_uint64, KMP_UINT64_SPEC, and KMP_UNIT32_SPEC are defined in
780b57cec5SDimitry Andric    "kmp_os.h".)  */
790b57cec5SDimitry Andric 
800b57cec5SDimitry Andric #endif // KMP_WRAPPER_GETPID_H
810b57cec5SDimitry Andric 
820b57cec5SDimitry Andric // end of file //
83