From ffeef7dfa55fe9608a46a991ce5413fe0db844f4 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 7 Jan 2010 18:16:24 +0000 Subject: [PATCH] * options.h (class General_options): Add -z text and -z textoff. * layout.cc (Layout::finish_dynamic_section): Implement -z text. --- gold/ChangeLog | 5 +++++ gold/layout.cc | 6 ++++-- gold/options.h | 6 ++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index 65c0c9035a2..43b5c08ee2e 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,8 @@ +2010-01-07 Ian Lance Taylor + + * options.h (class General_options): Add -z text and -z textoff. + * layout.cc (Layout::finish_dynamic_section): Implement -z text. + 2010-01-06 Sriraman Tallam * gc.h (Garbage_collection::Cident_section_map): New typedef. diff --git a/gold/layout.cc b/gold/layout.cc index f427af5079d..9f51e82acfa 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -3353,8 +3353,10 @@ Layout::finish_dynamic_section(const Input_objects* input_objects, odyn->add_constant(elfcpp::DT_TEXTREL, 0); flags |= elfcpp::DF_TEXTREL; - if (parameters->options().warn_shared_textrel() - && parameters->options().shared()) + if (parameters->options().text()) + gold_error(_("read-only segment has dynamic relocations")); + else if (parameters->options().warn_shared_textrel() + && parameters->options().shared()) gold_warning(_("shared library text segment is not shareable")); } if (parameters->options().shared() && this->has_static_tls()) diff --git a/gold/options.h b/gold/options.h index 110b91f8133..de1f07a43ff 100644 --- a/gold/options.h +++ b/gold/options.h @@ -1052,6 +1052,12 @@ class General_options DEFINE_bool(relro, options::DASH_Z, '\0', false, N_("Where possible mark variables read-only after relocation"), N_("Don't mark variables read-only after relocation")); + DEFINE_bool(text, options::DASH_Z, '\0', false, + N_("Do not permit relocations in read-only segments"), + NULL); + DEFINE_bool_alias(textoff, text, options::DASH_Z, '\0', + N_("Permit relocations in read-only segments (default)"), + NULL, true); public: typedef options::Dir_list Dir_list; -- 2.30.2