summaryrefslogtreecommitdiffstats
path: root/lld/COFF/Symbols.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lld/COFF/Symbols.cpp')
-rw-r--r--lld/COFF/Symbols.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/lld/COFF/Symbols.cpp b/lld/COFF/Symbols.cpp
index 1af11820a7e..05a28f329fa 100644
--- a/lld/COFF/Symbols.cpp
+++ b/lld/COFF/Symbols.cpp
@@ -27,9 +27,20 @@ static_assert(sizeof(SymbolUnion) <= 48,
// Returns a symbol name for an error message.
static std::string demangle(StringRef symName) {
- if (config->demangle)
+ if (config->demangle) {
if (Optional<std::string> s = demangleMSVC(symName))
return *s;
+ if (config->mingw) {
+ StringRef demangleInput = symName;
+ std::string prefix;
+ if (demangleInput.consume_front("__imp_"))
+ prefix = "__declspec(dllimport) ";
+ if (config->machine == I386)
+ demangleInput.consume_front("_");
+ if (Optional<std::string> s = demangleItanium(demangleInput))
+ return prefix + *s;
+ }
+ }
return symName;
}
std::string toString(coff::Symbol &b) { return demangle(b.getName()); }
OpenPOWER on IntegriCloud