Use bfd_get_32 and bfd_put_32 to access ch_type
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 22 Sep 2015 02:38:40 +0000 (19:38 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 22 Sep 2015 02:38:40 +0000 (19:38 -0700)
The ch_type field in Elf64_External_Chdr is 4 bytes.  We should use
bfd_get_32 and bfd_put_32 to access it.

* bfd.c (bfd_update_compression_header): Use bfd_put_32 on
ch_type.
(bfd_check_compression_header): Use bfd_get_32 on ch_type.
(bfd_convert_section_contents): Use bfd_get_32 and bfd_put_32
on ch_type.

bfd/ChangeLog
bfd/bfd.c

index 37ba69f..d63d55b 100644 (file)
@@ -1,3 +1,11 @@
+2015-09-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * bfd.c (bfd_update_compression_header): Use bfd_put_32 on
+       ch_type.
+       (bfd_check_compression_header): Use bfd_get_32 on ch_type.
+       (bfd_convert_section_contents): Use bfd_get_32 and bfd_put_32
+       on ch_type.
+
 2015-09-20  Rich Felker  <dalias@libc.org>
 
        * elflink.c (_bfd_elf_link_create_dynamic_sections): Don't create
index c02edbe..449dfe6 100644 (file)
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -2000,7 +2000,7 @@ bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
                {
                  Elf64_External_Chdr *echdr
                    = (Elf64_External_Chdr *) contents;
-                 bfd_put_64 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
+                 bfd_put_32 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
                  bfd_put_64 (abfd, sec->size, &echdr->ch_size);
                  bfd_put_64 (abfd, 1 << sec->alignment_power,
                              &echdr->ch_addralign);
@@ -2061,7 +2061,7 @@ bfd_check_compression_header (bfd *abfd, bfd_byte *contents,
       else
        {
          Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
-         chdr.ch_type = bfd_get_64 (abfd, &echdr->ch_type);
+         chdr.ch_type = bfd_get_32 (abfd, &echdr->ch_type);
          chdr.ch_size = bfd_get_64 (abfd, &echdr->ch_size);
          chdr.ch_addralign = bfd_get_64 (abfd, &echdr->ch_addralign);
        }
@@ -2222,7 +2222,7 @@ bfd_convert_section_contents (bfd *ibfd, sec_ptr isec, bfd *obfd,
   else
     {
       Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
-      chdr.ch_type = bfd_get_64 (ibfd, &echdr->ch_type);
+      chdr.ch_type = bfd_get_32 (ibfd, &echdr->ch_type);
       chdr.ch_size = bfd_get_64 (ibfd, &echdr->ch_size);
       chdr.ch_addralign = bfd_get_64 (ibfd, &echdr->ch_addralign);
 
@@ -2249,7 +2249,7 @@ bfd_convert_section_contents (bfd *ibfd, sec_ptr isec, bfd *obfd,
   else
     {
       Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
-      bfd_put_64 (obfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
+      bfd_put_32 (obfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
       bfd_put_64 (obfd, chdr.ch_size, &echdr->ch_size);
       bfd_put_64 (obfd, chdr.ch_addralign, &echdr->ch_addralign);
     }