diff options
author | Brad Smith <brad@comstyle.com> | 2024-09-02 06:17:40 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-02 06:17:40 -0400 |
commit | 1e65b765879fb39214b28d96e3305fa3599581db (patch) | |
tree | 29f6d6554b1be0fe98afc4a8acf243dfedd34706 /llvm/lib/Support/Unix/Threading.inc | |
parent | c42512436b23ab50e7637f239abe8371407104a1 (diff) | |
download | llvm-1e65b765879fb39214b28d96e3305fa3599581db.zip llvm-1e65b765879fb39214b28d96e3305fa3599581db.tar.gz llvm-1e65b765879fb39214b28d96e3305fa3599581db.tar.bz2 |
[llvm][Support] Add support for thread naming under DragonFly BSD and Solaris/illumos (#106944)
Diffstat (limited to 'llvm/lib/Support/Unix/Threading.inc')
-rw-r--r-- | llvm/lib/Support/Unix/Threading.inc | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/llvm/lib/Support/Unix/Threading.inc b/llvm/lib/Support/Unix/Threading.inc index acfd4ad..43e18c3 100644 --- a/llvm/lib/Support/Unix/Threading.inc +++ b/llvm/lib/Support/Unix/Threading.inc @@ -137,13 +137,16 @@ uint64_t llvm::get_threadid() { } static constexpr uint32_t get_max_thread_name_length_impl() { -#if defined(__NetBSD__) +#if defined(PTHREAD_MAX_NAMELEN_NP) return PTHREAD_MAX_NAMELEN_NP; #elif defined(__APPLE__) return 64; +#elif defined(__sun__) && defined(__svr4__) + return 31; #elif defined(__linux__) && HAVE_PTHREAD_SETNAME_NP return 16; -#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ + defined(__DragonFly__) return 16; #elif defined(__OpenBSD__) return 24; @@ -170,15 +173,17 @@ void llvm::set_thread_name(const Twine &Name) { if (get_max_thread_name_length() > 0) NameStr = NameStr.take_back(get_max_thread_name_length() - 1); (void)NameStr; -#if defined(__linux__) && HAVE_PTHREAD_SETNAME_NP - ::pthread_setname_np(::pthread_self(), NameStr.data()); -#elif defined(__FreeBSD__) || defined(__OpenBSD__) +#if defined(HAVE_PTHREAD_SET_NAME_NP) ::pthread_set_name_np(::pthread_self(), NameStr.data()); -#elif defined(__NetBSD__) +#elif defined(HAVE_PTHREAD_SETNAME_NP) +#if defined(__NetBSD__) ::pthread_setname_np(::pthread_self(), "%s", const_cast<char *>(NameStr.data())); #elif defined(__APPLE__) ::pthread_setname_np(NameStr.data()); +#else + ::pthread_setname_np(::pthread_self(), NameStr.data()); +#endif #endif } @@ -221,23 +226,24 @@ void llvm::get_thread_name(SmallVectorImpl<char> &Name) { } free(kp); return; -#elif defined(__NetBSD__) +#elif defined(__linux__) && HAVE_PTHREAD_GETNAME_NP + constexpr uint32_t len = get_max_thread_name_length_impl(); + char Buffer[len] = {'\0'}; // FIXME: working around MSan false positive. + if (0 == ::pthread_getname_np(::pthread_self(), Buffer, len)) + Name.append(Buffer, Buffer + strlen(Buffer)); +#elif defined(HAVE_PTHREAD_GET_NAME_NP) constexpr uint32_t len = get_max_thread_name_length_impl(); char buf[len]; - ::pthread_getname_np(::pthread_self(), buf, len); + ::pthread_get_name_np(::pthread_self(), buf, len); Name.append(buf, buf + strlen(buf)); -#elif defined(__OpenBSD__) + +#elif defined(HAVE_PTHREAD_GETNAME_NP) constexpr uint32_t len = get_max_thread_name_length_impl(); char buf[len]; - ::pthread_get_name_np(::pthread_self(), buf, len); + ::pthread_getname_np(::pthread_self(), buf, len); Name.append(buf, buf + strlen(buf)); -#elif defined(__linux__) && HAVE_PTHREAD_GETNAME_NP - constexpr uint32_t len = get_max_thread_name_length_impl(); - char Buffer[len] = {'\0'}; // FIXME: working around MSan false positive. - if (0 == ::pthread_getname_np(::pthread_self(), Buffer, len)) - Name.append(Buffer, Buffer + strlen(Buffer)); #endif } |