mirror of
https://github.com/intel/llvm.git
synced 2026-01-20 10:18:14 +08:00
[lld][WebAssembly] Add support for LLD_REPRODUCE
This is feature of the ELF and COFF linker that we were missing until now. Differential Revision: https://reviews.llvm.org/D137377
This commit is contained in:
@@ -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
|
||||
}
|
||||
32
lld/test/wasm/reproduce.s
Normal file
32
lld/test/wasm/reproduce.s
Normal file
@@ -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
|
||||
@@ -618,6 +618,12 @@ static void checkOptions(opt::InputArgList &args) {
|
||||
}
|
||||
}
|
||||
|
||||
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 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
|
||||
}
|
||||
|
||||
// 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) {
|
||||
|
||||
Reference in New Issue
Block a user