summaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
Diffstat (limited to 'gold')
-rw-r--r--gold/ChangeLog11
-rw-r--r--gold/gold.cc8
-rw-r--r--gold/options.cc4
-rw-r--r--gold/options.h9
4 files changed, 28 insertions, 4 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 56a4da6426f..55073175a4c 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,16 @@
2009-06-23 Ian Lance Taylor <iant@google.com>
+ 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 <iant@google.com>
+
PR 10219
* layout.cc (Layout::Layout): Initialize have_stabstr_section_.
(Layout::make_output_section): Set have_stabstr_section_ if we see
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<const char*> 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_;