From 6457197210144f50a696097c0d308d81d46d5510 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 16 Oct 2015 08:04:58 -0700 Subject: [PATCH] Don't ignore "-m emulation" command line option Gold shouldn't ignore "-m emulation" command line option, which may lead to incorrect output. PR gold/19119 * options.h (General_options): Remove "obsolete" from -m. * parameters.cc (set_parameters_target): Check if input target is compatible with output emulation set by "-m emulation". --- gold/ChangeLog | 7 +++++++ gold/options.h | 2 +- gold/parameters.cc | 10 ++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index ff11c8890a0..1f619f73efb 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,10 @@ +2015-10-16 H.J. Lu + + PR gold/19119 + * options.h (General_options): Remove "obsolete" from -m. + * parameters.cc (set_parameters_target): Check if input target + is compatible with output emulation set by "-m emulation". + 2015-10-13 H.J. Lu PR gold/19118 diff --git a/gold/options.h b/gold/options.h index 641efee3a37..4d6522572c7 100644 --- a/gold/options.h +++ b/gold/options.h @@ -934,7 +934,7 @@ class General_options N_("OFFSET")); DEFINE_string(m, options::EXACTLY_ONE_DASH, 'm', "", - N_("Set GNU linker emulation; obsolete"), N_("EMULATION")); + N_("Set GNU linker emulation"), N_("EMULATION")); DEFINE_bool(mmap_output_file, options::TWO_DASHES, '\0', true, N_("Map the output file for writing (default)."), diff --git a/gold/parameters.cc b/gold/parameters.cc index 5ed19122512..15df42afc9b 100644 --- a/gold/parameters.cc +++ b/gold/parameters.cc @@ -297,6 +297,16 @@ set_parameters_options(const General_options* options) void set_parameters_target(Target* target) { + if (parameters->options_valid() && parameters->options().user_set_m()) + { + const char* emulation = parameters->options().m(); + Target* output = select_target_by_emulation(emulation); + if (!output) + gold_error(_("unrecognised output emulation: %s"), emulation); + else if (output != target) + gold_error(_("input file is incompatible with %s output emulation"), + emulation); + } static_parameters.set_target(target); } -- 2.30.2