summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/COFF/InputFiles.cpp8
-rw-r--r--lld/test/COFF/Inputs/export.ll18
-rw-r--r--lld/test/COFF/dll.test16
3 files changed, 42 insertions, 0 deletions
diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp
index c012236bb88..b0a13fbd814 100644
--- a/lld/COFF/InputFiles.cpp
+++ b/lld/COFF/InputFiles.cpp
@@ -269,6 +269,14 @@ std::error_code BitcodeFile::parse() {
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";
+ }
}
}
diff --git a/lld/test/COFF/Inputs/export.ll b/lld/test/COFF/Inputs/export.ll
new file mode 100644
index 00000000000..d254683cdd6
--- /dev/null
+++ b/lld/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
+}
diff --git a/lld/test/COFF/dll.test b/lld/test/COFF/dll.test
index 75ecaf5b391..70962a3c2bc 100644
--- a/lld/test/COFF/dll.test
+++ b/lld/test/COFF/dll.test
@@ -10,10 +10,26 @@ EXPORT: Ordinal RVA Name
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
OpenPOWER on IntegriCloud