Martin Storsjö wrote:
On Fri, 13 Sep 2019, Christian Franke wrote:
...
__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, ...)
{
Technically, this bit of the patch is a stray change in this context.
Garbage from dropped previous patch, sorry. New version attached.
From 0a7384e23fe4b8122ca2e575eeff0004884b041f Mon Sep 17 00:00:00 2001
From: Christian Franke <[email protected]>
Date: Fri, 13 Sep 2019 22:34:23 +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 | 49 ++++++++++++++----------------
2 files changed, 29 insertions(+), 30 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..d6289eba 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, ...)
{
-#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