From 3c44d595be1e6c7c453be1a9cc0221d5e7e380ff Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Thu, 12 Sep 2019 11:44:13 +0000 Subject: [PATCH] lld-link: Make /linkrepro: take a filename, not a directory. This makes lld-link behave like ld.lld. I don't see a reason for the two drivers to have different behavior here. While here, also make lld-link add a version.txt to the tar, like ld.lld does. Differential Revision: https://reviews.llvm.org/D67461 llvm-svn: 371729 --- lld/COFF/Driver.cpp | 12 +++++------- lld/docs/ReleaseNotes.rst | 3 +++ lld/test/COFF/linkrepro-res.test | 2 +- lld/test/COFF/linkrepro.test | 6 +++--- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index aaf0367..882313a1 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -50,7 +50,7 @@ using namespace llvm; using namespace llvm::object; using namespace llvm::COFF; -using llvm::sys::Process; +using namespace llvm::sys; namespace lld { namespace coff { @@ -1138,17 +1138,15 @@ void LinkerDriver::link(ArrayRef argsArr) { config->mingw = args.hasArg(OPT_lldmingw); if (auto *arg = args.getLastArg(OPT_linkrepro)) { - SmallString<64> path = StringRef(arg->getValue()); - sys::path::append(path, "repro.tar"); + const char *path = arg->getValue(); Expected> errOrWriter = - TarWriter::create(path, "repro"); - + TarWriter::create(path, path::stem(path)); if (errOrWriter) { tar = std::move(*errOrWriter); + tar->append("version.txt", getLLDVersion() + "\n"); } else { - error("/linkrepro: failed to open " + path + ": " + - toString(errOrWriter.takeError())); + error("/linkrepro: " + toString(errOrWriter.takeError())); } } diff --git a/lld/docs/ReleaseNotes.rst b/lld/docs/ReleaseNotes.rst index 8cc7065..e63f75be 100644 --- a/lld/docs/ReleaseNotes.rst +++ b/lld/docs/ReleaseNotes.rst @@ -29,6 +29,9 @@ ELF Improvements COFF Improvements ----------------- +* /linkrepro: now takes the filename of the tar archive it writes, instead + of the name of a directory that a file called "repro.tar" is created in, + matching the behavior of ELF lld. * ... MinGW Improvements diff --git a/lld/test/COFF/linkrepro-res.test b/lld/test/COFF/linkrepro-res.test index cf0aa16..aac614f 100644 --- a/lld/test/COFF/linkrepro-res.test +++ b/lld/test/COFF/linkrepro-res.test @@ -4,7 +4,7 @@ # RUN: mkdir -p %t.dir/build # RUN: cd %t.dir/build # RUN: lld-link %p/Inputs/resource.res /subsystem:console /machine:x64 \ -# RUN: /entry:__ImageBase /linkrepro:. /out:%t.exe +# RUN: /entry:__ImageBase /linkrepro:repro.tar /out:%t.exe # RUN: tar xf repro.tar # RUN: diff %p/Inputs/resource.res repro/%:p/Inputs/resource.res # RUN: FileCheck %s --check-prefix=RSP < repro/response.txt diff --git a/lld/test/COFF/linkrepro.test b/lld/test/COFF/linkrepro.test index 8f42234..4bb5e59 100644 --- a/lld/test/COFF/linkrepro.test +++ b/lld/test/COFF/linkrepro.test @@ -6,7 +6,7 @@ # RUN: cd %t.dir/build1 # RUN: lld-link %t.obj %p/Inputs/std32.lib /subsystem:console \ -# RUN: /entry:main@0 /linkrepro:. /out:%t.exe +# RUN: /entry:main@0 /linkrepro:repro.tar /out:%t.exe # RUN: tar xf repro.tar # RUN: diff %t.obj repro/%:t.obj # RUN: diff %p/Inputs/std32.lib repro/%:p/Inputs/std32.lib @@ -14,7 +14,7 @@ # RUN: cd %t.dir/build2 # RUN: lld-link %t.obj /libpath:%p/Inputs /defaultlib:std32 /subsystem:console \ -# RUN: /entry:main@0 /linkrepro:. /out:%t.exe +# RUN: /entry:main@0 /linkrepro:repro.tar /out:%t.exe # RUN: tar xf repro.tar # RUN: diff %t.obj repro/%:t.obj # RUN: diff %p/Inputs/std32.lib repro/%:p/Inputs/std32.lib @@ -22,7 +22,7 @@ # RUN: cd %t.dir/build3 # RUN: env LIB=%p/Inputs lld-link %t.obj /defaultlib:std32 /subsystem:console \ -# RUN: /entry:main@0 /linkrepro:. /out:%t.exe +# RUN: /entry:main@0 /linkrepro:repro.tar /out:%t.exe # RUN: tar xf repro.tar # RUN: diff %t.obj repro/%:t.obj # RUN: diff %p/Inputs/std32.lib repro/%:p/Inputs/std32.lib -- 2.7.4