• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1diff --git a/llvm/lib/DebugInfo/Symbolize/CMakeLists.txt b/llvm/lib/DebugInfo/Symbolize/CMakeLists.txt
2index acfb3bd0e..a499ee2e0 100644
3--- a/llvm/lib/DebugInfo/Symbolize/CMakeLists.txt
4+++ b/llvm/lib/DebugInfo/Symbolize/CMakeLists.txt
5@@ -12,4 +12,11 @@ add_llvm_component_library(LLVMSymbolize
6   Object
7   Support
8   Demangle
9-  )
10+
11+  LINK_LIBS
12+  /usr/lib/swift_static/linux/libswiftCore.a
13+  /usr/lib/swift_static/linux/libicui18nswift.a
14+  /usr/lib/swift_static/linux/libicuucswift.a
15+  /usr/lib/swift_static/linux/libicudataswift.a
16+  /usr/lib/x86_64-linux-gnu/libstdc++.so.6
17+)
18diff --git a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
19index fb4875f79..0030769ee 100644
20--- a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
21+++ b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
22@@ -36,6 +36,13 @@
23 #include <cassert>
24 #include <cstring>
25
26+
27+extern "C" char *swift_demangle(const char *mangledName,
28+                     size_t mangledNameLength,
29+                     char *outputBuffer,
30+                     size_t *outputBufferSize,
31+                     uint32_t flags);
32+
33 namespace llvm {
34 namespace symbolize {
35
36@@ -678,6 +685,14 @@ LLVMSymbolizer::DemangleName(const std::string &Name,
37     free(DemangledName);
38     return Result;
39   }
40+  if (!Name.empty() && Name.front() == '$') {
41+    char *DemangledName = swift_demangle(Name.c_str(), Name.length(), 0, 0, 0);
42+    if (DemangledName) {
43+      std::string Result = DemangledName;
44+      free(DemangledName);
45+      return Result;
46+    }
47+  }
48
49   if (DbiModuleDescriptor && DbiModuleDescriptor->isWin32Module())
50     return std::string(demanglePE32ExternCFunc(Name));
51