Silence gcc-8 warnings
authorAlan Modra <amodra@gmail.com>
Wed, 25 Apr 2018 03:57:22 +0000 (13:27 +0930)
committerAlan Modra <amodra@gmail.com>
Wed, 25 Apr 2018 07:55:57 +0000 (17:25 +0930)
This seems to work with gcc-8 and a bunch of prior gcc versions I tested.

* elf-linux-core.h: Disable gcc-8 string truncation warning.
* elf.c (elfcore_write_prpsinfo): Likewise.

bfd/ChangeLog
bfd/elf-linux-core.h
bfd/elf.c

index c48036fdedcbc95f894d6a3a543c8f38cc6628bf..91a41ae61123e31f6c35920ef1f5f22b0d903837 100644 (file)
@@ -1,4 +1,9 @@
-2018-04-35  Alan Modra  <amodra@gmail.com>
+2018-04-25  Alan Modra  <amodra@gmail.com>
+
+       * elf-linux-core.h: Disable gcc-8 string truncation warning.
+       * elf.c (elfcore_write_prpsinfo): Likewise.
+
+2018-04-25  Alan Modra  <amodra@gmail.com>
 
        * Makefile.am: Remove arm-aout and arm-coff support.
        * config.bfd: Likewise.
index 0a5d76fe9df1f7ae80073fc4bbbf969dbcb8d1b4..fa0690320aff5095dce7b74060950a83f61a8783 100644 (file)
 #ifndef ELF_LINUX_CORE_H
 #define ELF_LINUX_CORE_H
 
+/* gcc-8 warns (*) on all the strncpy calls in this file about
+   possible string truncation.  The "truncation" is not a bug.  We
+   have an external representation of structs with fields that are not
+   necessarily NULL terminated and corresponding internal
+   representation fields that are one larger so that they can always
+   be NULL terminated.
+   gcc versions between 4.2 and 4.6 do not allow pragma control of
+   diagnostics inside functions, giving a hard error if you try to use
+   the finer control available with later versions.
+   gcc prior to 4.2 warns about diagnostic push and pop.
+   gcc-5, gcc-6 and gcc-7 warn that -Wstringop-truncation is unknown,
+   unless you also add #pragma GCC diagnostic ignored "-Wpragma".
+   (*) Depending on your system header files!  */
+
+#if GCC_VERSION >= 8000
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
+#endif
+
 /* External 32-bit structure for PRPSINFO.  This structure is
    ABI-defined, thus we choose to use char arrays here in order to
    avoid dealing with different types in different architectures.
@@ -231,4 +250,8 @@ swap_linux_prpsinfo64_ugid16_out
   strncpy (to->pr_psargs, from->pr_psargs, sizeof (to->pr_psargs));
 }
 
+#if GCC_VERSION >= 8000
+#pragma GCC diagnostic pop
+#endif
+
 #endif
index 092b275ae20e3e643207078c352461af0015946b..bd9ffccee61f363c7d9dd10c02ac69eaf45d97c5 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -10508,6 +10508,10 @@ elfcore_write_note (bfd *abfd,
   return buf;
 }
 
+#if GCC_VERSION >= 8000
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
+#endif
 char *
 elfcore_write_prpsinfo (bfd  *abfd,
                        char *buf,
@@ -10566,6 +10570,9 @@ elfcore_write_prpsinfo (bfd  *abfd,
   free (buf);
   return NULL;
 }
+#if GCC_VERSION >= 8000
+#pragma GCC diagnostic pop
+#endif
 
 char *
 elfcore_write_linux_prpsinfo32