summaryrefslogtreecommitdiff
path: root/gold/resolve.cc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2011-07-06 04:43:39 +0000
committerIan Lance Taylor <ian@airs.com>2011-07-06 04:43:39 +0000
commit24d47b3460c983e3b01d8230a46b1ea19828bde1 (patch)
treee23f94aea5ba8be59309ce85dd9010102b149eac /gold/resolve.cc
parent21083d0f0cae4d0c379b672be35f06fb378eda3f (diff)
downloadbinutils-gdb-24d47b3460c983e3b01d8230a46b1ea19828bde1.tar.gz
PR gold/12952
* resolve.cc (Symbol::override_base_with_special): Simply override version with special symbol version, ignoring previous version.
Diffstat (limited to 'gold/resolve.cc')
-rw-r--r--gold/resolve.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/gold/resolve.cc b/gold/resolve.cc
index 8850a3d46aa..720b350b327 100644
--- a/gold/resolve.cc
+++ b/gold/resolve.cc
@@ -911,7 +911,15 @@ Symbol::override_base_with_special(const Symbol* from)
}
if (same_name)
- this->override_version(from->version_);
+ {
+ // When overriding a versioned symbol with a special symbol, we
+ // may be changing the version. This will happen if we see a
+ // special symbol such as "_end" defined in a shared object with
+ // one version (from a version script), but we want to define it
+ // here with a different version (from a different version
+ // script).
+ this->version_ = from->version_;
+ }
this->type_ = from->type_;
this->binding_ = from->binding_;
this->override_visibility(from->visibility_);