summaryrefslogtreecommitdiff
path: root/COFF/Strings.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-06-26 20:33:45 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-06-26 20:33:45 +0000
commit4ea16835ba66f2240d050ffcaee44cee6c97cab9 (patch)
treed2f3d66f3352a3ec22362de0b7a5c1366fc25df8 /COFF/Strings.cpp
parent15f7a1a3796209b21af2817fdf11ca9932165c70 (diff)
Vendor import of lld trunk r306325:vendor/lld/lld-trunk-r306325
Notes
svn path=/vendor/lld/dist/; revision=320382 svn path=/vendor/lld/lld-trunk-r306325/; revision=320383; tag=vendor/lld/lld-trunk-r306325
Diffstat (limited to 'COFF/Strings.cpp')
-rw-r--r--COFF/Strings.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/COFF/Strings.cpp b/COFF/Strings.cpp
index d0558413f673..84f9b9a55a32 100644
--- a/COFF/Strings.cpp
+++ b/COFF/Strings.cpp
@@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
#include "Strings.h"
+#include <mutex>
#if defined(_MSC_VER)
#include <Windows.h>
@@ -21,6 +22,10 @@ using namespace llvm;
Optional<std::string> coff::demangle(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))