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/binutils-2_29-branch] gold: Add put_ch_reserved to 64-bit Chdr_write


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

commit d718bb321cafa764df79648a8f4b57ab73e35452
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Jul 28 13:39:42 2017 -0700

    gold: Add put_ch_reserved to 64-bit Chdr_write
    
    The 64-bit ELF compression header has a reserved field.  It should be
    cleared to avoid random bits in it.
    
    elfcpp/
    
    	PR gold/21857
    	* elfcpp.h (Chdr_write): Add put_ch_reserved.
    	(Chdr_write<64, true>::put_ch_reserved): New.
    	(Chdr_write<64, false>::put_ch_reserved): Likewise.
    
    gold/
    
    	PR gold/21857
    	* compressed_output.cc (Output_compressed_section::set_final_data_size):
    	Call put_ch_reserved to clear the reserved field for 64-bit ELF.
    
    (cherry picked from commit 49ba15a23a9d3d8a109ce2fd5053822eee7f1fdf)

Diff:
---
 elfcpp/ChangeLog          |  7 +++++++
 elfcpp/elfcpp.h           | 17 +++++++++++++++++
 gold/ChangeLog            |  6 ++++++
 gold/compressed_output.cc |  4 ++++
 4 files changed, 34 insertions(+)

diff --git a/elfcpp/ChangeLog b/elfcpp/ChangeLog
index fc864bf..f669248 100644
--- a/elfcpp/ChangeLog
+++ b/elfcpp/ChangeLog
@@ -1,3 +1,10 @@
+2017-07-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR gold/21857
+	* elfcpp.h (Chdr_write): Add put_ch_reserved.
+	(Chdr_write<64, true>::put_ch_reserved): New.
+	(Chdr_write<64, false>::put_ch_reserved): Likewise.
+
 2017-07-03  Alan Modra  <amodra@gmail.com>
 
 	* dwarf.h (DW_FIRST_IDX, DW_IDX, DW_IDX_DUP, DW_END_IDX): Define,
diff --git a/elfcpp/elfcpp.h b/elfcpp/elfcpp.h
index a57f547..cccec4c 100644
--- a/elfcpp/elfcpp.h
+++ b/elfcpp/elfcpp.h
@@ -1351,10 +1351,27 @@ class Chdr_write
   put_ch_addralign(typename Elf_types<size>::Elf_WXword v)
   { this->p_->ch_addralign = Convert<size, big_endian>::convert_host(v); }
 
+  void
+  put_ch_reserved(Elf_Word);
+
  private:
   internal::Chdr_data<size>* p_;
 };
 
+template<>
+inline void
+elfcpp::Chdr_write<64, true>::put_ch_reserved(Elf_Word v)
+{
+  this->p_->ch_reserved = v;
+}
+
+template<>
+inline void
+elfcpp::Chdr_write<64, false>::put_ch_reserved(Elf_Word v)
+{
+  this->p_->ch_reserved = v;
+}
+
 // Accessor class for an ELF segment header.
 
 template<int size, bool big_endian>
diff --git a/gold/ChangeLog b/gold/ChangeLog
index f901e60..f7f2c65 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,9 @@
+2017-07-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR gold/21857
+	* compressed_output.cc (Output_compressed_section::set_final_data_size):
+	Call put_ch_reserved to clear the reserved field for 64-bit ELF.
+
 2017-07-26  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* mips.cc (Mips_relocate_functions): Add "llu" suffix to
diff --git a/gold/compressed_output.cc b/gold/compressed_output.cc
index 4374ba1..45077f7 100644
--- a/gold/compressed_output.cc
+++ b/gold/compressed_output.cc
@@ -286,6 +286,8 @@ Output_compressed_section::set_final_data_size()
 		  chdr.put_ch_type(elfcpp::ELFCOMPRESS_ZLIB);
 		  chdr.put_ch_size(uncompressed_size);
 		  chdr.put_ch_addralign(addralign);
+		  // Clear the reserved field.
+		  chdr.put_ch_reserved(0);
 		}
 	      else
 		{
@@ -293,6 +295,8 @@ Output_compressed_section::set_final_data_size()
 		  chdr.put_ch_type(elfcpp::ELFCOMPRESS_ZLIB);
 		  chdr.put_ch_size(uncompressed_size);
 		  chdr.put_ch_addralign(addralign);
+		  // Clear the reserved field.
+		  chdr.put_ch_reserved(0);
 		}
 	    }
 	  else


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