| //===- Strings.cpp -------------------------------------------------------===// |
| // |
| // The LLVM Linker |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "Strings.h" |
| #include <mutex> |
| |
| #if defined(_MSC_VER) |
| #include <Windows.h> |
| #include <DbgHelp.h> |
| #pragma comment(lib, "dbghelp.lib") |
| #endif |
| |
| using namespace lld; |
| using namespace lld::coff; |
| using namespace llvm; |
| |
| Optional<std::string> coff::demangleMSVC(StringRef S) { |
| #if defined(_MSC_VER) |
| // UnDecorateSymbolName is not thread-safe, so we need a mutex. |
| static std::mutex Mu; |
| std::lock_guard<std::mutex> Lock(Mu); |
| |
| char Buf[4096]; |
| if (S.startswith("?")) |
| if (size_t Len = UnDecorateSymbolName(S.str().c_str(), Buf, sizeof(Buf), 0)) |
| return std::string(Buf, Len); |
| #endif |
| return None; |
| } |