[PATCH] D137377: [lld][WebAssembly] Add support for LLD_REPRODUCE

Sam Clegg via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 3 16:14:58 PDT 2022


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

This is feature of the ELF and COFF linker that we were missing until
now.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D137377

Files:
  lld/test/wasm/reproduce.ll
  lld/test/wasm/reproduce.s
  lld/wasm/Driver.cpp


Index: lld/wasm/Driver.cpp
===================================================================
--- lld/wasm/Driver.cpp
+++ lld/wasm/Driver.cpp
@@ -618,6 +618,12 @@
   }
 }
 
+static const char *getReproduceOption(opt::InputArgList &args) {
+  if (auto *arg = args.getLastArg(OPT_reproduce))
+    return arg->getValue();
+  return getenv("LLD_REPRODUCE");
+}
+
 // Force Sym to be entered in the output. Used for -u or equivalent.
 static Symbol *handleUndefined(StringRef name) {
   Symbol *sym = symtab->find(name);
@@ -955,8 +961,7 @@
   }
 
   // Handle --reproduce
-  if (auto *arg = args.getLastArg(OPT_reproduce)) {
-    StringRef path = arg->getValue();
+  if (const char *path = getReproduceOption(args)) {
     Expected<std::unique_ptr<TarWriter>> errOrWriter =
         TarWriter::create(path, path::stem(path));
     if (errOrWriter) {
Index: lld/test/wasm/reproduce.s
===================================================================
--- /dev/null
+++ lld/test/wasm/reproduce.s
@@ -0,0 +1,32 @@
+# REQUIRES: shell
+# RUN: rm -rf %t.dir
+# RUN: mkdir -p %t.dir
+# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.dir/foo.o %s
+# RUN: wasm-ld --reproduce=%t.dir/repro.tar -o %t.dir/out.wasm %t.dir/foo.o
+# RUN: env LLD_REPRODUCE=%t.dir/repro2.tar wasm-ld -o %t.dir/out.wasm %t.dir/foo.o
+
+# RUN: cd %t.dir
+# RUN: tar tf repro.tar | FileCheck --check-prefix=TAR %s
+# RUN: tar tf repro2.tar | FileCheck --check-prefix=TAR2 %s
+
+# TAR: repro/response.txt
+# TAR: repro/version.txt
+# TAR: repro/{{.*}}/foo.o
+
+# TAR2: repro2/response.txt
+# TAR2: repro2/version.txt
+# TAR2: repro2/{{.*}}/foo.o
+
+# RUN: tar xf repro.tar
+# RUN: FileCheck --check-prefix=RSP %s < repro/response.txt
+
+# RSP: -o {{.*}}out.wasm
+# RSP: {{.*}}/foo.o
+
+# RUN: FileCheck %s --check-prefix=VERSION < repro/version.txt
+# VERSION: LLD
+
+.globl  _start
+_start:
+  .functype _start () -> ()
+  end_function
Index: lld/test/wasm/reproduce.ll
===================================================================
--- lld/test/wasm/reproduce.ll
+++ /dev/null
@@ -1,27 +0,0 @@
-; REQUIRES: shell
-; RUN: rm -rf %t.dir
-; RUN: mkdir -p %t.dir
-; RUN: llc -filetype=obj %s -o %t.dir/foo.o
-; RUN: wasm-ld --reproduce=%t.dir/repro.tar -o %t.dir/out.wasm %t.dir/foo.o
-
-; RUN: cd %t.dir
-; RUN: tar tf repro.tar | FileCheck --check-prefix=TAR %s
-
-; TAR: repro/response.txt
-; TAR: repro/version.txt
-; TAR: repro/{{.*}}/foo.o
-
-; RUN: tar xf repro.tar
-; RUN: FileCheck --check-prefix=RSP %s < repro/response.txt
-
-; RSP: -o {{.*}}out.wasm
-; RSP: {{.*}}/foo.o
-
-; RUN: FileCheck %s --check-prefix=VERSION < repro/version.txt
-; VERSION: LLD
-
-target triple = "wasm32-unknown-unknown"
-
-define void @_start() {
-  ret void
-}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D137377.473075.patch
Type: text/x-patch
Size: 2733 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221103/a57ca644/attachment.bin>


More information about the llvm-commits mailing list