[compiler-rt][fuzzer] Reland "SetThreadName windows implementation" (#83562)
Following-up on GH-76761.
This commit is contained in:
parent
ddf79deb42
commit
8bf8d36f8e
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user