[binutils-gdb] Fix empty string alignment in .rodata.str*

Cary Coutant ccoutant@sourceware.org
Wed Oct 28 23:52:00 GMT 2015


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a817ff49c331c180f5b75cff4da1c338366c5d4e

commit a817ff49c331c180f5b75cff4da1c338366c5d4e
Author: Marcin Kościelnicki <koriakin@0x04.net>
Date:   Mon Oct 5 16:57:14 2015 +0200

    Fix empty string alignment in .rodata.str*
    
    gold/
    	PR gold/18959
    	* stringpool.cc (Stringpool_template::new_key_offset): Align all
    	strings, even zero-length.
    	(Stringpool_template::set_string_offsets):

Diff:
---
 gold/ChangeLog     | 7 +++++++
 gold/stringpool.cc | 7 ++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/gold/ChangeLog b/gold/ChangeLog
index 23d64ed..71bee61 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,12 @@
 2015-10-28  Marcin Kościelnicki  <koriakin@0x04.net>
 
+	PR gold/18959
+	* stringpool.cc (Stringpool_template::new_key_offset): Align all
+	strings, even zero-length.
+	(Stringpool_template::set_string_offsets): Likewise.
+
+2015-10-28  Marcin Kościelnicki  <koriakin@0x04.net>
+
 	* s390.cc: New file.
 	* Makefile.am (TARGETSOURCES): Add s390.cc.
 	(ALL_TARGETOBJS): Add s390.o.
diff --git a/gold/stringpool.cc b/gold/stringpool.cc
index d6fd715..595b1c7 100644
--- a/gold/stringpool.cc
+++ b/gold/stringpool.cc
@@ -228,9 +228,8 @@ Stringpool_template<Stringpool_char>::new_key_offset(size_t length)
   else
     {
       offset = this->offset_;
-      // Align non-zero length strings.
-      if (length != 0)
-	offset = align_address(offset, this->addralign_);
+      // Align strings.
+      offset = align_address(offset, this->addralign_);
       this->offset_ = offset + (length + 1) * sizeof(Stringpool_char);
     }
   this->key_to_offset_.push_back(offset);
@@ -421,6 +420,8 @@ Stringpool_template<Stringpool_char>::set_string_offsets()
           if (this->zero_null_ && (*curr)->first.string[0] == 0)
             this_offset = 0;
           else if (last != v.end()
+                   && ((((*curr)->first.length - (*last)->first.length)
+			% this->addralign_) == 0)
                    && is_suffix((*curr)->first.string,
 				(*curr)->first.length,
                                 (*last)->first.string,



More information about the Binutils-cvs mailing list