diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index 6d44498465fc..33aee38759ec 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1244,6 +1244,9 @@ void LinkerDriver::link(ArrayRef ArgsArr) { Export E; E.Name = Def->getName(); E.Sym = Def; + if (Def->getChunk() && + !(Def->getChunk()->getPermissions() & IMAGE_SCN_MEM_EXECUTE)) + E.Data = true; Config->Exports.push_back(E); }); } diff --git a/lld/test/COFF/export-all.s b/lld/test/COFF/export-all.s index 6d2a640945ef..583679e967e2 100644 --- a/lld/test/COFF/export-all.s +++ b/lld/test/COFF/export-all.s @@ -4,17 +4,28 @@ # RUN: lld-link -lldmingw -dll -out:%t.dll -entry:DllMainCRTStartup@12 %t.obj -implib:%t.lib # RUN: llvm-readobj -coff-exports %t.dll | FileCheck %s +# RUN: llvm-readobj %t.lib | FileCheck -check-prefix=IMPLIB %s # CHECK-NOT: Name: DllMainCRTStartup +# CHECK: Name: dataSym # CHECK: Name: foobar +# IMPLIB: Symbol: __imp__dataSym +# IMPLIB-NOT: Symbol: _dataSym +# IMPLIB: Symbol: __imp__foobar +# IMPLIB: Symbol: _foobar + .global _foobar .global _DllMainCRTStartup@12 +.global _dataSym .text _DllMainCRTStartup@12: ret _foobar: ret +.data +_dataSym: + .int 4 # Test specifying -export-all-symbols, on an object file that contains # dllexport directive for some of the symbols.