add casts to avoid arithmetic on void *
authorTrevor Saunders <tbsaunde+binutils@tbsaunde.org>
Wed, 13 Apr 2016 09:17:31 +0000 (05:17 -0400)
committerTrevor Saunders <tbsaunde+binutils@tbsaunde.org>
Wed, 27 Apr 2016 00:09:57 +0000 (20:09 -0400)
arithmetic on void * is undefined in ISO C, so we should avoid it.  In
GNU C sizeof void * is defined as 1, and that is pretty clearly what
this code wants, so change it to do arithmetic on bfd_byte *.
Unfortunately most of the argument types come from virtual function
interfaces so changing the types to bfd_byte * isn't trivial though it
might make the code clearer.  So for the moment its easiest to leave the
variable types as void * and cast before doing arithmetic.

bfd/ChangeLog:

2016-04-26  Trevor Saunders  <tbsaunde+binutils@tbsaunde.org>

* elf32-rx.c (rx_set_section_contents): Avoid arithmetic on void *.
* mmo.c (mmo_get_section_contents): Likewise.
(mmo_set_section_contents): Likewise.

bfd/ChangeLog
bfd/elf32-rx.c
bfd/mmo.c

index 746adad33d89319be90eecd10516f3f9f3ef1d04..8f4de696d0a1828ab08b47d4e42cec8daba45734 100644 (file)
@@ -1,3 +1,9 @@
+2016-04-26  Trevor Saunders  <tbsaunde+binutils@tbsaunde.org>
+
+       * elf32-rx.c (rx_set_section_contents): Avoid arithmetic on void *.
+       * mmo.c (mmo_get_section_contents): Likewise.
+       (mmo_set_section_contents): Likewise.
+
 2016-04-26  H.J. Lu  <hongjiu.lu@intel.com>
 
        * elf-bfd.h (elf_link_hash_table): Update comments for
index 754eae1d527c87b4975f466730d47cd0cabb7d7b..147a1a39e4724e321db9cbdaec8a55c81a679ba3 100644 (file)
@@ -3548,7 +3548,7 @@ rx_set_section_contents (bfd *         abfd,
       if (! rv)
        return rv;
 
-      location ++;
+      location = (bfd_byte *) location + 1;
       offset ++;
       count --;
       caddr ++;
@@ -3574,7 +3574,7 @@ rx_set_section_contents (bfd *         abfd,
     }
 
   count -= scount;
-  location += scount;
+  location = (bfd_byte *) location + scount;
   offset += scount;
 
   if (count > 0)
@@ -3593,7 +3593,7 @@ rx_set_section_contents (bfd *         abfd,
          if (! rv)
            return rv;
 
-         location ++;
+         location = (bfd_byte *) location + 1;
          offset ++;
          count --;
          caddr ++;
index b8af63a711f3080052da0544bdf1f3b703c61b03..dbfc9acbb275aef439b36b3ee5bf3da13a63dae6 100644 (file)
--- a/bfd/mmo.c
+++ b/bfd/mmo.c
@@ -2120,7 +2120,7 @@ mmo_get_section_contents (bfd *abfd ATTRIBUTE_UNUSED,
 
       memcpy (location, loc, chunk_size);
 
-      location += chunk_size;
+      location = (bfd_byte *) location + chunk_size;
       bytes_to_do -= chunk_size;
       offset += chunk_size;
     }
@@ -2657,7 +2657,7 @@ mmo_set_section_contents (bfd *abfd ATTRIBUTE_UNUSED, sec_ptr sec,
 
       memcpy (loc, location, chunk_size);
 
-      location += chunk_size;
+      location = (bfd_byte *) location + chunk_size;
       bytes_to_do -= chunk_size;
       offset += chunk_size;
     }