mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-12 14:06:36 +00:00
Detect the existence of pthread_{s,g}etname_np in libpthread on Linux
Older Linux distributions may not have those functions. llvm-svn: 296915
This commit is contained in:
parent
75b3d29cf1
commit
817f226056
@ -246,6 +246,14 @@ check_symbol_exists(__GLIBC__ stdio.h LLVM_USING_GLIBC)
|
||||
if( LLVM_USING_GLIBC )
|
||||
add_llvm_definitions( -D_GNU_SOURCE )
|
||||
endif()
|
||||
# This check requires _GNU_SOURCE
|
||||
if(HAVE_LIBPTHREAD)
|
||||
check_library_exists(pthread pthread_getname_np "" HAVE_PTHREAD_GETNAME_NP)
|
||||
check_library_exists(pthread pthread_setname_np "" HAVE_PTHREAD_SETNAME_NP)
|
||||
elseif(PTHREAD_IN_LIBC)
|
||||
check_library_exists(c pthread_getname_np "" HAVE_PTHREAD_GETNAME_NP)
|
||||
check_library_exists(c pthread_setname_np "" HAVE_PTHREAD_SETNAME_NP)
|
||||
endif()
|
||||
|
||||
set(headers "sys/types.h")
|
||||
|
||||
|
@ -115,8 +115,10 @@ void llvm::set_thread_name(const Twine &Name) {
|
||||
StringRef NameStr = Name.toNullTerminatedStringRef(Storage);
|
||||
#if defined(__linux__)
|
||||
#if (defined(__GLIBC__) && defined(_GNU_SOURCE)) || defined(__ANDROID__)
|
||||
#if HAVE_PTHREAD_SETNAME_NP
|
||||
::pthread_setname_np(::pthread_self(), NameStr.data());
|
||||
#endif
|
||||
#endif
|
||||
#elif defined(__FreeBSD__)
|
||||
::pthread_set_name_np(::pthread_self(), NameStr.data());
|
||||
#elif defined(__NetBSD__)
|
||||
@ -173,10 +175,12 @@ void llvm::get_thread_name(SmallVectorImpl<char> &Name) {
|
||||
Name.append(buf, buf + strlen(buf));
|
||||
#elif defined(__linux__)
|
||||
#if (defined(__GLIBC__) && defined(_GNU_SOURCE)) || defined(__ANDROID__)
|
||||
#if HAVE_PTHREAD_GETNAME_NP
|
||||
constexpr int MAXNAMELEN = 16;
|
||||
char Buffer[MAXNAMELEN];
|
||||
if (0 == ::pthread_getname_np(::pthread_self(), Buffer, MAXNAMELEN))
|
||||
Name.append(Buffer, Buffer + strlen(Buffer));
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user