[lld] r331900 - [COFF] Allow specifying export forwarding in a def file

Martin Storsjo via llvm-commits llvm-commits at lists.llvm.org
Wed May 9 11:19:41 PDT 2018


Author: mstorsjo
Date: Wed May  9 11:19:41 2018
New Revision: 331900

URL: http://llvm.org/viewvc/llvm-project?rev=331900&view=rev
Log:
[COFF] Allow specifying export forwarding in a def file

Previously this was only supported when specified on the command line
or in directives.

Differential Revision: https://reviews.llvm.org/D46244

Modified:
    lld/trunk/COFF/Driver.cpp
    lld/trunk/test/COFF/export.test

Modified: lld/trunk/COFF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.cpp?rev=331900&r1=331899&r2=331900&view=diff
==============================================================================
--- lld/trunk/COFF/Driver.cpp (original)
+++ lld/trunk/COFF/Driver.cpp Wed May  9 11:19:41 2018
@@ -625,6 +625,16 @@ static void parseModuleDefs(StringRef Pa
 
   for (COFFShortExport E1 : M.Exports) {
     Export E2;
+    // In simple cases, only Name is set. Renamed exports are parsed
+    // and set as "ExtName = Name". If Name has the form "OtherDll.Func",
+    // it shouldn't be a normal exported function but a forward to another
+    // DLL instead. This is supported by both MS and GNU linkers.
+    if (E1.ExtName != E1.Name && StringRef(E1.Name).contains('.')) {
+      E2.Name = E1.ExtName;
+      E2.ForwardTo = E1.Name;
+      Config->Exports.push_back(E2);
+      continue;
+    }
     E2.Name = Saver.save(E1.Name);
     E2.ExtName = Saver.save(E1.ExtName);
     E2.Ordinal = E1.Ordinal;

Modified: lld/trunk/test/COFF/export.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/export.test?rev=331900&r1=331899&r2=331900&view=diff
==============================================================================
--- lld/trunk/test/COFF/export.test (original)
+++ lld/trunk/test/COFF/export.test Wed May  9 11:19:41 2018
@@ -86,6 +86,10 @@ SYMTAB: exportfn3 in export.test.tmp.DLL
 # RUN: lld-link /out:%t.dll /dll %t.obj /export:foo=kernel32.foobar
 # RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=FORWARDER %s
 
+# RUN: echo "EXPORTS foo=kernel32.foobar" > %t.def
+# RUN: lld-link /out:%t.dll /dll %t.obj /def:%t.def
+# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=FORWARDER %s
+
 FORWARDER: Export Table:
 FORWARDER:  DLL name: export.test.tmp.dll
 FORWARDER:  Ordinal base: 0




More information about the llvm-commits mailing list