summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2018-07-06 15:07:08 +0930
committerAlan Modra <amodra@gmail.com>2018-07-09 17:57:57 +0930
commite55992d4ac599571d3b61636252e7db443bd8e51 (patch)
tree69b832e26c59272ca98d9bd52ed7a5cb44a82ffd
parent1cbba2d24031a15c527fee4f6c084c8c82aec919 (diff)
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. (cherry picked from commit fe75810f8e0cc33384f22d0479506711d4014c60)
-rw-r--r--bfd/ChangeLog10
-rw-r--r--bfd/elf32-arm.c4
-rw-r--r--bfd/elf32-ppc.c4
-rw-r--r--bfd/elf32-s390.c4
-rw-r--r--bfd/elf64-ppc.c4
-rw-r--r--bfd/elf64-s390.c4
-rw-r--r--bfd/elfxx-aarch64.c4
-rw-r--r--include/ChangeLog4
-rw-r--r--include/diagnostics.h14
9 files changed, 46 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 96ddeb3e80..41fa889885 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,13 @@
+2018-07-06 Alan Modra <amodra@gmail.com>
+
+ * 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 <jimw@sifive.com>
* config.bfd (riscv32*-*-*): Renamed from riscv32-*-*.
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 870111b5ed..a9ccc5b498 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 3024674007..5e9251bdb9 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 ebda1dacdc..56008a13eb 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 b780f1ab13..45d81777eb 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 93a3c7c22a..ea10a89266 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 61a5ffb8a8..af02f2e48e 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 8f11f79ef4..0fa029e77a 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,7 @@
+2018-07-06 Alan Modra <amodra@gmail.com>
+
+ * diagnostics.h: Comment on macro usage.
+
2018-06-29 Tamar Christina <tamar.christina@arm.com>
PR binutils/23192
diff --git a/include/diagnostics.h b/include/diagnostics.h
index 4a674106dc..51cc769bf6 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")