diff --git a/lld/test/wasm/reproduce.ll b/lld/test/wasm/reproduce.ll deleted file mode 100644 --- a/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 -} diff --git a/lld/test/wasm/reproduce.s b/lld/test/wasm/reproduce.s new file mode 100644 --- /dev/null +++ b/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 diff --git a/lld/wasm/Driver.cpp b/lld/wasm/Driver.cpp --- a/lld/wasm/Driver.cpp +++ b/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> errOrWriter = TarWriter::create(path, path::stem(path)); if (errOrWriter) {