diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 86fd46b780d9..866656b1b1e8 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -248,7 +248,7 @@ void LinkerDriver::main(ArrayRef ArgsArr) { return; } if (Args.hasArg(OPT_version)) { - printVersion(); + outs() << getVersionString(); return; } @@ -256,8 +256,10 @@ void LinkerDriver::main(ArrayRef ArgsArr) { // 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); diff --git a/lld/ELF/Driver.h b/lld/ELF/Driver.h index 00f8e05601a8..6b9b9bb208e5 100644 --- a/lld/ELF/Driver.h +++ b/lld/ELF/Driver.h @@ -95,7 +95,7 @@ private: }; void printHelp(const char *Argv0); -void printVersion(); +std::string getVersionString(); std::vector parseHexstring(StringRef S); std::string createResponseFile(const llvm::opt::InputArgList &Args); diff --git a/lld/ELF/DriverUtils.cpp b/lld/ELF/DriverUtils.cpp index b4c41580b47a..4c3bd813c2bd 100644 --- a/lld/ELF/DriverUtils.cpp +++ b/lld/ELF/DriverUtils.cpp @@ -80,12 +80,12 @@ void elf::printHelp(const char *Argv0) { 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. diff --git a/lld/test/ELF/reproduce.s b/lld/test/ELF/reproduce.s index 7a33168dbd81..ff21ded39575 100644 --- a/lld/test/ELF/reproduce.s +++ b/lld/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