From 6d8dace43819bee0f2e787050d9660d48ffaab09 Mon Sep 17 00:00:00 2001 From: Martin Storsjo Date: Tue, 12 Sep 2017 19:23:54 +0000 Subject: [PATCH] [MinGW] Pass the undecorated entry point name to the COFF linker On i386, the --entry parameter to GNU ld is supposed to be a decorated symbol name, while it is an undecorated name in link.exe. Differential Revision: https://reviews.llvm.org/D37710 llvm-svn: 313066 --- lld/MinGW/Driver.cpp | 10 ++++++++-- lld/test/MinGW/driver.test | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lld/MinGW/Driver.cpp b/lld/MinGW/Driver.cpp index 060231bd7a67b..790bae792ed48 100644 --- a/lld/MinGW/Driver.cpp +++ b/lld/MinGW/Driver.cpp @@ -121,8 +121,14 @@ bool mingw::link(ArrayRef ArgsArr, raw_ostream &Diag) { Add("lld-link"); - if (auto *A = Args.getLastArg(OPT_entry)) - Add("-entry:" + StringRef(A->getValue())); + if (auto *A = Args.getLastArg(OPT_entry)) { + StringRef S = A->getValue(); + if (Args.getLastArgValue(OPT_m) == "i386pe" && S.startswith("_")) + Add("-entry:" + S.substr(1)); + else + Add("-entry:" + S); + } + if (auto *A = Args.getLastArg(OPT_subs)) Add("-subsystem:" + StringRef(A->getValue())); if (auto *A = Args.getLastArg(OPT_out_implib)) diff --git a/lld/test/MinGW/driver.test b/lld/test/MinGW/driver.test index a86cdcadf2596..4a49ebaf19471 100644 --- a/lld/test/MinGW/driver.test +++ b/lld/test/MinGW/driver.test @@ -44,3 +44,6 @@ STACK: -stack:4194304,8192 RUN: ld.lld -### foo.o -m i386pep --verbose | FileCheck -check-prefix=VERBOSE %s VERBOSE: -verbose + +RUN: ld.lld -### -shared -m i386pe -e _DllMainCRTStartup@12 foo.o | FileCheck -check-prefix I386-ENTRY %s +I386-ENTRY: -entry:DllMainCRTStartup@12