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.
This commit is contained in:
parent
e44c01790d
commit
7eaea5495a
|
@ -1,5 +1,12 @@
|
||||||
2010-01-04 Ian Lance Taylor <iant@google.com>
|
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.
|
||||||
|
|
||||||
PR 10980
|
PR 10980
|
||||||
* options.h (class General_options): Add -G as a short version of
|
* options.h (class General_options): Add -G as a short version of
|
||||||
--shared. Add no-op options -assert, -g, and -i.
|
--shared. Add no-op options -assert, -g, and -i.
|
||||||
|
|
|
@ -2162,15 +2162,15 @@ Input_objects::add_object(Object* obj)
|
||||||
void
|
void
|
||||||
Input_objects::check_dynamic_dependencies() const
|
Input_objects::check_dynamic_dependencies() const
|
||||||
{
|
{
|
||||||
|
bool issued_copy_dt_needed_error = false;
|
||||||
for (Dynobj_list::const_iterator p = this->dynobj_list_.begin();
|
for (Dynobj_list::const_iterator p = this->dynobj_list_.begin();
|
||||||
p != this->dynobj_list_.end();
|
p != this->dynobj_list_.end();
|
||||||
++p)
|
++p)
|
||||||
{
|
{
|
||||||
const Dynobj::Needed& needed((*p)->needed());
|
const Dynobj::Needed& needed((*p)->needed());
|
||||||
bool found_all = true;
|
bool found_all = true;
|
||||||
for (Dynobj::Needed::const_iterator pneeded = needed.begin();
|
Dynobj::Needed::const_iterator pneeded;
|
||||||
pneeded != needed.end();
|
for (pneeded = needed.begin(); pneeded != needed.end(); ++pneeded)
|
||||||
++pneeded)
|
|
||||||
{
|
{
|
||||||
if (this->sonames_.find(*pneeded) == this->sonames_.end())
|
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);
|
(*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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -580,13 +580,17 @@ class General_options
|
||||||
// alphabetical order). For both, lowercase sorts before uppercase.
|
// alphabetical order). For both, lowercase sorts before uppercase.
|
||||||
// The -z options come last.
|
// 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,
|
DEFINE_bool(allow_shlib_undefined, options::TWO_DASHES, '\0', false,
|
||||||
N_("Allow unresolved references in shared libraries"),
|
N_("Allow unresolved references in shared libraries"),
|
||||||
N_("Do not allow unresolved references in shared libraries"));
|
N_("Do not allow unresolved references in shared libraries"));
|
||||||
|
|
||||||
DEFINE_bool(as_needed, options::TWO_DASHES, '\0', false,
|
DEFINE_bool(as_needed, options::TWO_DASHES, '\0', false,
|
||||||
N_("Only set DT_NEEDED for dynamic libs if used"),
|
N_("Only set DT_NEEDED for shared libraries if used"),
|
||||||
N_("Always DT_NEEDED for dynamic libs"));
|
N_("Always DT_NEEDED for shared libraries"));
|
||||||
|
|
||||||
DEFINE_enum(assert, options::ONE_DASH, '\0', NULL,
|
DEFINE_enum(assert, options::ONE_DASH, '\0', NULL,
|
||||||
N_("Ignored"), N_("[ignored]"),
|
N_("Ignored"), N_("[ignored]"),
|
||||||
|
@ -631,6 +635,10 @@ class General_options
|
||||||
{"none"});
|
{"none"});
|
||||||
#endif
|
#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,
|
DEFINE_bool(define_common, options::TWO_DASHES, 'd', false,
|
||||||
N_("Define common symbols"),
|
N_("Define common symbols"),
|
||||||
N_("Do not define common symbols"));
|
N_("Do not define common symbols"));
|
||||||
|
|
Loading…
Reference in New Issue