diff options
| author | Nico Weber <nicolasweber@gmx.de> | 2018-09-17 16:31:20 +0000 |
|---|---|---|
| committer | Nico Weber <nicolasweber@gmx.de> | 2018-09-17 16:31:20 +0000 |
| commit | 5ffd8cedf456aa57823296f111609d6cadf5d9bd (patch) | |
| tree | 5bef311b7ab135633a855b6322d8b0ede84cdb4f /lld/Common/Strings.cpp | |
| parent | 06d3b4139e55b890795e6788db48d2e74ab8d13a (diff) | |
| download | bcm5719-llvm-5ffd8cedf456aa57823296f111609d6cadf5d9bd.tar.gz bcm5719-llvm-5ffd8cedf456aa57823296f111609d6cadf5d9bd.zip | |
lld-link: Also demangle undefined dllimported symbols.
dllimported symbols go through an import stub that's called __imp_ followed by
the name the stub points to. Make that work.
Differential Revision: https://reviews.llvm.org/D52145
llvm-svn: 342401
Diffstat (limited to 'lld/Common/Strings.cpp')
| -rw-r--r-- | lld/Common/Strings.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/lld/Common/Strings.cpp b/lld/Common/Strings.cpp index 581a0795482..6f74865b7f4 100644 --- a/lld/Common/Strings.cpp +++ b/lld/Common/Strings.cpp @@ -38,14 +38,20 @@ Optional<std::string> lld::demangleItanium(StringRef Name) { } Optional<std::string> lld::demangleMSVC(StringRef Name) { + std::string Prefix; + if (Name.consume_front("__imp_")) + Prefix = "__declspec(dllimport) "; + + // Demangle only C++ names. if (!Name.startswith("?")) return None; + char *Buf = microsoftDemangle(Name.str().c_str(), nullptr, nullptr, nullptr); if (!Buf) return None; std::string S(Buf); free(Buf); - return S; + return Prefix + S; } StringMatcher::StringMatcher(ArrayRef<StringRef> Pat) { |

