2008-09-11 Chris Demetriou <cgd@google.com>
authorChris Demetriou <cgd@google.com>
Fri, 12 Sep 2008 05:42:29 +0000 (05:42 +0000)
committerChris Demetriou <cgd@google.com>
Fri, 12 Sep 2008 05:42:29 +0000 (05:42 +0000)
        * 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
gold/layout.cc
gold/options.h

index 1df7d74..8829e0a 100644 (file)
@@ -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
index 99819d6..ec9654e 100644 (file)
@@ -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);
 }
index 46ad761..8614ce6 100644 (file)
@@ -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;