1
1
mirror of https://github.com/rui314/mold.git synced 2024-09-22 10:27:48 +03:00

Do not exit immediately on --version

This commit is contained in:
Rui Ueyama 2021-05-23 18:22:20 +09:00
parent 3fab4ce3d2
commit 8dd0accc89
2 changed files with 19 additions and 5 deletions

View File

@ -364,15 +364,11 @@ void parse_nonpositional_args(Context<E> &ctx,
args = args.subspan(1); args = args.subspan(1);
ctx.arg.thread_count = get_default_thread_count(); ctx.arg.thread_count = get_default_thread_count();
bool version_shown = false;
while (!args.empty()) { while (!args.empty()) {
std::string_view arg; std::string_view arg;
if (read_flag(args, "v") || read_flag(args, "version")) {
SyncOut(ctx) << get_version_string();
exit(0);
}
if (read_flag(args, "help")) { if (read_flag(args, "help")) {
SyncOut(ctx) << "Usage: " << ctx.cmdline_args[0] SyncOut(ctx) << "Usage: " << ctx.cmdline_args[0]
<< " [options] file...\n" << helpmsg; << " [options] file...\n" << helpmsg;
@ -386,9 +382,13 @@ void parse_nonpositional_args(Context<E> &ctx,
ctx.arg.dynamic_linker = arg; ctx.arg.dynamic_linker = arg;
} else if (read_arg(ctx, args, arg, "no-dynamic-linker")) { } else if (read_arg(ctx, args, arg, "no-dynamic-linker")) {
ctx.arg.dynamic_linker = ""; ctx.arg.dynamic_linker = "";
} else if (read_flag(args, "v") || read_flag(args, "version")) {
SyncOut(ctx) << get_version_string();
version_shown = true;
} else if (read_flag(args, "V")) { } else if (read_flag(args, "V")) {
SyncOut(ctx) << get_version_string() SyncOut(ctx) << get_version_string()
<< "\n Supported emulations:\n elf_x86_64\n elf_i386"; << "\n Supported emulations:\n elf_x86_64\n elf_i386";
version_shown = true;
} else if (read_flag(args, "export-dynamic") || read_flag(args, "E")) { } else if (read_flag(args, "export-dynamic") || read_flag(args, "E")) {
ctx.arg.export_dynamic = true; ctx.arg.export_dynamic = true;
} else if (read_flag(args, "no-export-dynamic")) { } else if (read_flag(args, "no-export-dynamic")) {
@ -693,6 +693,9 @@ void parse_nonpositional_args(Context<E> &ctx,
if (ctx.arg.output.empty()) if (ctx.arg.output.empty())
ctx.arg.output = "a.out"; ctx.arg.output = "a.out";
if (version_shown && remaining.empty())
exit(0);
} }
#define INSTANTIATE(E) \ #define INSTANTIATE(E) \

View File

@ -12,4 +12,15 @@ mkdir -p $t
../mold -V | grep -q elf_x86_64 ../mold -V | grep -q elf_x86_64
../mold -V | grep -q elf_i386 ../mold -V | grep -q elf_i386
cat <<EOF | clang -c -xc -o $t/a.o -
#include <stdio.h>
int main() {
printf("Hello world\n");
}
EOF
clang -fuse-ld=`pwd`/../mold -Wl,--version -o $t/exe $t/a.o | grep -q mold
$t/exe | grep -q 'Hello world'
echo OK echo OK