1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-08 17:42:12 +03:00

Prepare redirections for IEEE long double on powerpc64le

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>
This commit is contained in:
Gabriel F. T. Gomes
2019-12-19 12:06:09 -03:00
committed by Paul E. Murphy
parent 1f1c65e232
commit e4a3999213
14 changed files with 159 additions and 43 deletions

View File

@@ -400,9 +400,12 @@ extern int sscanf (const char *__restrict __s,
const char *__restrict __format, ...) __THROW;
/* For historical reasons, the C99-compliant versions of the scanf
functions are at alternative names. When __LDBL_COMPAT is in
effect, this is handled in bits/stdio-ldbl.h. */
#if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT
functions are at alternative names. When __LDBL_COMPAT or
__LONG_DOUBLE_USES_FLOAT128 are in effect, this is handled in
bits/stdio-ldbl.h. */
#include <bits/floatn.h>
#if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT \
&& __LONG_DOUBLE_USES_FLOAT128 == 0
# ifdef __REDIRECT
extern int __REDIRECT (fscanf, (FILE *__restrict __stream,
const char *__restrict __format, ...),
@@ -447,7 +450,8 @@ extern int vsscanf (const char *__restrict __s,
/* Same redirection as above for the v*scanf family. */
# if !__GLIBC_USE (DEPRECATED_SCANF)
# if defined __REDIRECT && !defined __LDBL_COMPAT
# if defined __REDIRECT && !defined __LDBL_COMPAT \
&& __LONG_DOUBLE_USES_FLOAT128 == 0
extern int __REDIRECT (vfscanf,
(FILE *__restrict __s,
const char *__restrict __format, __gnuc_va_list __arg),
@@ -866,7 +870,9 @@ extern int __overflow (FILE *, int);
#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
# include <bits/stdio2.h>
#endif
#ifdef __LDBL_COMPAT
#include <bits/floatn.h>
#if defined __LDBL_COMPAT || __LONG_DOUBLE_USES_FLOAT128 == 1
# include <bits/stdio-ldbl.h>
#endif