Fix compile time warning messages when compiling binutils with gcc 7.0.1.
authorNick Clifton <nickc@redhat.com>
Fri, 3 Feb 2017 09:04:21 +0000 (09:04 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 3 Feb 2017 09:04:21 +0000 (09:04 +0000)
PR 21096
bfd * coffcode.h (coff_write_object_contents): Enlarge size of
s_name_buf in order to avoid compile time warning about possible
integer truncation.
* elf32-nds32.c (nds32_elf_ex9_import_table): Mask off lower
32-bits of insn value before printing into buffer.

opcodes * aarch64-opc.c (print_register_list): Ensure that the register
list index will fir into the tb buffer.
(print_register_offset_address): Likewise.
* tic6x-dis.c (print_insn_tic6x): Increase size of func_unit_buf.

bfd/ChangeLog
bfd/coffcode.h
bfd/elf32-nds32.c
opcodes/ChangeLog
opcodes/aarch64-opc.c
opcodes/tic6x-dis.c

index bbd1200b62fba87904743c7346df95d3dd8e27d5..3f9bbd192aa0aea80185ed480a44c735451dd274 100644 (file)
@@ -1,3 +1,12 @@
+2017-02-03  Nick Clifton  <nickc@redhat.com>
+
+       PR 21096
+       * coffcode.h (coff_write_object_contents): Enlarge size of
+       s_name_buf in order to avoid compile time warning about possible
+       integer truncation.
+       * elf32-nds32.c (nds32_elf_ex9_import_table): Mask off lower
+       32-bits of insn value before printing into buffer.
+
 2017-02-02  Maciej W. Rozycki  <macro@imgtec.com>
 
        * elfxx-mips.c (mips_elf_hash_sort_data): Add
index 2ef4e92533d2f29c34b4f7d4bc2f0efc62da4331..975d249b703f7cf604244ffae80526bf99047eb8 100644 (file)
@@ -3755,7 +3755,9 @@ coff_write_object_contents (bfd * abfd)
                 NUL-terminated.  We use a temporary buffer so that we can still
                 sprintf all eight chars without splatting a terminating NUL
                 over the first byte of the following member (s_paddr).  */
-             char s_name_buf[SCNNMLEN + 1];
+             /* PR 21096: The +20 is to stop a bogus warning from gcc7 about
+                a possible buffer overflow.  */
+             char s_name_buf[SCNNMLEN + 1 + 20];
 
              /* An inherent limitation of the /nnnnnnn notation used to indicate
                 the offset of the long name in the string table is that we
@@ -3770,9 +3772,10 @@ coff_write_object_contents (bfd * abfd)
                  return FALSE;
                }
 
-             /* snprintf not strictly necessary now we've verified the value
-                has less than eight ASCII digits, but never mind.  */
-             snprintf (s_name_buf, SCNNMLEN + 1, "/%lu", (unsigned long) string_size);
+             /* We do not need to use snprintf here as we have already verfied
+                that string_size is not too big, plus we have an overlarge
+                buffer, just in case.  */
+             sprintf (s_name_buf, "/%lu", (unsigned long) string_size);
              /* Then strncpy takes care of any padding for us.  */
              strncpy (section.s_name, s_name_buf, SCNNMLEN);
              string_size += len + 1;
index a84a6fd78a1a2f6e7a30c510116d548c8d6bc5bd..3d510a0d54557f401519a69f7ea1c555050a1710 100644 (file)
@@ -14949,7 +14949,6 @@ nds32_elf_ex9_import_table (struct bfd_link_info *info)
 {
   int num = 0;
   bfd_byte *contents;
-  unsigned long insn;
   FILE *ex9_import_file;
   int update_ex9_table;
   struct elf_nds32_link_hash_table *table;
@@ -14963,6 +14962,7 @@ nds32_elf_ex9_import_table (struct bfd_link_info *info)
   /* Read instructions from the input file and build the list.  */
   while (!feof (ex9_import_file))
     {
+      unsigned long insn;
       char *code;
       struct elf_nds32_insn_times_entry *ptr;
       size_t nread;
@@ -14973,7 +14973,7 @@ nds32_elf_ex9_import_table (struct bfd_link_info *info)
        break;
       insn = bfd_getb32 (contents);
       code = bfd_malloc (sizeof (char) * 9);
-      snprintf (code, 9, "%08lx", insn);
+      snprintf (code, 9, "%08lx", (insn & 0xffffffff));
       ptr = bfd_malloc (sizeof (struct elf_nds32_insn_times_entry));
       ptr->string = code;
       ptr->order = num;
index 3070ad58fae0ff340e7981bdf373650827a2200f..2185484ecec5e373422fb269c7f32dc827a1e93f 100644 (file)
@@ -1,3 +1,11 @@
+2017-02-03  Nick Clifton  <nickc@redhat.com>
+
+       PR 21096
+       * aarch64-opc.c (print_register_list): Ensure that the register
+       list index will fir into the tb buffer.
+       (print_register_offset_address): Likewise.
+       * tic6x-dis.c (print_insn_tic6x): Increase size of func_unit_buf.
+
 2017-01-27  Alexis Deruell  <alexis.deruelle@gmail.com>
 
        PR 21056
index eea76c87da4d69f8bd6f5f652c78e380bf5d6611..314bcb419386d432042a4f52077bbe418b2963c1 100644 (file)
@@ -2865,7 +2865,8 @@ print_register_list (char *buf, size_t size, const aarch64_opnd_info *opnd,
 
   /* Prepare the index if any.  */
   if (opnd->reglist.has_index)
-    snprintf (tb, 8, "[%" PRIi64 "]", opnd->reglist.index);
+    /* PR 21096: The %100 is to silence a warning about possible truncation.  */
+    snprintf (tb, 8, "[%" PRIi64 "]", (opnd->reglist.index % 100));
   else
     tb[0] = '\0';
 
@@ -2965,7 +2966,8 @@ print_register_offset_address (char *buf, size_t size,
     {
       if (print_amount_p)
        snprintf (tb, sizeof (tb), ", %s #%" PRIi64, shift_name,
-                 opnd->shifter.amount);
+  /* PR 21096: The %100 is to silence a warning about possible truncation.  */
+                 (opnd->shifter.amount % 100));
       else
        snprintf (tb, sizeof (tb), ", %s", shift_name);
     }
index 1a6f5757ce1e1b006a0d31fbbf3940720c9bfc87..48046b2df5409351f6a69a4032f5468c1415fe46 100644 (file)
@@ -316,7 +316,7 @@ print_insn_tic6x (bfd_vma addr, struct disassemble_info *info)
       const char *parallel;
       const char *cond = "";
       const char *func_unit;
-      char func_unit_buf[7];
+      char func_unit_buf[8];
       unsigned int func_unit_side = 0;
       unsigned int func_unit_data_side = 0;
       unsigned int func_unit_cross = 0;
@@ -703,8 +703,9 @@ print_insn_tic6x (bfd_vma addr, struct disassemble_info *info)
          if (opc->flags & TIC6X_FLAG_INSN16_BSIDE && func_unit_side == 1)
              func_unit_cross = 1;
 
-         snprintf (func_unit_buf, 7, " .%c%u%s%s", func_unit_char,
-                   func_unit_side, (func_unit_cross ? "X" : ""), data_str);
+         snprintf (func_unit_buf, sizeof func_unit_buf, " .%c%u%s%s",
+                   func_unit_char, func_unit_side,
+                   (func_unit_cross ? "X" : ""), data_str);
          func_unit = func_unit_buf;
        }