diff --git a/gold/ChangeLog b/gold/ChangeLog index 56a4da6426f..55073175a4c 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,14 @@ +2009-06-23 Ian Lance Taylor + + PR 10237 + * options.cc (General_options::parse_V): Set printed_version_. + (General_options::General_options): Initialize printed_version_. + * options.h (class General_options): Add printed_version_ field. + * gold.cc (queue_initial_tasks): If there are no input files, + don't give a fatal error if we printed the version information. + (queue_middle_tasks): If using -r with a shared object, give a + fatal error rather than an ordinary error. + 2009-06-23 Ian Lance Taylor PR 10219 diff --git a/gold/gold.cc b/gold/gold.cc index 93d03586c01..ae4b8b8629e 100644 --- a/gold/gold.cc +++ b/gold/gold.cc @@ -164,7 +164,11 @@ queue_initial_tasks(const General_options& options, Symbol_table* symtab, Layout* layout, Mapfile* mapfile) { if (cmdline.begin() == cmdline.end()) - gold_fatal(_("no input files")); + { + if (options.printed_version()) + gold_exit(true); + gold_fatal(_("no input files")); + } int thread_count = options.thread_count_initial(); if (thread_count == 0) @@ -364,7 +368,7 @@ queue_middle_tasks(const General_options& options, (*input_objects->dynobj_begin())->name().c_str()); } if (!doing_static_link && parameters->options().relocatable()) - gold_error(_("cannot mix -r with dynamic object %s"), + gold_fatal(_("cannot mix -r with dynamic object %s"), (*input_objects->dynobj_begin())->name().c_str()); if (!doing_static_link && options.oformat_enum() != General_options::OBJECT_FORMAT_ELF) diff --git a/gold/options.cc b/gold/options.cc index ef2aa7163f0..f09dccb9367 100644 --- a/gold/options.cc +++ b/gold/options.cc @@ -273,6 +273,7 @@ void General_options::parse_V(const char*, const char*, Command_line*) { gold::print_version(true); + this->printed_version_ = true; printf(_(" Supported targets:\n")); std::vector supported_names; gold::supported_target_names(&supported_names); @@ -708,7 +709,8 @@ namespace gold { General_options::General_options() - : execstack_status_(General_options::EXECSTACK_FROM_INPUT), static_(false), + : printed_version_(false), + execstack_status_(General_options::EXECSTACK_FROM_INPUT), static_(false), do_demangle_(false), plugins_(), incremental_disposition_(INCREMENTAL_CHECK), implicit_incremental_(false) { diff --git a/gold/options.h b/gold/options.h index aac0439c07d..deec2ba871e 100644 --- a/gold/options.h +++ b/gold/options.h @@ -946,6 +946,11 @@ class General_options // any problems. void finalize(); + // True if we printed the version information. + bool + printed_version() const + { return this->printed_version_; } + // The macro defines output() (based on --output), but that's a // generic name. Provide this alternative name, which is clearer. const char* @@ -1090,6 +1095,8 @@ class General_options void add_plugin_option(const char* opt); + // Whether we printed version information. + bool printed_version_; // Whether to mark the stack as executable. Execstack execstack_status_; // Whether to do a static link. @@ -1106,7 +1113,7 @@ class General_options // --incremental-unchanged or --incremental-unknown option. The // value may change as we proceed parsing the command line flags. Incremental_disposition incremental_disposition_; - // Wheater we have seen one of the options that require incremental + // Whether we have seen one of the options that require incremental // build (--incremental-changed, --incremental-unchanged or // --incremental-unknown) bool implicit_incremental_;