]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Bring over from mainline:
authorIan Lance Taylor <ian@airs.com>
Wed, 13 Jan 2010 16:19:03 +0000 (16:19 +0000)
committerIan Lance Taylor <ian@airs.com>
Wed, 13 Jan 2010 16:19:03 +0000 (16:19 +0000)
2010-01-04  Ian Lance Taylor  <iant@google.com>

PR 10980
* options.h (class General_options): Add --add-needed and
--copy-dt-needed-entries.  Tweak --as-needed help entry.
* object.cc (Input_objects::check_dynamic_dependencies): Give an
error if --copy-dt-needed-entries aka --add-needed is used and
would cause a change in behaviour.

gold/ChangeLog
gold/object.cc
gold/options.h

index e3f226365e3911cac8fcc7bb146294e94a105ac2..a6d50414fbf907e321d87f953922cccd1feb0d88 100644 (file)
@@ -1,3 +1,15 @@
+2010-01-13  Ian Lance Taylor  <iant@google.com>
+
+       Bring over from mainline:
+       2010-01-04  Ian Lance Taylor  <iant@google.com>
+
+       PR 10980
+       * options.h (class General_options): Add --add-needed and
+       --copy-dt-needed-entries.  Tweak --as-needed help entry.
+       * object.cc (Input_objects::check_dynamic_dependencies): Give an
+       error if --copy-dt-needed-entries aka --add-needed is used and
+       would cause a change in behaviour.
+
 2010-01-13  Ian Lance Taylor  <iant@google.com>
 
        Bring over from mainline:
index e9826b08a206a60ea335435bf3724b1e06f88e7a..a824c769f18d32ca83a00cff2445a99d8b8a249a 100644 (file)
@@ -1,6 +1,6 @@
 // object.cc -- support for an object file for linking in gold
 
-// Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 // Written by Ian Lance Taylor <iant@google.com>.
 
 // This file is part of gold.
@@ -2134,15 +2134,15 @@ Input_objects::add_object(Object* obj)
 void
 Input_objects::check_dynamic_dependencies() const
 {
+  bool issued_copy_dt_needed_error = false;
   for (Dynobj_list::const_iterator p = this->dynobj_list_.begin();
        p != this->dynobj_list_.end();
        ++p)
     {
       const Dynobj::Needed& needed((*p)->needed());
       bool found_all = true;
-      for (Dynobj::Needed::const_iterator pneeded = needed.begin();
-          pneeded != needed.end();
-          ++pneeded)
+      Dynobj::Needed::const_iterator pneeded;
+      for (pneeded = needed.begin(); pneeded != needed.end(); ++pneeded)
        {
          if (this->sonames_.find(*pneeded) == this->sonames_.end())
            {
@@ -2151,6 +2151,25 @@ Input_objects::check_dynamic_dependencies() const
            }
        }
       (*p)->set_has_unknown_needed_entries(!found_all);
+
+      // --copy-dt-needed-entries aka --add-needed is a GNU ld option
+      // --that gold does not support.  However, they cause no trouble
+      // --unless there is a DT_NEEDED entry that we don't know about;
+      // --warn only in that case.
+      if (!found_all
+         && !issued_copy_dt_needed_error
+         && (parameters->options().copy_dt_needed_entries()
+             || parameters->options().add_needed()))
+       {
+         const char* optname;
+         if (parameters->options().copy_dt_needed_entries())
+           optname = "--copy-dt-needed-entries";
+         else
+           optname = "--add-needed";
+         gold_error(_("%s is not supported but is required for %s in %s"),
+                    optname, (*pneeded).c_str(), (*p)->name().c_str());
+         issued_copy_dt_needed_error = true;
+       }
     }
 }
 
index f44a5842b9a7d472509e078d268e247bbbee43d1..1bf00697f81be0ac2ef7285eb1c0f08061700bda 100644 (file)
@@ -1,6 +1,6 @@
 // options.h -- handle command line options for gold  -*- C++ -*-
 
-// Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 // Written by Ian Lance Taylor <iant@google.com>.
 
 // This file is part of gold.
@@ -580,13 +580,17 @@ class General_options
   // alphabetical order).  For both, lowercase sorts before uppercase.
   // The -z options come last.
 
+  DEFINE_bool(add_needed, options::TWO_DASHES, '\0', false,
+             N_("Not supported"),
+             N_("Do not copy DT_NEEDED tags from shared libraries"));
+
   DEFINE_bool(allow_shlib_undefined, options::TWO_DASHES, '\0', false,
               N_("Allow unresolved references in shared libraries"),
               N_("Do not allow unresolved references in shared libraries"));
 
   DEFINE_bool(as_needed, options::TWO_DASHES, '\0', false,
-              N_("Only set DT_NEEDED for dynamic libs if used"),
-              N_("Always DT_NEEDED for dynamic libs"));
+              N_("Only set DT_NEEDED for shared libraries if used"),
+              N_("Always DT_NEEDED for shared libraries"));
 
   // This should really be an "enum", but it's too easy for folks to
   // forget to update the list as they add new targets.  So we just
@@ -627,6 +631,10 @@ class General_options
               {"none"});
 #endif
 
+  DEFINE_bool(copy_dt_needed_entries, options::TWO_DASHES, '\0', false,
+             N_("Not supported"),
+             N_("Do not copy DT_NEEDED tags from shared libraries"));
+
   DEFINE_bool(define_common, options::TWO_DASHES, 'd', false,
               N_("Define common symbols"),
               N_("Do not define common symbols"));