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")
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__)
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
}