summaryrefslogtreecommitdiff
path: root/gold/resolve.cc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2011-07-02 05:30:00 +0000
committerIan Lance Taylor <ian@airs.com>2011-07-02 05:30:00 +0000
commit2113106124ff094741fc3a0edacf118739ce766d (patch)
treefccdcee567edc60e4efddc45993f1d8c8eca416c /gold/resolve.cc
parent9e3dc3160bdf3e40e72ae1a174aaf44f7553a269 (diff)
downloadbinutils-gdb-2113106124ff094741fc3a0edacf118739ce766d.tar.gz
PR gold/12525
PR gold/12952 * resolve.cc (Symbol::override_base_with_special): Don't override the version if the overriding symbol has a different name. * dynobj.cc (Versions::add_def): Add dynpool parameter. Change all callers. If we give an error about an undefined version, define the base version if necessary. * dynobj.h (class Versions): Update declaration. * testsuite/weak_alias_test_5.cc: New file. * testsuite/weak_alias_test.script: New file. * testsuite/weak_alias_test_main.cc: Check that versioned_symbol and versioned_alias have the right value, and call t2. * testsuite/Makefile.am (weak_alias_test_DEPENDENCIES): Add weak_alias_test_5.so. (weak_alias_test_LDADD): Likewise. (weak_alias_test_5_pic.o, weak_alias_test_5.so): New targets. * testsuite/Makefile.in: Rebuild.
Diffstat (limited to 'gold/resolve.cc')
-rw-r--r--gold/resolve.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/gold/resolve.cc b/gold/resolve.cc
index 71d51097351..8850a3d46aa 100644
--- a/gold/resolve.cc
+++ b/gold/resolve.cc
@@ -887,7 +887,8 @@ Symbol_table::should_override_with_special(const Symbol* to, Defined defined)
void
Symbol::override_base_with_special(const Symbol* from)
{
- gold_assert(this->name_ == from->name_ || this->has_alias());
+ bool same_name = this->name_ == from->name_;
+ gold_assert(same_name || this->has_alias());
this->source_ = from->source_;
switch (from->source_)
@@ -909,7 +910,8 @@ Symbol::override_base_with_special(const Symbol* from)
break;
}
- this->override_version(from->version_);
+ if (same_name)
+ this->override_version(from->version_);
this->type_ = from->type_;
this->binding_ = from->binding_;
this->override_visibility(from->visibility_);