...

From 3e729fff4a79bf4887ef7df94bd4502aa22d9852 Mon Sep 17 00:00:00 2001
From: Christian Franke <[email protected]>
Date: Fri, 13 Sep 2019 21:20:19 +0200
Subject: [PATCH 1/2] headers: _FORTIFY_SOURCE: Use __builtin_va_arg_pack()
 only if needed.

GCC may report an error if the address of an inline function with
_buildin_va_arg_pack() is used.  Keep the old inline functions if
_FORTIFY_SOURCE is disabled.

Signed-off-by: Christian Franke <[email protected]>
---
 mingw-w64-headers/crt/_mingw_mac.h | 10 +++---
 mingw-w64-headers/crt/stdio.h      | 51 ++++++++++++++----------------
 2 files changed, 30 insertions(+), 31 deletions(-)

diff --git a/mingw-w64-headers/crt/_mingw_mac.h 
b/mingw-w64-headers/crt/_mingw_mac.h
index 7b797a9f..17f6d3c8 100644
--- a/mingw-w64-headers/crt/_mingw_mac.h
+++ b/mingw-w64-headers/crt/_mingw_mac.h
@@ -297,12 +297,8 @@
 #if __MINGW_GNUC_PREREQ(4, 3) && !defined(__clang__)
 #  define __mingw_attribute_artificial \
      __attribute__((__artificial__))
-#  define __mingw_va_arg_pack_ovr __mingw_ovr \
-     __attribute__((__always_inline__,  __gnu_inline__)) \
-     __mingw_attribute_artificial
 #else
 #  define __mingw_attribute_artificial
-#  undef __mingw_va_arg_pack_ovr
 #endif
 
 #if _FORTIFY_SOURCE > 0 && __OPTIMIZE__ > 0 && __MINGW_GNUC_PREREQ(4, 1)
@@ -345,6 +341,12 @@
 #  define __mingw_bos_ovr __mingw_ovr
 #endif /* __MINGW_FORTIFY_LEVEL > 0 */
 
+#if __MINGW_FORTIFY_LEVEL > 0 && __MINGW_GNUC_PREREQ(4, 3) && 
!defined(__clang__)
+#  define __MINGW_FORTIFY_VA_ARG 1
+#else
+#  define __MINGW_FORTIFY_VA_ARG 0
+#endif
+
 /* Enable workaround for ABI incompatibility on affected platforms */
 #ifndef WIDL_EXPLICIT_AGGREGATE_RETURNS
 #if defined(__GNUC__) && defined(__cplusplus) && (defined(__x86_64__) || 
defined(__i386__))
diff --git a/mingw-w64-headers/crt/stdio.h b/mingw-w64-headers/crt/stdio.h
index 75fb4f2d..2bee3a11 100644
--- a/mingw-w64-headers/crt/stdio.h
+++ b/mingw-w64-headers/crt/stdio.h
@@ -354,24 +354,22 @@ int printf (const char *__format, ...)
   return __retval;
 }
 
-#ifdef __mingw_va_arg_pack_ovr
+#if __MINGW_FORTIFY_VA_ARG
 
-__mingw_va_arg_pack_ovr
+__mingw_bos_ovr
 __attribute__((__format__ (gnu_printf, 2, 3))) __MINGW_ATTRIB_NONNULL(2)
 int sprintf (char *__stream, const char *__format, ...)
 {
-#if __MINGW_FORTIFY_LEVEL > 0
   if (__mingw_bos_known(__stream)) {
     int __retval = __mingw_snprintf( __stream, __mingw_bos(__stream), 
__format, __builtin_va_arg_pack() );
     if (__retval >= 0)
       __mingw_bos_ptr_chk(__stream, (size_t)__retval + 1);
     return __retval;
   }
-#endif
   return __mingw_sprintf( __stream, __format, __builtin_va_arg_pack() );
 }
 
-#else /* !__mingw_va_arg_pack_ovr */
+#else /* !__MINGW_FORTIFY_VA_ARG */
 
 __mingw_ovr
 __attribute__((__format__ (gnu_printf, 2, 3))) __MINGW_ATTRIB_NONNULL(2)
@@ -384,7 +382,7 @@ int sprintf (char *__stream, const char *__format, ...)
   return __retval;
 }
 
-#endif /* __mingw_va_arg_pack_ovr */
+#endif /* __MINGW_FORTIFY_VA_ARG */
 
 __mingw_ovr
 __attribute__((__format__ (gnu_printf, 2, 0))) __MINGW_ATTRIB_NONNULL(2)
@@ -416,19 +414,17 @@ int vsprintf (char *__stream, const char *__format, 
__builtin_va_list __local_ar
 }
 /* #ifndef __NO_ISOCEXT */  /* externs in libmingwex.a */
 
-#ifdef __mingw_va_arg_pack_ovr
+#if __MINGW_FORTIFY_VA_ARG
 
-__mingw_va_arg_pack_ovr
+__mingw_bos_ovr
 __attribute__((__format__ (gnu_printf, 3, 4))) __MINGW_ATTRIB_NONNULL(3)
 int snprintf (char *__stream, size_t __n, const char *__format, ...)
 {
-#if __MINGW_FORTIFY_LEVEL > 0
   __mingw_bos_ptr_chk_warn(__stream, __n);
-#endif
   return __mingw_snprintf( __stream, __n, __format, __builtin_va_arg_pack() );
 }
 
-#else /* !__mingw_va_arg_pack_ovr */
+#else /* !__MINGW_FORTIFY_VA_ARG */
 
 __mingw_ovr
 __attribute__((__format__ (gnu_printf, 3, 4))) __MINGW_ATTRIB_NONNULL(3)
@@ -441,7 +437,7 @@ int snprintf (char *__stream, size_t __n, const char 
*__format, ...)
   return __retval;
 }
 
-#endif /* __mingw_va_arg_pack_ovr */
+#endif /* __MINGW_FORTIFY_VA_ARG */
 
 __mingw_bos_ovr
 __attribute__((__format__ (gnu_printf, 3, 0))) __MINGW_ATTRIB_NONNULL(3)
@@ -873,19 +869,17 @@ char * tmpnam(char * __dst)
   int __cdecl __ms_snprintf(char * __restrict__ s, size_t n, const char * 
__restrict__  format, ...);
 
 #ifndef __NO_ISOCEXT
-#ifdef __mingw_va_arg_pack_ovr
+#if __MINGW_FORTIFY_VA_ARG
 
-__mingw_va_arg_pack_ovr
+__mingw_bos_ovr
 __attribute__((__format__ (ms_printf, 3, 4))) __MINGW_ATTRIB_NONNULL(3)
-int snprintf (char * __restrict__ __stream, size_t __n, const char * 
__restrict__ __format, ...)
+int snprintf (char *__stream, size_t __n, const char *__format, ...)
 {
-#if __MINGW_FORTIFY_LEVEL > 0
   __mingw_bos_ptr_chk_warn(__stream, __n);
-#endif
   return __ms_snprintf(__stream, __n, __format, __builtin_va_arg_pack());
 }
 
-#else /* !__mingw_va_arg_pack_ovr */
+#else /* !__MINGW_FORTIFY_VA_ARG */
 
 __mingw_ovr
 __attribute__((__format__ (ms_printf, 3, 4))) __MINGW_ATTRIB_NONNULL(3)
@@ -898,13 +892,12 @@ int snprintf (char * __restrict__ __stream, size_t __n, 
const char * __restrict_
   return __retval;
 }
 
-#endif /* !__mingw_va_arg_pack_ovr */
+#endif /* !__MINGW_FORTIFY_VA_ARG */
 #endif /* !__NO_ISOCEXT */
 
-#if __MINGW_FORTIFY_LEVEL > 0
+#if __MINGW_FORTIFY_VA_ARG
 
 int __cdecl __mingw_call_ms_sprintf(char * __restrict__, const char * 
__restrict__, ...) __MINGW_ASM_CALL(sprintf);
-int __cdecl __mingw_call_ms_vsprintf(char * __restrict__, const char * 
__restrict__, va_list) __MINGW_ASM_CALL(vsprintf);
 
 __mingw_bos_extern_ovr
 __attribute__((__format__ (ms_printf, 2, 3))) __MINGW_ATTRIB_NONNULL(2)
@@ -919,6 +912,12 @@ int sprintf (char * __restrict__ __stream, const char * 
__restrict__ __format, .
   return __mingw_call_ms_sprintf( __stream, __format, __builtin_va_arg_pack() 
);
 }
 
+#endif /* __MINGW_FORTIFY_VA_ARG */
+
+#if __MINGW_FORTIFY_LEVEL > 0
+
+int __cdecl __mingw_call_ms_vsprintf(char * __restrict__, const char * 
__restrict__, va_list) __MINGW_ASM_CALL(vsprintf);
+
 __mingw_bos_extern_ovr
 __attribute__((__format__ (ms_printf, 2, 0))) __MINGW_ATTRIB_NONNULL(2)
 int vsprintf (char * __restrict__ __stream, const char * __restrict__ 
__format, va_list __local_argv)
@@ -1096,19 +1095,17 @@ int vwprintf (const wchar_t *__format, 
__builtin_va_list __local_argv)
 
 #ifndef __NO_ISOCEXT  /* externs in libmingwex.a */
 
-#ifdef __mingw_va_arg_pack_ovr
+#if __MINGW_FORTIFY_VA_ARG
 
-__mingw_va_arg_pack_ovr
+__mingw_bos_ovr
 /* __attribute__((__format__ (gnu_wprintf, 3, 4))) */ __MINGW_ATTRIB_NONNULL(3)
 int snwprintf (wchar_t *__stream, size_t __n, const wchar_t *__format, ...)
 {
-#if __MINGW_FORTIFY_LEVEL > 0
   __mingw_bos_ptr_chk_warn(__stream, __n * sizeof(wchar_t));
-#endif
   return __mingw_snwprintf( __stream, __n, __format, __builtin_va_arg_pack() );
 }
 
-#else /* !__mingw_va_arg_pack_ovr */
+#else /* !__MINGW_FORTIFY_VA_ARG */
 
 __mingw_ovr
 /* __attribute__((__format__ (gnu_wprintf, 3, 4))) */ __MINGW_ATTRIB_NONNULL(3)
@@ -1121,7 +1118,7 @@ int snwprintf (wchar_t *__stream, size_t __n, const 
wchar_t *__format, ...)
   return __retval;
 }
 
-#endif /* __mingw_va_arg_pack_ovr */
+#endif /* __MINGW_FORTIFY_VA_ARG */
 
 __mingw_bos_ovr
 /* __attribute__((__format__ (gnu_wprintf, 3, 0))) */ __MINGW_ATTRIB_NONNULL(3)
-- 
2.21.0

_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to