diff --git a/lld/test/wasm/version.test b/lld/test/wasm/version.test new file mode 100644 index 0000000000000..54a8097655255 --- /dev/null +++ b/lld/test/wasm/version.test @@ -0,0 +1,12 @@ +## Copied from lld/test/ELF/version.test + +## --version skips input file processing. +# RUN: wasm-ld --version %t/not-exist 2>&1 | FileCheck %s + +## -v/-V don't skip processing if there is any input. +# RUN: wasm-ld -v 2>&1 | FileCheck %s +# RUN: not wasm-ld -v %t/not-exist 2>&1 | FileCheck %s +# RUN: wasm-ld -V 2>&1 | FileCheck %s +# RUN: not wasm-ld -V %t/not-exist 2>&1 | FileCheck %s + +# CHECK: LLD {{.+}} diff --git a/lld/wasm/Driver.cpp b/lld/wasm/Driver.cpp index 289c1217ff5ea..9a27fc90457f0 100644 --- a/lld/wasm/Driver.cpp +++ b/lld/wasm/Driver.cpp @@ -1218,11 +1218,9 @@ void LinkerDriver::linkerMain(ArrayRef argsArr) { return; } - // Handle --version - if (args.hasArg(OPT_version) || args.hasArg(OPT_v)) { + // Handle -v or -version. + if (args.hasArg(OPT_v) || args.hasArg(OPT_version)) lld::outs() << getLLDVersion() << "\n"; - return; - } // Handle --reproduce if (const char *path = getReproduceOption(args)) { @@ -1248,6 +1246,13 @@ void LinkerDriver::linkerMain(ArrayRef argsArr) { readConfigs(args); setConfigs(); + // The behavior of -v or --version is a bit strange, but this is + // needed for compatibility with GNU linkers. + if (args.hasArg(OPT_v) && !args.hasArg(OPT_INPUT)) + return; + if (args.hasArg(OPT_version)) + return; + createFiles(args); if (errorCount()) return; diff --git a/lld/wasm/Options.td b/lld/wasm/Options.td index c5febd145a54f..cff29e709a1a0 100644 --- a/lld/wasm/Options.td +++ b/lld/wasm/Options.td @@ -288,6 +288,7 @@ def: Flag<["-"], "S">, Alias, HelpText<"Alias for --strip-debug">; def: Flag<["-"], "t">, Alias, HelpText<"Alias for --trace">; def: JoinedOrSeparate<["-"], "y">, Alias, HelpText<"Alias for --trace-symbol">; def: JoinedOrSeparate<["-"], "u">, Alias; +def: Flag<["-"], "V">, Alias, HelpText<"Alias for -v">; // LTO-related options. def lto_O: JJ<"lto-O">, MetaVarName<"">,