diff options
Diffstat (limited to 'lld/COFF/SymbolTable.cpp')
| -rw-r--r-- | lld/COFF/SymbolTable.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp index 40fbea91cdc..3b3004c6897 100644 --- a/lld/COFF/SymbolTable.cpp +++ b/lld/COFF/SymbolTable.cpp @@ -351,10 +351,18 @@ StringRef SymbolTable::findMangle(StringRef Name) { return findByPrefix(("?" + Name + "@@Y").str()); if (!Name.startswith("_")) return ""; - // Search for x86 C function. + // Search for x86 stdcall function. StringRef S = findByPrefix((Name + "@").str()); if (!S.empty()) return S; + // Search for x86 fastcall function. + S = findByPrefix(("@" + Name.substr(1) + "@").str()); + if (!S.empty()) + return S; + // Search for x86 vectorcall function. + S = findByPrefix((Name.substr(1) + "@@").str()); + if (!S.empty()) + return S; // Search for x86 C++ non-member function. return findByPrefix(("?" + Name.substr(1) + "@@Y").str()); } @@ -364,8 +372,10 @@ void SymbolTable::mangleMaybe(SymbolBody *B) { if (!U || U->WeakAlias) return; StringRef Alias = findMangle(U->getName()); - if (!Alias.empty()) + if (!Alias.empty()) { + log(U->getName() + " aliased to " + Alias); U->WeakAlias = addUndefined(Alias); + } } SymbolBody *SymbolTable::addUndefined(StringRef Name) { |

