From 0a94bffe1204200b0494a7b74be5a28733cfa628 Mon Sep 17 00:00:00 2001 From: George Rimar Date: Sat, 19 Nov 2016 18:14:24 +0000 Subject: [PATCH] [ELF] - Exit on --version call. GNU linkers disagree here. Though both -version and -v are mentioned in help to print the version information, GNU ld just normally exits, while gold can continue linking. We are compatible with ld.bfd here. This fixes PR31057. Differential revision: https://reviews.llvm.org/D26865 llvm-svn: 287448 --- lld/ELF/Driver.cpp | 9 ++++++++- lld/ELF/Options.td | 5 +++-- lld/test/ELF/driver.test | 4 +++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index e999fdb..a6361a8 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -290,8 +290,15 @@ void LinkerDriver::main(ArrayRef ArgsArr, bool CanExitEarly) { printHelp(ArgsArr[0]); return; } - if (Args.hasArg(OPT_version)) + + // GNU linkers disagree here. Though both -version and -v are mentioned + // in help to print the version information, GNU ld just normally exits, + // while gold can continue linking. We are compatible with ld.bfd here. + if (Args.hasArg(OPT_version) || Args.hasArg(OPT_v)) outs() << getLLDVersion() << "\n"; + if (Args.hasArg(OPT_version)) + return; + Config->ExitEarly = CanExitEarly && !Args.hasArg(OPT_full_shutdown); if (const char *Path = getReproduceOption(Args)) { diff --git a/lld/ELF/Options.td b/lld/ELF/Options.td index d3c5dd0..a4aa3fe 100644 --- a/lld/ELF/Options.td +++ b/lld/ELF/Options.td @@ -206,9 +206,11 @@ def unresolved_symbols: J<"unresolved-symbols=">, def rsp_quoting: J<"rsp-quoting=">, HelpText<"Quoting style for response files. Values supported: windows|posix">; +def v: Flag<["-"], "v">, HelpText<"Display the version number">; + def verbose: F<"verbose">, HelpText<"Verbose mode">; -def version: F<"version">, HelpText<"Display the version number">; +def version: F<"version">, HelpText<"Display the version number and exit">; def version_script: S<"version-script">, HelpText<"Read a version script">; @@ -266,7 +268,6 @@ def alias_Ttext: J<"Ttext=">, Alias; def alias_undefined_eq: J<"undefined=">, Alias; def alias_undefined_u: JoinedOrSeparate<["-"], "u">, Alias; def alias_version_V: Flag<["-"], "V">, Alias; -def alias_version_v: Flag<["-"], "v">, Alias; def alias_wrap_wrap: J<"wrap=">, Alias; // Our symbol resolution algorithm handles symbols in archive files differently diff --git a/lld/test/ELF/driver.test b/lld/test/ELF/driver.test index 804da98..80d19cb 100644 --- a/lld/test/ELF/driver.test +++ b/lld/test/ELF/driver.test @@ -16,9 +16,11 @@ # RUN: ld.lld --help 2>&1 | FileCheck -check-prefix=HELP %s # HELP: USAGE: -# RUN: not ld.lld --version 2>&1 | FileCheck -check-prefix=VERSION %s +# RUN: ld.lld --version 2>&1 | FileCheck -check-prefix=VERSION %s # VERSION: LLD +# RUN: not ld.lld -v 2>&1 | FileCheck -check-prefix=VERSION %s + ## Attempt to link DSO with -r # RUN: ld.lld -shared %t -o %t.so # RUN: not ld.lld -r %t.so %t -o %tfail 2>&1 | FileCheck -check-prefix=ERR %s -- 2.7.4