From 7be8330a59e4c55791360237af8cf2b070d0f45c Mon Sep 17 00:00:00 2001 From: Chris Demetriou Date: Fri, 12 Sep 2008 05:42:29 +0000 Subject: [PATCH] 2008-09-11 Chris Demetriou * options.h (origin): New -z option. * layout.cc (Layout:finish_dynamic_section): If "-z origin" is specified, set DF_ORIGIN in DT_FLAGS and set DF_1_ORIGIN in DT_FLAGS_1. --- gold/ChangeLog | 7 +++++++ gold/layout.cc | 4 ++++ gold/options.h | 3 +++ 3 files changed, 14 insertions(+) diff --git a/gold/ChangeLog b/gold/ChangeLog index 1df7d746391..8829e0a2535 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,10 @@ +2008-09-11 Chris Demetriou + + * options.h (origin): New -z option. + * layout.cc (Layout:finish_dynamic_section): If "-z origin" + is specified, set DF_ORIGIN in DT_FLAGS and set DF_1_ORIGIN + in DT_FLAGS_1. + 2008-09-05 Cary Coutant * fileread.cc (File_read::make_view): Add check for attempt to map diff --git a/gold/layout.cc b/gold/layout.cc index 99819d6cfcd..ec9654e0eef 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -2753,6 +2753,8 @@ Layout::finish_dynamic_section(const Input_objects* input_objects, } if (parameters->options().shared() && this->has_static_tls()) flags |= elfcpp::DF_STATIC_TLS; + if (parameters->options().origin()) + flags |= elfcpp::DF_ORIGIN; odyn->add_constant(elfcpp::DT_FLAGS, flags); flags = 0; @@ -2774,6 +2776,8 @@ Layout::finish_dynamic_section(const Input_objects* input_objects, flags &= ~(elfcpp::DF_1_INITFIRST | elfcpp::DF_1_NODELETE | elfcpp::DF_1_NOOPEN); + if (parameters->options().origin()) + flags |= elfcpp::DF_1_ORIGIN; if (flags) odyn->add_constant(elfcpp::DT_FLAGS_1, flags); } diff --git a/gold/options.h b/gold/options.h index 46ad7618d09..8614ce6523e 100644 --- a/gold/options.h +++ b/gold/options.h @@ -837,6 +837,9 @@ 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(origin, options::DASH_Z, '\0', false, + N_("Mark DSO to indicate that needs immediate $ORIGIN " + "processing at runtime"), NULL); public: typedef options::Dir_list Dir_list;