aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-03-03 21:53:12 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-03-03 21:53:12 +0000
commit6cf254034f05f90c7387913667afd12eceaeb4d9 (patch)
tree8c96228f69da10357e36cae21c21ced602568d84
parent640cee0d2d7f5cd2604abcc580a63a6a60b34030 (diff)
downloadllvm-6cf254034f05f90c7387913667afd12eceaeb4d9.zip
llvm-6cf254034f05f90c7387913667afd12eceaeb4d9.tar.gz
llvm-6cf254034f05f90c7387913667afd12eceaeb4d9.tar.bz2
Detect the existence of pthread_{s,g}etname_np in libpthread on Linux
Older Linux distributions may not have those functions. llvm-svn: 296915
-rwxr-xr-xllvm/cmake/config-ix.cmake8
-rw-r--r--llvm/lib/Support/Unix/Threading.inc4
2 files changed, 12 insertions, 0 deletions
diff --git a/llvm/cmake/config-ix.cmake b/llvm/cmake/config-ix.cmake
index 42af23d..34c81fa 100755
--- a/llvm/cmake/config-ix.cmake
+++ b/llvm/cmake/config-ix.cmake
@@ -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")
diff --git a/llvm/lib/Support/Unix/Threading.inc b/llvm/lib/Support/Unix/Threading.inc
index 2bcf8e5..6301a67 100644
--- a/llvm/lib/Support/Unix/Threading.inc
+++ b/llvm/lib/Support/Unix/Threading.inc
@@ -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
}