[lld] r239994 - COFF: Implement DLL symbol exports for bitcode files.

Peter Collingbourne peter at pcc.me.uk
Wed Jun 17 22:22:15 PDT 2015


Author: pcc
Date: Thu Jun 18 00:22:15 2015
New Revision: 239994

URL: http://llvm.org/viewvc/llvm-project?rev=239994&view=rev
Log:
COFF: Implement DLL symbol exports for bitcode files.

Differential Revision: http://reviews.llvm.org/D10530

Added:
    lld/trunk/test/COFF/Inputs/export.ll
Modified:
    lld/trunk/COFF/InputFiles.cpp
    lld/trunk/test/COFF/dll.test

Modified: lld/trunk/COFF/InputFiles.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/InputFiles.cpp?rev=239994&r1=239993&r2=239994&view=diff
==============================================================================
--- lld/trunk/COFF/InputFiles.cpp (original)
+++ lld/trunk/COFF/InputFiles.cpp Thu Jun 18 00:22:15 2015
@@ -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";
+      }
     }
   }
 

Added: lld/trunk/test/COFF/Inputs/export.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/Inputs/export.ll?rev=239994&view=auto
==============================================================================
--- lld/trunk/test/COFF/Inputs/export.ll (added)
+++ lld/trunk/test/COFF/Inputs/export.ll Thu Jun 18 00:22:15 2015
@@ -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
+}

Modified: lld/trunk/test/COFF/dll.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/dll.test?rev=239994&r1=239993&r2=239994&view=diff
==============================================================================
--- lld/trunk/test/COFF/dll.test (original)
+++ lld/trunk/test/COFF/dll.test Thu Jun 18 00:22:15 2015
@@ -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





More information about the llvm-commits mailing list