[lld] r218433 - [PECOFF] Fix module definition file output

Rui Ueyama ruiu at google.com
Wed Sep 24 17:52:38 PDT 2014


Author: ruiu
Date: Wed Sep 24 19:52:38 2014
New Revision: 218433

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

Previously we emit two or more identical definitions for an
exported symbol if the same /export option is given more than
once. This patch fixes that bug.

Modified:
    lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp
    lld/trunk/test/pecoff/export.test

Modified: lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp?rev=218433&r1=218432&r2=218433&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp Wed Sep 24 19:52:38 2014
@@ -266,16 +266,12 @@ void PECOFFLinkingContext::addDllExport(
   // Scan the vector to look for existing entry. It's not very fast,
   // but because the number of exported symbol is usually not that
   // much, it should be okay.
-  ExportDesc *existing = nullptr;
   for (ExportDesc &e : _dllExports) {
-    if (e.name == desc.name) {
-      existing = &e;
-      break;
-    }
-  }
-  if (existing && !sameExportDesc(*existing, desc)) {
-    llvm::errs() << "Export symbol '" << desc.name
-                 << "' specified more than once.\n";
+    if (e.name != desc.name)
+      continue;
+    if (!sameExportDesc(e, desc))
+      llvm::errs() << "Export symbol '" << desc.name
+                   << "' specified more than once.\n";
     return;
   }
   _dllExports.push_back(desc);

Modified: lld/trunk/test/pecoff/export.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/export.test?rev=218433&r1=218432&r2=218433&view=diff
==============================================================================
--- lld/trunk/test/pecoff/export.test (original)
+++ lld/trunk/test/pecoff/export.test Wed Sep 24 19:52:38 2014
@@ -59,3 +59,13 @@ CHECK6:      Export Table:
 CHECK6:      DLL name: export.test.tmp6.dll
 CHECK6:       Ordinal      RVA  Name
 CHECK6-NEXT:        1   0x2010  exportfn8
+
+# RUN: lld -flavor link /out:%t6.dll /dll /entry:init \
+# RUN:   /export:exportfn8 /export:exportfn8 -- %t.obj
+# RUN: llvm-objdump -p %t6.dll | FileCheck -check-prefix=DUP %s
+
+DUP:      Export Table:
+DUP:      DLL name: export.test.tmp6.dll
+DUP:       Ordinal      RVA  Name
+DUP:            1   0x2010  exportfn8
+DUP-NOT:        1   0x2010  exportfn8





More information about the llvm-commits mailing list