summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2011-09-26 23:42:06 +0000
committerCary Coutant <ccoutant@google.com>2011-09-26 23:42:06 +0000
commit403a3331af14b94c59eee2f2849deb592301083c (patch)
tree3a63c388e40383df07481d7282a51e926f19136a
parent139d7133b8c8fa9af2b78ccab99c15687d08be9a (diff)
downloadbinutils-gdb-403a3331af14b94c59eee2f2849deb592301083c.tar.gz
* gold/gold.cc (queue_initial_tasks): Move option checks ...
* gold/options.cc (General_options::finalize): ... to here. Disable some options; make others fatal.
-rw-r--r--gold/ChangeLog6
-rw-r--r--gold/gold.cc55
-rw-r--r--gold/options.cc31
3 files changed, 56 insertions, 36 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 6740d8290e0..f216595fbbe 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,11 @@
2011-09-26 Cary Coutant <ccoutant@google.com>
+ * gold/gold.cc (queue_initial_tasks): Move option checks ...
+ * gold/options.cc (General_options::finalize): ... to here. Disable
+ some options; make others fatal.
+
+2011-09-26 Cary Coutant <ccoutant@google.com>
+
gcc PR lto/47247
* plugin.cc (get_symbols_v2): New function.
(Plugin::load): Add LDPT_GET_SYMBOLS_V2.
diff --git a/gold/gold.cc b/gold/gold.cc
index 12f25b7c41a..693ff79b28b 100644
--- a/gold/gold.cc
+++ b/gold/gold.cc
@@ -197,46 +197,29 @@ queue_initial_tasks(const General_options& options,
// For incremental links, the base output file.
Incremental_binary* ibase = NULL;
- if (parameters->incremental())
- {
- if (options.relocatable())
- gold_error(_("incremental linking is incompatible with -r"));
- if (options.emit_relocs())
- gold_error(_("incremental linking is incompatible with --emit-relocs"));
- if (options.gc_sections())
- gold_error(_("incremental linking is incompatible with --gc-sections"));
- if (options.icf_enabled())
- gold_error(_("incremental linking is incompatible with --icf"));
- if (options.has_plugins())
- gold_error(_("incremental linking is incompatible with --plugin"));
- if (strcmp(options.compress_debug_sections(), "none") != 0)
- gold_error(_("incremental linking is incompatible with "
- "--compress-debug-sections"));
-
- if (parameters->incremental_update())
+ if (parameters->incremental_update())
+ {
+ Output_file* of = new Output_file(options.output_file_name());
+ if (of->open_base_file(options.incremental_base(), true))
{
- Output_file* of = new Output_file(options.output_file_name());
- if (of->open_base_file(options.incremental_base(), true))
- {
- ibase = open_incremental_binary(of);
- if (ibase != NULL
- && ibase->check_inputs(cmdline, layout->incremental_inputs()))
- ibase->init_layout(layout);
- else
- {
- delete ibase;
- ibase = NULL;
- of->close();
- }
- }
- if (ibase == NULL)
+ ibase = open_incremental_binary(of);
+ if (ibase != NULL
+ && ibase->check_inputs(cmdline, layout->incremental_inputs()))
+ ibase->init_layout(layout);
+ else
{
- if (set_parameters_incremental_full())
- gold_info(_("linking with --incremental-full"));
- else
- gold_fallback(_("restart link with --incremental-full"));
+ delete ibase;
+ ibase = NULL;
+ of->close();
}
}
+ if (ibase == NULL)
+ {
+ if (set_parameters_incremental_full())
+ gold_info(_("linking with --incremental-full"));
+ else
+ gold_fallback(_("restart link with --incremental-full"));
+ }
}
// Read the input files. We have to add the symbols to the symbol
diff --git a/gold/options.cc b/gold/options.cc
index be3264554a4..d91a8343f9f 100644
--- a/gold/options.cc
+++ b/gold/options.cc
@@ -1224,6 +1224,37 @@ General_options::finalize()
gold_fatal(_("Options --incremental-changed, --incremental-unchanged, "
"--incremental-unknown require the use of --incremental"));
+ // Check for options that are not compatible with incremental linking.
+ // Where an option can be disabled without seriously changing the semantics
+ // of the link, we turn the option off; otherwise, we issue a fatal error.
+
+ if (this->incremental_mode_ != INCREMENTAL_OFF)
+ {
+ if (this->relocatable())
+ gold_fatal(_("incremental linking is not compatible with -r"));
+ if (this->emit_relocs())
+ gold_fatal(_("incremental linking is not compatible with "
+ "--emit-relocs"));
+ if (this->has_plugins())
+ gold_fatal(_("incremental linking is not compatible with --plugin"));
+ if (this->gc_sections())
+ {
+ gold_warning(_("ignoring --gc-sections for an incremental link"));
+ this->set_gc_sections(false);
+ }
+ if (this->icf_enabled())
+ {
+ gold_warning(_("ignoring --icf for an incremental link"));
+ this->set_icf_status(ICF_NONE);
+ }
+ if (strcmp(this->compress_debug_sections(), "none") != 0)
+ {
+ gold_warning(_("ignoring --compress-debug-sections for an "
+ "incremental link"));
+ this->set_compress_debug_sections("none");
+ }
+ }
+
// FIXME: we can/should be doing a lot more sanity checking here.
}