Index: lld/trunk/COFF/InputFiles.cpp =================================================================== --- lld/trunk/COFF/InputFiles.cpp +++ lld/trunk/COFF/InputFiles.cpp @@ -269,6 +269,14 @@ bool Replaceable = (SymbolDef == LTO_SYMBOL_DEFINITION_TENTATIVE || (Attrs & LTO_SYMBOL_COMDAT)); SymbolBodies.push_back(new (Alloc) DefinedBitcode(SymName, Replaceable)); + + const llvm::GlobalValue *GV = M->getSymbolGV(I); + if (GV && GV->hasDLLExportStorageClass()) { + Directives += " /export:"; + Directives += SymName; + if (!GV->getValueType()->isFunctionTy()) + Directives += ",data"; + } } } Index: lld/trunk/test/COFF/Inputs/export.ll =================================================================== --- lld/trunk/test/COFF/Inputs/export.ll +++ lld/trunk/test/COFF/Inputs/export.ll @@ -0,0 +1,18 @@ +target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-pc-windows-msvc" + +define void @_DllMainCRTStartup() { + ret void +} + +define void @exportfn1() { + ret void +} + +define void @exportfn2() { + ret void +} + +define dllexport void @exportfn3() { + ret void +} Index: lld/trunk/test/COFF/dll.test =================================================================== --- lld/trunk/test/COFF/dll.test +++ lld/trunk/test/COFF/dll.test @@ -10,10 +10,26 @@ EXPORT-NEXT: 0 0 EXPORT-NEXT: 1 0x1008 exportfn1 EXPORT-NEXT: 2 0x1010 exportfn2 +EXPORT-NEXT: 3 0x1010 exportfn3 + +# RUN: llvm-as -o %t.lto.obj %p/Inputs/export.ll +# RUN: lld -flavor link2 /out:%t.lto.dll /dll %t.lto.obj /export:exportfn1 /export:exportfn2 +# RUN: llvm-objdump -p %t.lto.dll | FileCheck -check-prefix=EXPORT-LTO %s + +EXPORT-LTO: Export Table: +EXPORT-LTO: DLL name: dll.test.tmp.lto.dll +EXPORT-LTO: Ordinal RVA Name +EXPORT-LTO-NEXT: 0 0 +EXPORT-LTO-NEXT: 1 0x1010 exportfn1 +EXPORT-LTO-NEXT: 2 0x1020 exportfn2 +EXPORT-LTO-NEXT: 3 0x1030 exportfn3 # RUN: yaml2obj < %p/Inputs/import.yaml > %t2.obj # RUN: lld -flavor link2 /out:%t2.exe %t2.obj %t.lib # RUN: llvm-readobj -coff-imports %t2.exe | FileCheck -check-prefix=IMPORT %s +# RUN: lld -flavor link2 /out:%t2.lto.exe %t2.obj %t.lto.lib +# RUN: llvm-readobj -coff-imports %t2.lto.exe | FileCheck -check-prefix=IMPORT %s + IMPORT: Symbol: exportfn1 IMPORT: Symbol: exportfn2