aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2010-01-07 18:16:24 +0000
committerIan Lance Taylor <ian@airs.com>2010-01-07 18:16:24 +0000
commitffeef7dfa55fe9608a46a991ce5413fe0db844f4 (patch)
tree468519c017f56d376bad9da8498abb1288aa11cd
parentb7cd1872af07e11e50368d40505ef8b57e192bcc (diff)
downloadgdb-ffeef7dfa55fe9608a46a991ce5413fe0db844f4.zip
gdb-ffeef7dfa55fe9608a46a991ce5413fe0db844f4.tar.gz
gdb-ffeef7dfa55fe9608a46a991ce5413fe0db844f4.tar.bz2
* options.h (class General_options): Add -z text and -z textoff.
* layout.cc (Layout::finish_dynamic_section): Implement -z text.
-rw-r--r--gold/ChangeLog5
-rw-r--r--gold/layout.cc6
-rw-r--r--gold/options.h6
3 files changed, 15 insertions, 2 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 65c0c90..43b5c08 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,8 @@
+2010-01-07 Ian Lance Taylor <iant@google.com>
+
+ * 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 <tmsriram@google.com>
* gc.h (Garbage_collection::Cident_section_map): New typedef.
diff --git a/gold/layout.cc b/gold/layout.cc
index f427af5..9f51e82 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 110b91f..de1f07a 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;