[PATCH] COFF: Implement DLL symbol exports for bitcode files.

Rui Ueyama ruiu at google.com
Wed Jun 17 22:19:41 PDT 2015


LGTM

On Wed, Jun 17, 2015 at 10:15 PM, Peter Collingbourne <peter at pcc.me.uk>
wrote:

> Hi ruiu,
>
> http://reviews.llvm.org/D10530
>
> Files:
>   COFF/InputFiles.cpp
>   test/COFF/Inputs/export.ll
>   test/COFF/dll.test
>
> Index: COFF/InputFiles.cpp
> ===================================================================
> --- COFF/InputFiles.cpp
> +++ 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: test/COFF/Inputs/export.ll
> ===================================================================
> --- /dev/null
> +++ 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: test/COFF/dll.test
> ===================================================================
> --- test/COFF/dll.test
> +++ 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
>
> EMAIL PREFERENCES
>   http://reviews.llvm.org/settings/panel/emailpreferences/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150617/d3a2ba0f/attachment.html>


More information about the llvm-commits mailing list