forked from rpms/glibc
		
	ppc64le: Increase Clang compatibility of float128 redirects (#2100546)
This commit is contained in:
		
							parent
							
								
									5d92a61711
								
							
						
					
					
						commit
						70cb41fd34
					
				
							
								
								
									
										321
									
								
								glibc-swbz27087.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										321
									
								
								glibc-swbz27087.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,321 @@ | ||||
| Temporary patch to fix Clang incompatibility before upstream commit. | ||||
| 
 | ||||
| Author: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com> | ||||
| Date:   Thu Jun 30 19:05:43 2022 -0300 | ||||
| 
 | ||||
|     Apply asm redirections in stdio.h before first use [BZ #27087] | ||||
| 
 | ||||
|     Changes since v1: | ||||
|      - Removed the duplicated inclusion of bits/floatn.h. | ||||
| 
 | ||||
|     I plan to backport this fix to at least glibc 2.35. | ||||
| 
 | ||||
| diff --git a/include/bits/stdio2-dec.h b/include/bits/stdio2-dec.h
 | ||||
| new file mode 100644 | ||||
| index 0000000000000000..4d74e4bf82ceb475
 | ||||
| --- /dev/null
 | ||||
| +++ b/include/bits/stdio2-dec.h
 | ||||
| @@ -0,0 +1 @@
 | ||||
| +#include <libio/bits/stdio2-dec.h>
 | ||||
| diff --git a/libio/Makefile b/libio/Makefile
 | ||||
| index e97387743fefc651..13ca515fd9685416 100644
 | ||||
| --- a/libio/Makefile
 | ||||
| +++ b/libio/Makefile
 | ||||
| @@ -23,7 +23,7 @@ subdir	:= libio
 | ||||
|  include ../Makeconfig | ||||
|   | ||||
|  headers	:= stdio.h \ | ||||
| -	   bits/stdio.h bits/stdio2.h bits/stdio-ldbl.h \
 | ||||
| +	   bits/stdio.h bits/stdio2.h bits/stdio2-dec.h bits/stdio-ldbl.h \
 | ||||
|  	   bits/types/FILE.h bits/types/__FILE.h bits/types/struct_FILE.h \ | ||||
|  	   bits/types/__fpos_t.h bits/types/__fpos64_t.h \ | ||||
|  	   bits/types/cookie_io_functions_t.h | ||||
| diff --git a/libio/bits/stdio2-dec.h b/libio/bits/stdio2-dec.h
 | ||||
| new file mode 100644 | ||||
| index 0000000000000000..80ab10bccf50fdfd
 | ||||
| --- /dev/null
 | ||||
| +++ b/libio/bits/stdio2-dec.h
 | ||||
| @@ -0,0 +1,110 @@
 | ||||
| +/* Checking macros for stdio functions. Declarations only.
 | ||||
| +   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 | ||||
| +   This file is part of the GNU C Library.
 | ||||
| +
 | ||||
| +   The GNU C Library is free software; you can redistribute it and/or
 | ||||
| +   modify it under the terms of the GNU Lesser General Public
 | ||||
| +   License as published by the Free Software Foundation; either
 | ||||
| +   version 2.1 of the License, or (at your option) any later version.
 | ||||
| +
 | ||||
| +   The GNU C Library is distributed in the hope that it will be useful,
 | ||||
| +   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||||
| +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | ||||
| +   Lesser General Public License for more details.
 | ||||
| +
 | ||||
| +   You should have received a copy of the GNU Lesser General Public
 | ||||
| +   License along with the GNU C Library; if not, see
 | ||||
| +   <https://www.gnu.org/licenses/>.  */
 | ||||
| +
 | ||||
| +#ifndef _BITS_STDIO2_DEC_H
 | ||||
| +#define _BITS_STDIO2_DEC_H 1
 | ||||
| +
 | ||||
| +#ifndef _STDIO_H
 | ||||
| +# error "Never include <bits/stdio2-dec.h> directly; use <stdio.h> instead."
 | ||||
| +#endif
 | ||||
| +
 | ||||
| +extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
 | ||||
| +			  const char *__restrict __format, ...) __THROW
 | ||||
| +    __attr_access ((__write_only__, 1, 3));
 | ||||
| +extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
 | ||||
| +			   const char *__restrict __format,
 | ||||
| +			   __gnuc_va_list __ap) __THROW
 | ||||
| +    __attr_access ((__write_only__, 1, 3));
 | ||||
| +
 | ||||
| +#if defined __USE_ISOC99 || defined __USE_UNIX98
 | ||||
| +
 | ||||
| +extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,
 | ||||
| +			   size_t __slen, const char *__restrict __format,
 | ||||
| +			   ...) __THROW
 | ||||
| +    __attr_access ((__write_only__, 1, 2));
 | ||||
| +extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
 | ||||
| +			    size_t __slen, const char *__restrict __format,
 | ||||
| +			    __gnuc_va_list __ap) __THROW;
 | ||||
| +
 | ||||
| +#endif
 | ||||
| +
 | ||||
| +#if __USE_FORTIFY_LEVEL > 1
 | ||||
| +
 | ||||
| +extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
 | ||||
| +			  const char *__restrict __format, ...);
 | ||||
| +extern int __printf_chk (int __flag, const char *__restrict __format, ...);
 | ||||
| +extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
 | ||||
| +			   const char *__restrict __format, __gnuc_va_list __ap);
 | ||||
| +extern int __vprintf_chk (int __flag, const char *__restrict __format,
 | ||||
| +			  __gnuc_va_list __ap);
 | ||||
| +
 | ||||
| +# ifdef __USE_XOPEN2K8
 | ||||
| +extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,
 | ||||
| +			  ...) __attribute__ ((__format__ (__printf__, 3, 4)));
 | ||||
| +extern int __vdprintf_chk (int __fd, int __flag,
 | ||||
| +			   const char *__restrict __fmt, __gnuc_va_list __arg)
 | ||||
| +     __attribute__ ((__format__ (__printf__, 3, 0)));
 | ||||
| +# endif
 | ||||
| +
 | ||||
| +# ifdef __USE_GNU
 | ||||
| +
 | ||||
| +extern int __asprintf_chk (char **__restrict __ptr, int __flag,
 | ||||
| +			   const char *__restrict __fmt, ...)
 | ||||
| +     __THROW __attribute__ ((__format__ (__printf__, 3, 4))) __wur;
 | ||||
| +extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
 | ||||
| +			    const char *__restrict __fmt, __gnuc_va_list __arg)
 | ||||
| +     __THROW __attribute__ ((__format__ (__printf__, 3, 0))) __wur;
 | ||||
| +extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
 | ||||
| +				 int __flag, const char *__restrict __format,
 | ||||
| +				 ...)
 | ||||
| +     __THROW __attribute__ ((__format__ (__printf__, 3, 4)));
 | ||||
| +extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,
 | ||||
| +				  int __flag,
 | ||||
| +				  const char *__restrict __format,
 | ||||
| +				  __gnuc_va_list __args)
 | ||||
| +     __THROW __attribute__ ((__format__ (__printf__, 3, 0)));
 | ||||
| +
 | ||||
| +# endif
 | ||||
| +#endif
 | ||||
| +
 | ||||
| +#if __GLIBC_USE (DEPRECATED_GETS)
 | ||||
| +extern char *__gets_chk (char *__str, size_t) __wur;
 | ||||
| +#endif
 | ||||
| +
 | ||||
| +extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
 | ||||
| +			  FILE *__restrict __stream)
 | ||||
| +    __wur __attr_access ((__write_only__, 1, 3));
 | ||||
| +
 | ||||
| +extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen,
 | ||||
| +			   size_t __size, size_t __n,
 | ||||
| +			   FILE *__restrict __stream) __wur;
 | ||||
| +
 | ||||
| +#ifdef __USE_GNU
 | ||||
| +extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,
 | ||||
| +				   int __n, FILE *__restrict __stream)
 | ||||
| +    __wur __attr_access ((__write_only__, 1, 3));
 | ||||
| +#endif
 | ||||
| +
 | ||||
| +#ifdef __USE_MISC
 | ||||
| +# undef fread_unlocked
 | ||||
| +extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen,
 | ||||
| +				    size_t __size, size_t __n,
 | ||||
| +				    FILE *__restrict __stream) __wur;
 | ||||
| +#endif
 | ||||
| +
 | ||||
| +#endif /* bits/stdio2-dec.h.  */
 | ||||
| diff --git a/libio/bits/stdio2.h b/libio/bits/stdio2.h
 | ||||
| index b0b655ee7a4a6e44..b1e200e7164bfd7a 100644
 | ||||
| --- a/libio/bits/stdio2.h
 | ||||
| +++ b/libio/bits/stdio2.h
 | ||||
| @@ -23,14 +23,6 @@
 | ||||
|  # error "Never include <bits/stdio2.h> directly; use <stdio.h> instead." | ||||
|  #endif | ||||
|   | ||||
| -extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
 | ||||
| -			  const char *__restrict __format, ...) __THROW
 | ||||
| -    __attr_access ((__write_only__, 1, 3));
 | ||||
| -extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
 | ||||
| -			   const char *__restrict __format,
 | ||||
| -			   __gnuc_va_list __ap) __THROW
 | ||||
| -    __attr_access ((__write_only__, 1, 3));
 | ||||
| -
 | ||||
|  #ifdef __va_arg_pack | ||||
|  __fortify_function int | ||||
|  __NTH (sprintf (char *__restrict __s, const char *__restrict __fmt, ...)) | ||||
| @@ -54,15 +46,6 @@ __NTH (vsprintf (char *__restrict __s, const char *__restrict __fmt,
 | ||||
|  } | ||||
|   | ||||
|  #if defined __USE_ISOC99 || defined __USE_UNIX98 | ||||
| -
 | ||||
| -extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,
 | ||||
| -			   size_t __slen, const char *__restrict __format,
 | ||||
| -			   ...) __THROW
 | ||||
| -    __attr_access ((__write_only__, 1, 2));
 | ||||
| -extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
 | ||||
| -			    size_t __slen, const char *__restrict __format,
 | ||||
| -			    __gnuc_va_list __ap) __THROW;
 | ||||
| -
 | ||||
|  # ifdef __va_arg_pack | ||||
|  __fortify_function int | ||||
|  __NTH (snprintf (char *__restrict __s, size_t __n, | ||||
| @@ -89,15 +72,6 @@ __NTH (vsnprintf (char *__restrict __s, size_t __n,
 | ||||
|  #endif | ||||
|   | ||||
|  #if __USE_FORTIFY_LEVEL > 1 | ||||
| -
 | ||||
| -extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
 | ||||
| -			  const char *__restrict __format, ...);
 | ||||
| -extern int __printf_chk (int __flag, const char *__restrict __format, ...);
 | ||||
| -extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
 | ||||
| -			   const char *__restrict __format, __gnuc_va_list __ap);
 | ||||
| -extern int __vprintf_chk (int __flag, const char *__restrict __format,
 | ||||
| -			  __gnuc_va_list __ap);
 | ||||
| -
 | ||||
|  # ifdef __va_arg_pack | ||||
|  __fortify_function int | ||||
|  fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...) | ||||
| @@ -136,12 +110,6 @@ vfprintf (FILE *__restrict __stream,
 | ||||
|  } | ||||
|   | ||||
|  # ifdef __USE_XOPEN2K8 | ||||
| -extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,
 | ||||
| -			  ...) __attribute__ ((__format__ (__printf__, 3, 4)));
 | ||||
| -extern int __vdprintf_chk (int __fd, int __flag,
 | ||||
| -			   const char *__restrict __fmt, __gnuc_va_list __arg)
 | ||||
| -     __attribute__ ((__format__ (__printf__, 3, 0)));
 | ||||
| -
 | ||||
|  #  ifdef __va_arg_pack | ||||
|  __fortify_function int | ||||
|  dprintf (int __fd, const char *__restrict __fmt, ...) | ||||
| @@ -162,23 +130,6 @@ vdprintf (int __fd, const char *__restrict __fmt, __gnuc_va_list __ap)
 | ||||
|  # endif | ||||
|   | ||||
|  # ifdef __USE_GNU | ||||
| -
 | ||||
| -extern int __asprintf_chk (char **__restrict __ptr, int __flag,
 | ||||
| -			   const char *__restrict __fmt, ...)
 | ||||
| -     __THROW __attribute__ ((__format__ (__printf__, 3, 4))) __wur;
 | ||||
| -extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
 | ||||
| -			    const char *__restrict __fmt, __gnuc_va_list __arg)
 | ||||
| -     __THROW __attribute__ ((__format__ (__printf__, 3, 0))) __wur;
 | ||||
| -extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
 | ||||
| -				 int __flag, const char *__restrict __format,
 | ||||
| -				 ...)
 | ||||
| -     __THROW __attribute__ ((__format__ (__printf__, 3, 4)));
 | ||||
| -extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,
 | ||||
| -				  int __flag,
 | ||||
| -				  const char *__restrict __format,
 | ||||
| -				  __gnuc_va_list __args)
 | ||||
| -     __THROW __attribute__ ((__format__ (__printf__, 3, 0)));
 | ||||
| -
 | ||||
|  #  ifdef __va_arg_pack | ||||
|  __fortify_function int | ||||
|  __NTH (asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...)) | ||||
| @@ -231,7 +182,6 @@ __NTH (obstack_vprintf (struct obstack *__restrict __obstack,
 | ||||
|  #endif | ||||
|   | ||||
|  #if __GLIBC_USE (DEPRECATED_GETS) | ||||
| -extern char *__gets_chk (char *__str, size_t) __wur;
 | ||||
|  extern char *__REDIRECT (__gets_warn, (char *__str), gets) | ||||
|       __wur __warnattr ("please use fgets or getline instead, gets can't " | ||||
|  		       "specify buffer size"); | ||||
| @@ -245,9 +195,6 @@ gets (char *__str)
 | ||||
|  } | ||||
|  #endif | ||||
|   | ||||
| -extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
 | ||||
| -			  FILE *__restrict __stream)
 | ||||
| -    __wur __attr_access ((__write_only__, 1, 3));
 | ||||
|  extern char *__REDIRECT (__fgets_alias, | ||||
|  			 (char *__restrict __s, int __n, | ||||
|  			  FILE *__restrict __stream), fgets) | ||||
| @@ -269,9 +216,6 @@ fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
 | ||||
|    return __fgets_chk (__s, sz, __n, __stream); | ||||
|  } | ||||
|   | ||||
| -extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen,
 | ||||
| -			   size_t __size, size_t __n,
 | ||||
| -			   FILE *__restrict __stream) __wur;
 | ||||
|  extern size_t __REDIRECT (__fread_alias, | ||||
|  			  (void *__restrict __ptr, size_t __size, | ||||
|  			   size_t __n, FILE *__restrict __stream), | ||||
| @@ -297,9 +241,6 @@ fread (void *__restrict __ptr, size_t __size, size_t __n,
 | ||||
|  } | ||||
|   | ||||
|  #ifdef __USE_GNU | ||||
| -extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,
 | ||||
| -				   int __n, FILE *__restrict __stream)
 | ||||
| -    __wur __attr_access ((__write_only__, 1, 3));
 | ||||
|  extern char *__REDIRECT (__fgets_unlocked_alias, | ||||
|  			 (char *__restrict __s, int __n, | ||||
|  			  FILE *__restrict __stream), fgets_unlocked) | ||||
| @@ -324,9 +265,6 @@ fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)
 | ||||
|   | ||||
|  #ifdef __USE_MISC | ||||
|  # undef fread_unlocked | ||||
| -extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen,
 | ||||
| -				    size_t __size, size_t __n,
 | ||||
| -				    FILE *__restrict __stream) __wur;
 | ||||
|  extern size_t __REDIRECT (__fread_unlocked_alias, | ||||
|  			  (void *__restrict __ptr, size_t __size, | ||||
|  			   size_t __n, FILE *__restrict __stream), | ||||
| diff --git a/libio/stdio.h b/libio/stdio.h
 | ||||
| index e6425341cec4eeaf..f2b9a10d246d5cab 100644
 | ||||
| --- a/libio/stdio.h
 | ||||
| +++ b/libio/stdio.h
 | ||||
| @@ -885,20 +885,27 @@ extern void funlockfile (FILE *__stream) __THROW;
 | ||||
|  extern int __uflow (FILE *); | ||||
|  extern int __overflow (FILE *, int); | ||||
|   | ||||
| +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
 | ||||
| +/* Declare all functions from bits/stdio2-dec.h first.  */
 | ||||
| +# include <bits/stdio2-dec.h>
 | ||||
| +#endif
 | ||||
| +
 | ||||
| +/* The following headers provide asm redirections.  These redirections must
 | ||||
| +   appear before the first usage of these functions, e.g. in bits/stdio.h.  */
 | ||||
| +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1
 | ||||
| +# include <bits/stdio-ldbl.h>
 | ||||
| +#endif
 | ||||
| +
 | ||||
|  /* If we are compiling with optimizing read this file.  It contains | ||||
|     several optimizing inline functions and macros.  */ | ||||
|  #ifdef __USE_EXTERN_INLINES | ||||
|  # include <bits/stdio.h> | ||||
|  #endif | ||||
|  #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function | ||||
| +/* Now include the function definitions and redirects too.  */
 | ||||
|  # include <bits/stdio2.h> | ||||
|  #endif | ||||
|   | ||||
| -#include <bits/floatn.h>
 | ||||
| -#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1
 | ||||
| -# include <bits/stdio-ldbl.h>
 | ||||
| -#endif
 | ||||
| -
 | ||||
|  __END_DECLS | ||||
|   | ||||
|  #endif /* <stdio.h> included.  */ | ||||
| @ -152,7 +152,7 @@ end} | ||||
| Summary: The GNU libc libraries | ||||
| Name: glibc | ||||
| Version: %{glibcversion} | ||||
| Release: 27%{?dist} | ||||
| Release: 28%{?dist} | ||||
| 
 | ||||
| # In general, GPLv2+ is used by programs, LGPLv2+ is used for | ||||
| # libraries. | ||||
| @ -223,6 +223,7 @@ Patch13: glibc-fedora-localedata-rh61908.patch | ||||
| Patch17: glibc-cs-path.patch | ||||
| Patch23: glibc-python3.patch | ||||
| Patch30: glibc-deprecated-selinux-makedb.patch | ||||
| Patch31: glibc-swbz27087.patch | ||||
| 
 | ||||
| ############################################################################## | ||||
| # Continued list of core "glibc" package information: | ||||
| @ -2177,6 +2178,9 @@ update_gconv_modules_cache () | ||||
| %files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared | ||||
| 
 | ||||
| %changelog | ||||
| * Tue Jul  5 2022 Florian Weimer <fweimer@redhat.com> - 2.35.9000-28 | ||||
| - ppc64le: Increase Clang compatibility of float128 redirects (#2100546) | ||||
| 
 | ||||
| * Tue Jul 05 2022 Florian Weimer <fweimer@redhat.com> - 2.35.9000-27 | ||||
| - Auto-sync with upstream branch master, | ||||
|   commit 7519dee356a0ab21c8990e59ed05dd48a4e573a0: | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user