summaryrefslogtreecommitdiffstats
path: root/lld/Common/Strings.cpp
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2018-09-17 16:31:20 +0000
committerNico Weber <nicolasweber@gmx.de>2018-09-17 16:31:20 +0000
commit5ffd8cedf456aa57823296f111609d6cadf5d9bd (patch)
tree5bef311b7ab135633a855b6322d8b0ede84cdb4f /lld/Common/Strings.cpp
parent06d3b4139e55b890795e6788db48d2e74ab8d13a (diff)
downloadbcm5719-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.cpp8
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) {
OpenPOWER on IntegriCloud