diff options
Diffstat (limited to 'gold')
-rw-r--r-- | gold/ChangeLog | 7 | ||||
-rw-r--r-- | gold/layout.cc | 4 | ||||
-rw-r--r-- | gold/options.h | 3 |
3 files changed, 14 insertions, 0 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 1df7d74..8829e0a 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,10 @@ +2008-09-11 Chris Demetriou <cgd@google.com> + + * 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 <ccoutant@google.com> * fileread.cc (File_read::make_view): Add check for attempt to map diff --git a/gold/layout.cc b/gold/layout.cc index 99819d6..ec9654e 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 46ad761..8614ce6 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; |