[lld] r221303 - [PECOFF] Fix symbols in module-definition file.

Rui Ueyama ruiu at google.com
Tue Nov 4 14:09:13 PST 2014


Author: ruiu
Date: Tue Nov  4 16:09:13 2014
New Revision: 221303

URL: http://llvm.org/viewvc/llvm-project?rev=221303&view=rev
Log:
[PECOFF] Fix symbols in module-definition file.

Modified:
    lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp
    lld/trunk/test/pecoff/exportlib2.test

Modified: lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp?rev=221303&r1=221302&r2=221303&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp Tue Nov  4 16:09:13 2014
@@ -30,7 +30,15 @@ createModuleDefinitionFile(const PECOFFL
      << "EXPORTS\n";
 
   for (const PECOFFLinkingContext::ExportDesc &desc : ctx.getDllExports()) {
-    os << "  " << desc.getExternalName();
+    // Symbol names in a module-definition file will be mangled by lib.exe,
+    // so we need to demangle them before writing to a .def file.
+    os << "  ";
+    if (!desc.externalName.empty()) {
+      os << desc.externalName;
+    } else {
+      os << ctx.undecorateSymbol(desc.name);
+    }
+
     if (!desc.isPrivate)
       os << " @" << desc.ordinal;
     if (desc.noname)

Modified: lld/trunk/test/pecoff/exportlib2.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/exportlib2.test?rev=221303&r1=221302&r2=221303&view=diff
==============================================================================
--- lld/trunk/test/pecoff/exportlib2.test (original)
+++ lld/trunk/test/pecoff/exportlib2.test Tue Nov  4 16:09:13 2014
@@ -2,10 +2,20 @@
 #
 # RUN: lld -flavor link /out:%t.dll /dll /entry:init \
 # RUN:   /export:exportfn1 /export:exportfn2 /lldmoduledeffile:%t.def -- %t.obj
-# RUN: FileCheck %s < %t.def
+# RUN: FileCheck -check-prefix=CHECK1 %s < %t.def
 
-CHECK: LIBRARY "exportlib2.test.tmp.dll"
-CHECK: EXPORTS
-CHECK:   exportfn1 @1
-CHECK:   exportfn2 @2
-CHECK:   exportfn3 at 256 @3
+CHECK1: LIBRARY "exportlib2.test.tmp.dll"
+CHECK1: EXPORTS
+CHECK1:   exportfn1 @1
+CHECK1:   exportfn2 @2
+CHECK1:   exportfn3 at 256 @3
+
+# RUN: lld -flavor link /out:%t.dll /dll /entry:init \
+# RUN:   /def:%p/Inputs/exports.def /lldmoduledeffile:%t.def -- %t.obj
+# RUN: FileCheck -check-prefix=CHECK2 %s < %t.def
+
+CHECK2: LIBRARY "exportlib2.test.tmp.dll"
+CHECK2: EXPORTS
+CHECK2:   exportfn1 @5
+CHECK2:   exportfn2 @6
+CHECK2:   exportfn3 at 256 @7





More information about the llvm-commits mailing list