Replace uses of strncmp with memcmp
authorAlan Modra <amodra@gmail.com>
Mon, 7 May 2018 02:06:07 +0000 (11:36 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 7 May 2018 03:03:26 +0000 (12:33 +0930)
Avoids gcc pr85623 for these calls.

* cofflink.c (_bfd_coff_link_input_bfd): Use memcmp rather than
strncmp when checking for ".bf" special symbol.
* prXXigen.c (_bfd_XXi_swap_scnhdr_out): Make pe_required_section_flags
section name a char array, remove sentinal known_sections entry,
and adjust loop over known_sections to suit.  Use memcmp rather
than strncmp.

bfd/ChangeLog
bfd/cofflink.c
bfd/peXXigen.c

index 017899875a7d3f86710a53c02652c70d8ab20ef1..d26c69ab2ac958e91839795621769514e560b77d 100644 (file)
@@ -1,3 +1,12 @@
+2018-05-07  Alan Modra  <amodra@gmail.com>
+
+       * cofflink.c (_bfd_coff_link_input_bfd): Use memcmp rather than
+       strncmp when checking for ".bf" special symbol.
+       * peXXigen.c (_bfd_XXi_swap_scnhdr_out): Make pe_required_section_flags
+       section name a char array, remove sentinal known_sections entry,
+       and adjust loop over known_sections to suit.  Use memcmp rather
+       than strncmp.
+
 2018-05-04  Alan Modra  <amodra@gmail.com>
 
        * elf-linux-core.h (struct elf_external_linux_prpsinfo32_ugid32),
@@ -18,6 +27,7 @@
        pragmas.
        * peXXigen.c (_bfd_XXi_swap_scnhdr_out): Use strnlen to avoid
        false positive gcc-8 warning.
+       * cofflink.c (_bfd_coff_link_input_bfd): Likewise.
 
 2018-05-04  Tulio Magno Quites Machado Filho  <tuliom@linux.ibm.com>
 
index 6ca547ce5bc549e7d6cad6e66cc11cd7339e6b96..2f73f72e318d743c8ea403e751ab26c13e180835 100644 (file)
@@ -1839,7 +1839,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd)
 
            case C_FCN:
              if (obj_pe (input_bfd)
-                 && strncmp (isym.n_name, ".bf", sizeof isym.n_name) != 0
+                 && memcmp (isym.n_name, ".bf", sizeof ".bf") != 0
                  && isym.n_scnum > 0)
                {
                  /* For PE, .lf and .ef get their value left alone,
index a62d126aff22c534f1f9ebdbed55433a6079ca89..5e0acc4571d3316f92fd390da1a0bc02e3db122b 100644 (file)
@@ -1018,7 +1018,7 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out)
 
     typedef struct
     {
-      const char *     section_name;
+      char section_name[SCNNMLEN];
       unsigned long    must_have;
     }
     pe_required_section_flags;
@@ -1037,7 +1037,6 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out)
        { ".text" , IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE },
        { ".tls",   IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_WRITE },
        { ".xdata", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA },
-       { NULL, 0}
       };
 
     pe_required_section_flags * p;
@@ -1050,11 +1049,12 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out)
        by ld --enable-auto-import (if auto-import is actually needed),
        by ld --omagic, or by obcopy --writable-text.  */
 
-    for (p = known_sections; p->section_name; p++)
-      if (strncmp (scnhdr_int->s_name, p->section_name,
-                  sizeof scnhdr_int->s_name) == 0)
+    for (p = known_sections;
+        p < known_sections + ARRAY_SIZE (known_sections);
+        p++)
+      if (memcmp (scnhdr_int->s_name, p->section_name, SCNNMLEN) == 0)
        {
-         if (strncmp (scnhdr_int->s_name, ".text", sizeof scnhdr_int->s_name)
+         if (memcmp (scnhdr_int->s_name, ".text", sizeof ".text")
              || (bfd_get_file_flags (abfd) & WP_TEXT))
            scnhdr_int->s_flags &= ~IMAGE_SCN_MEM_WRITE;
          scnhdr_int->s_flags |= p->must_have;
@@ -1067,7 +1067,7 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out)
   if (coff_data (abfd)->link_info
       && ! bfd_link_relocatable (coff_data (abfd)->link_info)
       && ! bfd_link_pic (coff_data (abfd)->link_info)
-      && strncmp (scnhdr_int->s_name, ".text", sizeof scnhdr_int->s_name) == 0)
+      && memcmp (scnhdr_int->s_name, ".text", sizeof ".text") == 0)
     {
       /* By inference from looking at MS output, the 32 bit field
         which is the combination of the number_of_relocs and