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

Peter Collingbourne peter at pcc.me.uk
Mon Jun 29 16:27:57 PDT 2015


As of r241020 we now use a libLTO provided interface to do this.

Peter

On Wed, Jun 17, 2015 at 10:33:03PM -0700, Rui Ueyama wrote:
> On second thought, is this something the user of libLTO should do? It feels
> something that libLTO itself should do.
> 
> On Wed, Jun 17, 2015 at 10:22 PM, Peter Collingbourne <peter at pcc.me.uk>
> wrote:
> 
> > 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
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >

-- 
Peter



More information about the llvm-commits mailing list