From 88ab281b4d57d2ae965b335afb74d73407c233c7 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Tue, 28 May 2019 14:54:49 +0000 Subject: llvm-undname: Add support for local static thread guards llvm-svn: 361835 --- llvm/lib/Demangle/MicrosoftDemangle.cpp | 7 +++++-- llvm/lib/Demangle/MicrosoftDemangleNodes.cpp | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Demangle') diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp index e596f0cea1c..4abb48e5757 100644 --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -293,9 +293,10 @@ Demangler::demangleSpecialTableSymbolNode(StringView &MangledName, } LocalStaticGuardVariableNode * -Demangler::demangleLocalStaticGuard(StringView &MangledName) { +Demangler::demangleLocalStaticGuard(StringView &MangledName, bool IsThread) { LocalStaticGuardIdentifierNode *LSGI = Arena.alloc(); + LSGI->IsThread = IsThread; QualifiedNameNode *QN = demangleNameScopeChain(MangledName, LSGI); LocalStaticGuardVariableNode *LSGVN = Arena.alloc(); @@ -443,7 +444,9 @@ SymbolNode *Demangler::demangleSpecialIntrinsic(StringView &MangledName) { case SpecialIntrinsicKind::VcallThunk: return demangleVcallThunkNode(MangledName); case SpecialIntrinsicKind::LocalStaticGuard: - return demangleLocalStaticGuard(MangledName); + return demangleLocalStaticGuard(MangledName, /*IsThread=*/false); + case SpecialIntrinsicKind::LocalStaticThreadGuard: + return demangleLocalStaticGuard(MangledName, /*IsThread=*/true); case SpecialIntrinsicKind::RttiTypeDescriptor: { TypeNode *T = demangleType(MangledName, QualifierMangleMode::Result); if (Error) diff --git a/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp b/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp index a3ee5f9d91d..2c1e5f44f42 100644 --- a/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp @@ -349,7 +349,10 @@ void IntrinsicFunctionIdentifierNode::output(OutputStream &OS, void LocalStaticGuardIdentifierNode::output(OutputStream &OS, OutputFlags Flags) const { - OS << "`local static guard'"; + if (IsThread) + OS << "`local static thread guard'"; + else + OS << "`local static guard'"; if (ScopeIndex > 0) OS << "{" << ScopeIndex << "}"; } -- cgit v1.2.3