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