[compiler-rt] 8bf8d36 - [compiler-rt][fuzzer] Reland "SetThreadName windows implementation" (#83562)

via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 7 15:53:31 PST 2024


Author: David CARLIER
Date: 2024-03-07T23:53:27Z
New Revision: 8bf8d36f8e82a1e2d32f33dbe7369d9cecd57f46

URL: https://github.com/llvm/llvm-project/commit/8bf8d36f8e82a1e2d32f33dbe7369d9cecd57f46
DIFF: https://github.com/llvm/llvm-project/commit/8bf8d36f8e82a1e2d32f33dbe7369d9cecd57f46.diff

LOG: [compiler-rt][fuzzer] Reland "SetThreadName windows implementation" (#83562)

Following-up on GH-76761.

Added: 
    

Modified: 
    compiler-rt/lib/fuzzer/FuzzerUtilWindows.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/fuzzer/FuzzerUtilWindows.cpp b/compiler-rt/lib/fuzzer/FuzzerUtilWindows.cpp
index 71770166805f78..0dbcec8b5f2215 100644
--- a/compiler-rt/lib/fuzzer/FuzzerUtilWindows.cpp
+++ b/compiler-rt/lib/fuzzer/FuzzerUtilWindows.cpp
@@ -21,10 +21,15 @@
 #include <signal.h>
 #include <stdio.h>
 #include <sys/types.h>
+// clang-format off
 #include <windows.h>
-
-// This must be included after windows.h.
+// These must be included after windows.h.
+// archicture need to be set before including
+// libloaderapi
+#include <libloaderapi.h>
+#include <stringapiset.h>
 #include <psapi.h>
+// clang-format on
 
 namespace fuzzer {
 
@@ -234,8 +239,20 @@ size_t PageSize() {
 }
 
 void SetThreadName(std::thread &thread, const std::string &name) {
-  // TODO ?
-  // to UTF-8 then SetThreadDescription ?
+  typedef HRESULT(WINAPI * proc)(HANDLE, PCWSTR);
+  HMODULE kbase = GetModuleHandleA("KernelBase.dll");
+  proc ThreadNameProc =
+      reinterpret_cast<proc>(GetProcAddress(kbase, "SetThreadDescription"));
+  if (proc) {
+    std::wstring buf;
+    auto sz = MultiByteToWideChar(CP_UTF8, 0, name.data(), -1, nullptr, 0);
+    if (sz > 0) {
+      buf.resize(sz);
+      if (MultiByteToWideChar(CP_UTF8, 0, name.data(), -1, &buf[0], sz) > 0) {
+        (void)ThreadNameProc(thread.native_handle(), buf.c_str());
+      }
+    }
+  }
 }
 
 } // namespace fuzzer


        


More information about the llvm-commits mailing list