From 2d5e917bce390b889ffd476920b69c9256266d36 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Mon, 29 Jun 2015 14:43:07 +0000 Subject: COFF: Handle mangled entry symbol name. Compilers recognize "main" function and don't mangle its name. But if you use a different function as a user-defined entry name, and if you didn't define that function with extern C, your entry point function name is mangled. And the linker has to be able to find that. This is relatively rare but can happen. llvm-svn: 240953 --- lld/COFF/Driver.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'lld/COFF') diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index bde1a6c56001..b07cb995249c 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -580,6 +580,16 @@ bool LinkerDriver::link(llvm::ArrayRef ArgsArr) { break; } + // Windows specific -- if entry point is not found, + // search for its mangled names. + if (!Config->EntryName.empty() && !Symtab.find(Config->EntryName)) { + StringRef Name; + Symbol *Sym; + std::tie(Name, Sym) = Symtab.findMangled(Config->EntryName); + if (Sym) + Symtab.rename(Config->EntryName, Name); + } + // Windows specific -- resolve dllexported symbols. for (Export &E : Config->Exports) { StringRef Name; -- cgit v1.2.3