diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1203,10 +1203,10 @@ // -exclude-all-symbols option, so that lld-link behaves like link.exe rather // than MinGW in the case that nothing is explicitly exported. void LinkerDriver::maybeExportMinGWSymbols(const opt::InputArgList &args) { - if (!config->dll) - return; - if (!args.hasArg(OPT_export_all_symbols)) { + if (!config->dll) + return; + if (!config->exports.empty()) return; if (args.hasArg(OPT_exclude_all_symbols)) diff --git a/lld/test/COFF/export-all.s b/lld/test/COFF/export-all.s --- a/lld/test/COFF/export-all.s +++ b/lld/test/COFF/export-all.s @@ -61,6 +61,10 @@ # RUN: llvm-readobj --coff-exports %t.dll | FileCheck -check-prefix=CHECK2 %s # RUN: cat %t.def | FileCheck -check-prefix=CHECK2-DEF %s +# RUN: lld-link -safeseh:no -out:%t.exe %t.obj -lldmingw -export-all-symbols -output-def:%t.def -entry:_DllMainCRTStartup +# RUN: llvm-readobj --coff-exports %t.exe | FileCheck -check-prefix=CHECK2 %s +# RUN: cat %t.def | FileCheck -check-prefix=CHECK2-DEF %s + # Note, this will actually export _DllMainCRTStartup as well, since # it uses the standard spelling in this object file, not the MinGW one.