This is the mail archive of the
binutils-cvs@sourceware.org
mailing list for the binutils project.
[binutils-gdb] Mips: Fix TLS LDM GOT entry.
- From: Cary Coutant <ccoutant at sourceware dot org>
- To: bfd-cvs at sourceware dot org
- Date: 15 Mar 2017 23:52:16 -0000
- Subject: [binutils-gdb] Mips: Fix TLS LDM GOT entry.
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=aab2c17756ee5bef0ea5783a460a0990450b3bd5
commit aab2c17756ee5bef0ea5783a460a0990450b3bd5
Author: Vladimir Radosavljevic <Vladimir.Radosavljevic@imgtec.com>
Date: Wed Mar 15 16:49:16 2017 -0700
Mips: Fix TLS LDM GOT entry.
gold/
* mips.cc (Mips_got_entry::hash()): Shift addend to reduce
possibility of collisions.
(Mips_got_entry::equals): Fix case for GOT_TLS_LDM
entries.
Diff:
---
gold/ChangeLog | 7 +++++++
gold/mips.cc | 16 +++++++++-------
2 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/gold/ChangeLog b/gold/ChangeLog
index d490468..d8d67e1 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,12 @@
2017-03-15 Vladimir Radosavljevic <Vladimir.Radosavljevic@imgtec.com>
+ * mips.cc (Mips_got_entry::hash()): Shift addend to reduce
+ possibility of collisions.
+ (Mips_got_entry::equals): Fix case for GOT_TLS_LDM
+ entries.
+
+2017-03-15 Vladimir Radosavljevic <Vladimir.Radosavljevic@imgtec.com>
+
* mips.cc (Mips_relobj::merge_processor_specific_data_): New data
member.
(Mips_relobj::merge_processor_specific_data): New method.
diff --git a/gold/mips.cc b/gold/mips.cc
index 4cf3364..4fc160b 100644
--- a/gold/mips.cc
+++ b/gold/mips.cc
@@ -474,22 +474,24 @@ class Mips_got_entry
? this->d.object->name().c_str()
: this->d.sym->name());
size_t addend = this->addend_;
- return name_hash_value ^ this->symndx_ ^ addend;
+ return name_hash_value ^ this->symndx_ ^ (addend << 16);
}
// Return whether this entry is equal to OTHER.
bool
equals(Mips_got_entry<size, big_endian>* other) const
{
+ if (this->symndx_ != other->symndx_
+ || this->tls_type_ != other->tls_type_)
+ return false;
+
if (this->tls_type_ == GOT_TLS_LDM)
return true;
- return ((this->tls_type_ == other->tls_type_)
- && (this->symndx_ == other->symndx_)
- && ((this->symndx_ != -1U)
- ? (this->d.object == other->d.object)
- : (this->d.sym == other->d.sym))
- && (this->addend_ == other->addend_));
+ return (((this->symndx_ != -1U)
+ ? (this->d.object == other->d.object)
+ : (this->d.sym == other->d.sym))
+ && (this->addend_ == other->addend_));
}
// Return input object that needs this GOT entry.