+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:
// 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.
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())
{
}
}
(*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;
+ }
}
}
// 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.
// 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
{"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"));