aboutsummaryrefslogtreecommitdiff
path: root/gold/object.cc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2010-01-05 00:32:22 +0000
committerIan Lance Taylor <ian@airs.com>2010-01-05 00:32:22 +0000
commit7eaea5495ab1b0dfbedaba749e249cfc92b9d7c6 (patch)
treec7c9bd6b9f0d43c6855d51cc0ed07ac314f4fcaa /gold/object.cc
parente44c01790d7b6959e2b7a1cbb00c9963a59ee809 (diff)
downloadbinutils-7eaea5495ab1b0dfbedaba749e249cfc92b9d7c6.zip
binutils-7eaea5495ab1b0dfbedaba749e249cfc92b9d7c6.tar.gz
binutils-7eaea5495ab1b0dfbedaba749e249cfc92b9d7c6.tar.bz2
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.
Diffstat (limited to 'gold/object.cc')
-rw-r--r--gold/object.cc25
1 files changed, 22 insertions, 3 deletions
diff --git a/gold/object.cc b/gold/object.cc
index 34b59b5..127e3a6 100644
--- a/gold/object.cc
+++ b/gold/object.cc
@@ -2162,15 +2162,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())
{
@@ -2179,6 +2179,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;
+ }
}
}