diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index b55f601906fc..474e6caa3e6f 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -164,6 +164,11 @@ void LinkerDriver::main(ArrayRef ArgsArr) { initSymbols(); opt::InputArgList Args = parseArgs(&Alloc, ArgsArr); + if (Args.hasArg(OPT_version)) { + printVersion(); + return; + } + readConfigs(Args); createFiles(Args); checkOptions(Args); diff --git a/lld/ELF/Driver.h b/lld/ELF/Driver.h index 52bf22ba539d..3f81534b5384 100644 --- a/lld/ELF/Driver.h +++ b/lld/ELF/Driver.h @@ -53,6 +53,8 @@ enum { #undef OPTION }; +void printVersion(); + std::string findFromSearchPaths(StringRef Path); std::string searchLibrary(StringRef Path); std::string buildSysrootedPath(llvm::StringRef Dir, llvm::StringRef File); diff --git a/lld/ELF/DriverUtils.cpp b/lld/ELF/DriverUtils.cpp index 336d85091525..cf7e7dd917c0 100644 --- a/lld/ELF/DriverUtils.cpp +++ b/lld/ELF/DriverUtils.cpp @@ -15,6 +15,7 @@ #include "Driver.h" #include "Error.h" +#include "lld/Config/Version.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/FileSystem.h" @@ -78,6 +79,13 @@ opt::InputArgList elf::parseArgs(llvm::BumpPtrAllocator *A, return Args; } +void elf::printVersion() { + outs() << "LLD " << getLLDVersion(); + std::string S = getLLDRepositoryVersion(); + if (!S.empty()) + outs() << " " << S << "\n"; +} + std::string elf::findFromSearchPaths(StringRef Path) { for (StringRef Dir : Config->SearchPaths) { std::string FullPath = buildSysrootedPath(Dir, Path); diff --git a/lld/ELF/Options.td b/lld/ELF/Options.td index 18c6fd9868f1..db2153066072 100644 --- a/lld/ELF/Options.td +++ b/lld/ELF/Options.td @@ -119,6 +119,9 @@ def undefined : Joined<["--"], "undefined=">, def verbose : Flag<["--"], "verbose">; +def version : Flag<["--", "-"], "version">, + HelpText<"Display the version number">; + def whole_archive : Flag<["--", "-"], "whole-archive">, HelpText<"Force load of all members in a static library">; diff --git a/lld/lib/Config/Version.cpp b/lld/lib/Config/Version.cpp index b64ccef12c7b..2f06d20899d2 100644 --- a/lld/lib/Config/Version.cpp +++ b/lld/lib/Config/Version.cpp @@ -13,8 +13,6 @@ #include "lld/Config/Version.h" #include "llvm/Support/raw_ostream.h" -#include -#include using namespace llvm; diff --git a/lld/test/ELF/driver.test b/lld/test/ELF/driver.test index 957235805f12..d9c293c40ca8 100644 --- a/lld/test/ELF/driver.test +++ b/lld/test/ELF/driver.test @@ -1,19 +1,21 @@ # REQUIRES: x86 # RUN: not ld.lld -unknown1 -unknown2 -m foo /no/such/file -lnosuchlib \ -# RUN: 2>&1 | FileCheck %s +# RUN: 2>&1 | FileCheck -check-prefix=UNKNOWN %s -# CHECK: warning: unknown argument: -unknown1 -# CHECK: warning: unknown argument: -unknown2 -# CHECK: unknown argument(s) found -# CHECK: Unknown emulation: foo -# CHECK: cannot open /no/such/file -# CHECK: Unable to find library -lnosuchlib +# UNKNOWN: warning: unknown argument: -unknown1 +# UNKNOWN: warning: unknown argument: -unknown2 +# UNKNOWN: unknown argument(s) found +# UNKNOWN: Unknown emulation: foo +# UNKNOWN: cannot open /no/such/file +# UNKNOWN: Unable to find library -lnosuchlib # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t -# RUN: not ld.lld %t -o /no/such/file 2>&1 | FileCheck -check-prefix=CHECK2 %s +# RUN: not ld.lld %t -o /no/such/file 2>&1 | FileCheck -check-prefix=MISSING %s +# MISSING: failed to open /no/such/file -# CHECK2: failed to open /no/such/file +# RUN: ld.lld --version 2>&1 | FileCheck -check-prefix=VERSION %s +# VERSION: LLD .globl _start _start: