mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-26 15:00:06 +00:00
e4a3999213
All functions that have a format string, which can consume a long double argument, must have one version for each long double format supported on a platform. On powerpc64le, these functions currently have two versions (i.e.: long double with the same format as double, and long double with IBM Extended Precision format). Support for a third long double format option (i.e. long double with IEEE long double format) is being prepared and all the aforementioned functions now have a third version (not yet exported on the master branch, but the code is in). For these functions to get selected (during build time), references to them in user programs (or dependent libraries) must get redirected to the aforementioned new versions of the functions. This patch installs the header magic required to perform such redirections. Notice, however, that since the redirections only happen when __LONG_DOUBLE_USES_FLOAT128 is set to 1, and no platform (including powerpc64le) currently does it, no redirections actually happen. Redirections and the exporting of the new functions will happen at the same time (when powerpc64le adds ldbl-128ibm-compat to their Implies. Reviewed-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com> Reviewed-by: Paul E. Murphy <murphyp@linux.vnet.ibm.com>
109 lines
3.4 KiB
C
109 lines
3.4 KiB
C
/* -mlong-double-64 compatibility mode for stdio functions.
|
|
Copyright (C) 2006-2020 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 _STDIO_H
|
|
# error "Never include <bits/stdio-ldbl.h> directly; use <stdio.h> instead."
|
|
#endif
|
|
|
|
__LDBL_REDIR_DECL (fprintf)
|
|
__LDBL_REDIR_DECL (printf)
|
|
__LDBL_REDIR_DECL (sprintf)
|
|
__LDBL_REDIR_DECL (vfprintf)
|
|
__LDBL_REDIR_DECL (vprintf)
|
|
__LDBL_REDIR_DECL (vsprintf)
|
|
#if !__GLIBC_USE (DEPRECATED_SCANF)
|
|
# if defined __LDBL_COMPAT
|
|
__LDBL_REDIR1_DECL (fscanf, __nldbl___isoc99_fscanf)
|
|
__LDBL_REDIR1_DECL (scanf, __nldbl___isoc99_scanf)
|
|
__LDBL_REDIR1_DECL (sscanf, __nldbl___isoc99_sscanf)
|
|
# elif __LONG_DOUBLE_USES_FLOAT128 == 1
|
|
__LDBL_REDIR1_DECL (fscanf, __isoc99_fscanfieee128)
|
|
__LDBL_REDIR1_DECL (scanf, __isoc99_scanfieee128)
|
|
__LDBL_REDIR1_DECL (sscanf, __isoc99_sscanfieee128)
|
|
# else
|
|
# error bits/stdlib-ldbl.h included when no ldbl redirections are required.
|
|
# endif
|
|
#else
|
|
__LDBL_REDIR_DECL (fscanf)
|
|
__LDBL_REDIR_DECL (scanf)
|
|
__LDBL_REDIR_DECL (sscanf)
|
|
#endif
|
|
|
|
#if defined __USE_ISOC99 || defined __USE_UNIX98
|
|
__LDBL_REDIR_DECL (snprintf)
|
|
__LDBL_REDIR_DECL (vsnprintf)
|
|
#endif
|
|
|
|
#ifdef __USE_ISOC99
|
|
# if !__GLIBC_USE (DEPRECATED_SCANF)
|
|
# if defined __LDBL_COMPAT
|
|
__LDBL_REDIR1_DECL (vfscanf, __nldbl___isoc99_vfscanf)
|
|
__LDBL_REDIR1_DECL (vscanf, __nldbl___isoc99_vscanf)
|
|
__LDBL_REDIR1_DECL (vsscanf, __nldbl___isoc99_vsscanf)
|
|
# elif __LONG_DOUBLE_USES_FLOAT128 == 1
|
|
__LDBL_REDIR1_DECL (vfscanf, __isoc99_vfscanfieee128)
|
|
__LDBL_REDIR1_DECL (vscanf, __isoc99_vscanfieee128)
|
|
__LDBL_REDIR1_DECL (vsscanf, __isoc99_vsscanfieee128)
|
|
# else
|
|
# error bits/stdlib-ldbl.h included when no ldbl redirections are required.
|
|
# endif
|
|
# else
|
|
__LDBL_REDIR_DECL (vfscanf)
|
|
__LDBL_REDIR_DECL (vsscanf)
|
|
__LDBL_REDIR_DECL (vscanf)
|
|
# endif
|
|
#endif
|
|
|
|
#ifdef __USE_XOPEN2K8
|
|
__LDBL_REDIR_DECL (vdprintf)
|
|
__LDBL_REDIR_DECL (dprintf)
|
|
#endif
|
|
|
|
#ifdef __USE_GNU
|
|
__LDBL_REDIR_DECL (vasprintf)
|
|
__LDBL_REDIR2_DECL (asprintf)
|
|
__LDBL_REDIR_DECL (asprintf)
|
|
__LDBL_REDIR_DECL (obstack_printf)
|
|
__LDBL_REDIR_DECL (obstack_vprintf)
|
|
#endif
|
|
|
|
#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
|
|
__LDBL_REDIR2_DECL (sprintf_chk)
|
|
__LDBL_REDIR2_DECL (vsprintf_chk)
|
|
# if defined __USE_ISOC99 || defined __USE_UNIX98
|
|
__LDBL_REDIR2_DECL (snprintf_chk)
|
|
__LDBL_REDIR2_DECL (vsnprintf_chk)
|
|
# endif
|
|
# if __USE_FORTIFY_LEVEL > 1
|
|
__LDBL_REDIR2_DECL (fprintf_chk)
|
|
__LDBL_REDIR2_DECL (printf_chk)
|
|
__LDBL_REDIR2_DECL (vfprintf_chk)
|
|
__LDBL_REDIR2_DECL (vprintf_chk)
|
|
# ifdef __USE_XOPEN2K8
|
|
__LDBL_REDIR2_DECL (dprintf_chk)
|
|
__LDBL_REDIR2_DECL (vdprintf_chk)
|
|
# endif
|
|
# ifdef __USE_GNU
|
|
__LDBL_REDIR2_DECL (asprintf_chk)
|
|
__LDBL_REDIR2_DECL (vasprintf_chk)
|
|
__LDBL_REDIR2_DECL (obstack_printf_chk)
|
|
__LDBL_REDIR2_DECL (obstack_vprintf_chk)
|
|
# endif
|
|
# endif
|
|
#endif
|