[PATCH] D89290: [lld][WebAssembly] Don't GC library objects under `--whole-archive`

Sam Clegg via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 12 20:47:21 PDT 2020


sbc100 created this revision.
Herald added subscribers: llvm-commits, ecnelises, sunfish, jgravelle-google, dschuff.
Herald added a project: LLVM.
sbc100 requested review of this revision.
Herald added a subscriber: aheejin.

Followup on https://reviews.llvm.org/D85062 which ignores
entire library objects when no symbols are used within them.
This is shouldn't apply with `--whole-archive` since this
is specified to treat them like direct object inputs.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D89290

Files:
  lld/test/wasm/ctor-gc.test
  lld/wasm/Driver.cpp
  lld/wasm/InputFiles.cpp


Index: lld/wasm/InputFiles.cpp
===================================================================
--- lld/wasm/InputFiles.cpp
+++ lld/wasm/InputFiles.cpp
@@ -59,8 +59,7 @@
   return mbref;
 }
 
-InputFile *createObjectFile(MemoryBufferRef mb,
-                                       StringRef archiveName) {
+InputFile *createObjectFile(MemoryBufferRef mb, StringRef archiveName) {
   file_magic magic = identify_magic(mb.getBuffer());
   if (magic == file_magic::wasm_object) {
     std::unique_ptr<Binary> bin =
Index: lld/wasm/Driver.cpp
===================================================================
--- lld/wasm/Driver.cpp
+++ lld/wasm/Driver.cpp
@@ -252,8 +252,15 @@
 
     // Handle -whole-archive.
     if (inWholeArchive) {
-      for (MemoryBufferRef &m : getArchiveMembers(mbref))
-        files.push_back(createObjectFile(m, path));
+      for (MemoryBufferRef &m : getArchiveMembers(mbref)) {
+        auto object = createObjectFile(m, path);
+        // Mark object as live; object members are normally not
+        // live by default but -whole-archive is designed to treat
+        // them as such.
+        object->markLive();
+        files.push_back(object);
+      }
+
       return;
     }
 
Index: lld/test/wasm/ctor-gc.test
===================================================================
--- lld/test/wasm/ctor-gc.test
+++ lld/test/wasm/ctor-gc.test
@@ -7,6 +7,10 @@
 ; RUN: rm -f %t.lib.a
 ; RUN: llvm-ar rcs %t.lib.a %t.lib.o %t.ctor.o
 ; RUN: wasm-ld %t.start.o %t.lib.a -o %t.wasm
+; RUN: wasm-ld %t.start.o --whole-archive %t.lib.a -o %t2.wasm
 ; RUN: obj2yaml %t.wasm | FileCheck %s
+; RUN: obj2yaml %t2.wasm | FileCheck %s -check-prefix=WHOLEARCHIVE
 
 ; CHECK-NOT: __wasm_call_ctors
+
+; WHOLEARCHIVE: __wasm_call_ctors


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D89290.297751.patch
Type: text/x-patch
Size: 1761 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201013/0e016fe9/attachment.bin>


More information about the llvm-commits mailing list