]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gold: Add put_ch_reserved to 64-bit Chdr_write
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 28 Jul 2017 20:39:42 +0000 (13:39 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 28 Jul 2017 20:48:08 +0000 (13:48 -0700)
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)

elfcpp/ChangeLog
elfcpp/elfcpp.h
gold/ChangeLog
gold/compressed_output.cc

index 6a61d61fee1bf2809d6731be3394909dd7b3ee32..b1db0155b221fb463dca4218e9eeccf83cec917d 100644 (file)
@@ -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-01-02  Alan Modra  <amodra@gmail.com>
 
        Update year range in copyright notice of all files.
index 43ba5c413d290e61db1bd7c87657ec379ad90976..98e1ada340d3198683c3e3f5bcbdfddeea257272 100644 (file)
@@ -1345,10 +1345,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>
index d27713d404f652ffe5a291fbd6e0ec46742ef5ef..7be51ff7de18efdcaece221a18c9f8450aa27208 100644 (file)
@@ -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-06  Han Shen  <shenhan@google.com>
 
        PR gold/21491
index 4374ba1bb74182e4e467d03c219d52e84395ee75..45077f70203d89b8ffe94a1c9f3aa8856c1b00e9 100644 (file)
@@ -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