From fe75810f8e0cc33384f22d0479506711d4014c60 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 6 Jul 2018 15:07:08 +0930 Subject: [PATCH] Fix diagnostic errors Fixes a number of build errors like the following .../elf32-arm.c: In function 'elf32_arm_nabi_write_core_note': .../elf32-arm.c:2177: error: #pragma GCC diagnostic not allowed inside functions .../elf32-arm.c:2186: error: #pragma GCC diagnostic not allowed inside functions See the comment in diagnostics.h. include/ * diagnostics.h: Comment on macro usage. bfd/ * elf32-arm.c (elf32_arm_nabi_write_core_note): Don't use DIAGNOTIC_PUSH and DIAGNOSTIC_POP unconditionally. * elf32-ppc.c (ppc_elf_write_core_note): Likewise. * elf32-s390.c (elf_s390_write_core_note): Likewise. * elf64-ppc.c (ppc64_elf_write_core_note): Likewise. * elf64-s390.c (elf_s390_write_core_note): Likewise. * elfxx-aarch64.c (_bfd_aarch64_elf_write_core_note): Likewise. --- bfd/ChangeLog | 10 ++++++++++ bfd/elf32-arm.c | 4 +++- bfd/elf32-ppc.c | 4 +++- bfd/elf32-s390.c | 4 +++- bfd/elf64-ppc.c | 4 +++- bfd/elf64-s390.c | 4 +++- bfd/elfxx-aarch64.c | 4 +++- include/ChangeLog | 4 ++++ include/diagnostics.h | 14 ++++++++++++++ 9 files changed, 46 insertions(+), 6 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 650258ef8b9..b8449651b69 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,13 @@ +2018-07-06 Alan Modra + + * elf32-arm.c (elf32_arm_nabi_write_core_note): Don't use + DIAGNOTIC_PUSH and DIAGNOSTIC_POP unconditionally. + * elf32-ppc.c (ppc_elf_write_core_note): Likewise. + * elf32-s390.c (elf_s390_write_core_note): Likewise. + * elf64-ppc.c (ppc64_elf_write_core_note): Likewise. + * elf64-s390.c (elf_s390_write_core_note): Likewise. + * elfxx-aarch64.c (_bfd_aarch64_elf_write_core_note): Likewise. + 2018-07-05 Jim Wilson * config.bfd (riscv32*-*-*): Renamed from riscv32-*-*. diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index b21901c0f56..9c611813c64 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -2174,16 +2174,18 @@ elf32_arm_nabi_write_core_note (bfd *abfd, char *buf, int *bufsiz, va_start (ap, note_type); memset (data, 0, sizeof (data)); strncpy (data + 28, va_arg (ap, const char *), 16); +#if GCC_VERSION == 8001 DIAGNOSTIC_PUSH; /* GCC 8.1 warns about 80 equals destination size with -Wstringop-truncation: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643 */ -#if GCC_VERSION == 8001 DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION; #endif strncpy (data + 44, va_arg (ap, const char *), 80); +#if GCC_VERSION == 8001 DIAGNOSTIC_POP; +#endif va_end (ap); return elfcore_write_note (abfd, buf, bufsiz, diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index 30246740076..5e9251bdb9f 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -2411,16 +2411,18 @@ ppc_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type, ...) va_start (ap, note_type); memset (data, 0, sizeof (data)); strncpy (data + 32, va_arg (ap, const char *), 16); +#if GCC_VERSION == 8001 DIAGNOSTIC_PUSH; /* GCC 8.1 warns about 80 equals destination size with -Wstringop-truncation: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643 */ -#if GCC_VERSION == 8001 DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION; #endif strncpy (data + 48, va_arg (ap, const char *), 80); +#if GCC_VERSION == 8001 DIAGNOSTIC_POP; +#endif va_end (ap); return elfcore_write_note (abfd, buf, bufsiz, "CORE", note_type, data, sizeof (data)); diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c index ebda1dacdcc..56008a13eb2 100644 --- a/bfd/elf32-s390.c +++ b/bfd/elf32-s390.c @@ -3951,16 +3951,18 @@ elf_s390_write_core_note (bfd *abfd, char *buf, int *bufsiz, va_end (ap); strncpy (data + 28, fname, 16); +#if GCC_VERSION == 8001 DIAGNOSTIC_PUSH; /* GCC 8.1 warns about 80 equals destination size with -Wstringop-truncation: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643 */ -#if GCC_VERSION == 8001 DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION; #endif strncpy (data + 44, psargs, 80); +#if GCC_VERSION == 8001 DIAGNOSTIC_POP; +#endif return elfcore_write_note (abfd, buf, bufsiz, "CORE", note_type, &data, sizeof (data)); } diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index b780f1ab13e..45d81777eb7 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -3041,16 +3041,18 @@ ppc64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type, va_start (ap, note_type); memset (data, 0, sizeof (data)); strncpy (data + 40, va_arg (ap, const char *), 16); +#if GCC_VERSION == 8001 DIAGNOSTIC_PUSH; /* GCC 8.1 warns about 80 equals destination size with -Wstringop-truncation: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643 */ -#if GCC_VERSION == 8001 DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION; #endif strncpy (data + 56, va_arg (ap, const char *), 80); +#if GCC_VERSION == 8001 DIAGNOSTIC_POP; +#endif va_end (ap); return elfcore_write_note (abfd, buf, bufsiz, "CORE", note_type, data, sizeof (data)); diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index 93a3c7c22ac..ea10a892664 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -3760,16 +3760,18 @@ elf_s390_write_core_note (bfd *abfd, char *buf, int *bufsiz, va_end (ap); strncpy (data + 40, fname, 16); +#if GCC_VERSION == 8001 DIAGNOSTIC_PUSH; /* GCC 8.1 warns about 80 equals destination size with -Wstringop-truncation: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643 */ -#if GCC_VERSION == 8001 DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION; #endif strncpy (data + 56, psargs, 80); +#if GCC_VERSION == 8001 DIAGNOSTIC_POP; +#endif return elfcore_write_note (abfd, buf, bufsiz, "CORE", note_type, &data, sizeof (data)); } diff --git a/bfd/elfxx-aarch64.c b/bfd/elfxx-aarch64.c index 61a5ffb8a81..af02f2e48e1 100644 --- a/bfd/elfxx-aarch64.c +++ b/bfd/elfxx-aarch64.c @@ -640,16 +640,18 @@ _bfd_aarch64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_ty va_start (ap, note_type); memset (data, 0, sizeof (data)); strncpy (data + 40, va_arg (ap, const char *), 16); +#if GCC_VERSION == 8001 DIAGNOSTIC_PUSH; /* GCC 8.1 warns about 80 equals destination size with -Wstringop-truncation: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643 */ -#if GCC_VERSION == 8001 DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION; #endif strncpy (data + 56, va_arg (ap, const char *), 80); +#if GCC_VERSION == 8001 DIAGNOSTIC_POP; +#endif va_end (ap); return elfcore_write_note (abfd, buf, bufsiz, "CORE", diff --git a/include/ChangeLog b/include/ChangeLog index e7d6d6657f3..035b3ca2177 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,7 @@ +2018-07-06 Alan Modra + + * diagnostics.h: Comment on macro usage. + 2018-07-05 Simon Marchi * diagnostics.h (DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS): diff --git a/include/diagnostics.h b/include/diagnostics.h index 34fc01b85bd..9e9d1a832f3 100644 --- a/include/diagnostics.h +++ b/include/diagnostics.h @@ -16,6 +16,20 @@ #ifndef DIAGNOSTICS_H #define DIAGNOSTICS_H +/* If at all possible, fix the source rather than using these macros + to silence warnings. If you do use these macros be aware that + you'll need to condition their use on particular compiler versions, + which can be done for gcc using ansidecl.h's GCC_VERSION macro. + + 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. + + The other macros have restrictions too, for example gcc-5, gcc-6 + and gcc-7 warn that -Wstringop-truncation is unknown, unless you + also add DIAGNOSTIC_IGNORE ("-Wpragma"). */ + #ifdef __GNUC__ # define DIAGNOSTIC_PUSH _Pragma ("GCC diagnostic push") # define DIAGNOSTIC_POP _Pragma ("GCC diagnostic pop") -- 2.30.2