This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]