[PATCH] D132361: [LLD] [COFF] Fix export directives in object files from -includeoptional

Martin Storsjö via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 23 01:55:34 PDT 2022


mstorsjo updated this revision to Diff 454747.
mstorsjo added a comment.

Move handling of the -includeoptional options into the same loop as export.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D132361/new/

https://reviews.llvm.org/D132361

Files:
  lld/COFF/Driver.cpp
  lld/test/COFF/includeoptional-export.s


Index: lld/test/COFF/includeoptional-export.s
===================================================================
--- /dev/null
+++ lld/test/COFF/includeoptional-export.s
@@ -0,0 +1,51 @@
+// REQUIRES: x86
+// RUN: split-file %s %t.dir
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-win32-gnu %t.dir/main.s -o %t.main.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-win32-gnu %t.dir/lib1.s -o %t.lib1.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-win32-gnu %t.dir/lib2.s -o %t.lib2.o
+
+// RUN: rm -f %t.lib.a
+// RUN: llvm-ar cru %t.lib.a %t.lib1.o %t.lib2.o
+// RUN: lld-link -dll -out:%t-1.dll -entry:entry %t.main.o %t.lib.a
+// RUN: lld-link -dll -out:%t-2.dll -entry:entry %t.main.o %t.lib.a -includeoptional:libfunc
+
+// RUN: llvm-readobj --coff-exports %t-1.dll | FileCheck --implicit-check-not=Name: %s --check-prefix=CHECK-DEFAULT
+// RUN: llvm-readobj --coff-exports %t-2.dll | FileCheck --implicit-check-not=Name: %s --check-prefix=CHECK-INCLUDEOPTIONAL
+
+// CHECK-DEFAULT: Name:
+// CHECK-DEFAULT: Name: myfunc
+
+// CHECK-INCLUDEOPTIONAL: Name:
+// CHECK-INCLUDEOPTIONAL: Name: libfunc
+// CHECK-INCLUDEOPTIONAL: Name: myfunc
+// CHECK-INCLUDEOPTIONAL: Name: otherlibfunc
+
+#--- main.s
+.global entry
+entry:
+  ret
+
+.global myfunc
+myfunc:
+  ret
+
+.section .drectve
+.ascii "-export:myfunc "
+
+#--- lib1.s
+.global libfunc
+libfunc:
+  call otherlibfunc
+  ret
+
+.section .drectve
+.ascii "-export:libfunc "
+
+#--- lib2.s
+.global otherlibfunc
+otherlibfunc:
+  ret
+
+.section .drectve
+.ascii "-export:otherlibfunc "
Index: lld/COFF/Driver.cpp
===================================================================
--- lld/COFF/Driver.cpp
+++ lld/COFF/Driver.cpp
@@ -2231,15 +2231,14 @@
     // Windows specific -- if __load_config_used can be resolved, resolve it.
     if (ctx.symtab.findUnderscore("_load_config_used"))
       addUndefined(mangle("_load_config_used"));
-  } while (run());
 
-  if (args.hasArg(OPT_include_optional)) {
-    // Handle /includeoptional
-    for (auto *arg : args.filtered(OPT_include_optional))
-      if (isa_and_nonnull<LazyArchive>(ctx.symtab.find(arg->getValue())))
-        addUndefined(arg->getValue());
-    while (run());
-  }
+    if (args.hasArg(OPT_include_optional)) {
+      // Handle /includeoptional
+      for (auto *arg : args.filtered(OPT_include_optional))
+        if (isa_and_nonnull<LazyArchive>(ctx.symtab.find(arg->getValue())))
+          addUndefined(arg->getValue());
+    }
+  } while (run());
 
   // Create wrapped symbols for -wrap option.
   std::vector<WrappedSymbol> wrapped = addWrappedSymbols(ctx, args);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D132361.454747.patch
Type: text/x-patch
Size: 2603 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220823/0d793753/attachment.bin>


More information about the llvm-commits mailing list