Index: lld/trunk/ELF/Driver.h =================================================================== --- lld/trunk/ELF/Driver.h +++ lld/trunk/ELF/Driver.h @@ -95,7 +95,7 @@ }; void printHelp(const char *Argv0); -void printVersion(); +std::string getVersionString(); std::vector parseHexstring(StringRef S); std::string createResponseFile(const llvm::opt::InputArgList &Args); Index: lld/trunk/ELF/Driver.cpp =================================================================== --- lld/trunk/ELF/Driver.cpp +++ lld/trunk/ELF/Driver.cpp @@ -248,7 +248,7 @@ return; } if (Args.hasArg(OPT_version)) { - printVersion(); + outs() << getVersionString(); return; } @@ -256,8 +256,10 @@ // Note that --reproduce is a debug option so you can ignore it // if you are trying to understand the whole picture of the code. Cpio.reset(CpioFile::create(Arg->getValue())); - if (Cpio) + if (Cpio) { Cpio->append("response.txt", createResponseFile(Args)); + Cpio->append("version.txt", getVersionString()); + } } readConfigs(Args); Index: lld/trunk/ELF/DriverUtils.cpp =================================================================== --- lld/trunk/ELF/DriverUtils.cpp +++ lld/trunk/ELF/DriverUtils.cpp @@ -80,12 +80,12 @@ Table.PrintHelp(outs(), Argv0, "lld", false); } -void elf::printVersion() { - outs() << "LLD " << getLLDVersion(); - std::string S = getLLDRepositoryVersion(); - if (!S.empty()) - outs() << " " << S; - outs() << "\n"; +std::string elf::getVersionString() { + std::string Version = getLLDVersion(); + std::string Repo = getLLDRepositoryVersion(); + if (Repo.empty()) + return "LLD " + Version + "\n"; + return "LLD " + Version + " " + Repo + "\n"; } // Converts a hex string (e.g. "0x123456") to a vector. Index: lld/trunk/test/ELF/reproduce.s =================================================================== --- lld/trunk/test/ELF/reproduce.s +++ lld/trunk/test/ELF/reproduce.s @@ -19,6 +19,9 @@ # RSP-NEXT: -shared # RSP-NEXT: --as-needed +# RUN: FileCheck %s --check-prefix=VERSION < repro/version.txt +# VERSION: LLD + # RUN: mkdir -p %t.dir/build2/a/b/c # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.dir/build2/foo.o # RUN: cd %t.dir/build2/a/b/c @@ -50,6 +53,7 @@ # RUN: cpio -t < repro2.cpio | FileCheck %s # CHECK: repro2/response.txt +# CHECK-NEXT: repro2/version.txt # CHECK-NEXT: repro2/{{.*}}/dyn # CHECK-NEXT: repro2/{{.*}}/ver # CHECK-NEXT: repro2/{{.*}}/foo bar