From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS31976 209.132.180.0/23 X-Spam-Status: No, score=-3.2 required=3.0 tests=AWL,BAYES_00,BODY_8BITS, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id B40141F45E for ; Mon, 17 Feb 2020 14:34:43 +0000 (UTC) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:subject:from:to:references:message-id:date :mime-version:in-reply-to:content-type :content-transfer-encoding; q=dns; s=default; b=LT4tGvDbzZvgRVN9 gDskdPo4ccTLcXhx537ghZ2QjAN3+KAAo6xIvXSp+c3d2i0V9LUBaRCbrLNNAXf2 m583rcXs/PNN35f55Z8Cv91QtPN9X04bbPD9M5OcTrRSkWtxaV7zW3SHmdnOlJSl xGfqMyI2qOhigcvKVVl/fCpDSsw= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:subject:from:to:references:message-id:date :mime-version:in-reply-to:content-type :content-transfer-encoding; s=default; bh=ZNxmAGfkINBbXZRBWwazQG JmZKo=; b=YmhTLKDptIo2tvSgIIfLd9Uu6xoAPbX0t2xyT9vC8gsJU8SmRlqe40 gZ23uBl1SVKqhc8fuH+EYPyi9VTy7nQdSK0x5rabsN9qhS0We4qNFXLq1goMCahq aZysHhaY1x8Wzr72Fj32qgV7PyuFo7Kxfd67Dhb3JBosJnQPw7m6c= Received: (qmail 119618 invoked by alias); 17 Feb 2020 14:34:40 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 119606 invoked by uid 89); 17 Feb 2020 14:34:40 -0000 Authentication-Results: sourceware.org; auth=none X-HELO: mx0a-001b2d01.pphosted.com Subject: Re: [PATCH 1/6] Prepare redirections for IEEE long double on powerpc64le From: Paul E Murphy To: libc-alpha@sourceware.org References: <130b2e38-c49e-b2e1-52e8-86a435e24105@linux.ibm.com> Message-ID: <4118387f-ea6f-6d62-581e-1472d0954307@linux.ibm.com> Date: Mon, 17 Feb 2020 08:34:31 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 In-Reply-To: <130b2e38-c49e-b2e1-52e8-86a435e24105@linux.ibm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Ping x2. This has been run through all configs of many-build-glibcs.py without any apparent issues. Hearing nothing, I will commit this later today. On 2/10/20 3:32 PM, Paul E Murphy wrote: > Ping? If no objections I would like to commit this next Monday. > > I was under the incorrect assumption this patch had been sent out > in December as-is.  This is the continuation of > https://sourceware.org/ml/libc-alpha/2019-12/msg00515.html based on my > feedback from https://sourceware.org/ml/libc-alpha/2019-12/msg00521.html . > > On 2/3/20 3:10 PM, Paul E. Murphy wrote: >> From: Gabriel F. T. Gomes >> >> New since v4. >> >>    - Thanks, Paul, for the suggestion to split it from the last patch. >> >> -- 8< -- >> 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. >> --- >>   argp/argp.h               |  3 ++- >>   libio/bits/stdio-ldbl.h   | 46 ++++++++++++++++++++++++++------------- >>   libio/stdio.h             | 16 +++++++++----- >>   misc/bits/syslog-ldbl.h   |  4 ++-- >>   misc/err.h                |  3 ++- >>   misc/error.h              |  6 +++-- >>   misc/sys/cdefs.h          | 38 ++++++++++++++++++++++++++++++-- >>   misc/sys/syslog.h         |  4 +++- >>   stdio-common/printf.h     |  3 ++- >>   stdlib/bits/stdlib-ldbl.h | 22 +++++++++++++++++++ >>   stdlib/monetary.h         |  3 ++- >>   stdlib/stdlib.h           |  4 +++- >>   wcsmbs/bits/wchar-ldbl.h  | 36 +++++++++++++++++++++++++----- >>   wcsmbs/wchar.h            | 14 +++++++----- >>   14 files changed, 159 insertions(+), 43 deletions(-) >> >> diff --git a/argp/argp.h b/argp/argp.h >> index 329aae097f..358d9b43cd 100644 >> --- a/argp/argp.h >> +++ b/argp/argp.h >> @@ -554,7 +554,8 @@ __NTH (__option_is_end (const struct argp_option >> *__opt)) >>   # endif >>   #endif /* Use extern inlines.  */ >> >> -#ifdef __LDBL_COMPAT >> +#include >> +#if defined __LDBL_COMPAT || __LONG_DOUBLE_USES_FLOAT128 == 1 >>   # include >>   #endif >> >> diff --git a/libio/bits/stdio-ldbl.h b/libio/bits/stdio-ldbl.h >> index 6626412fce..3bb9f7dd2c 100644 >> --- a/libio/bits/stdio-ldbl.h >> +++ b/libio/bits/stdio-ldbl.h >> @@ -27,9 +27,17 @@ __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) >> @@ -43,9 +51,17 @@ __LDBL_REDIR_DECL (vsnprintf) >> >>   #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) >> @@ -60,33 +76,33 @@ __LDBL_REDIR_DECL (dprintf) >> >>   #ifdef __USE_GNU >>   __LDBL_REDIR_DECL (vasprintf) >> -__LDBL_REDIR_DECL (__asprintf) >> +__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_REDIR_DECL (__sprintf_chk) >> -__LDBL_REDIR_DECL (__vsprintf_chk) >> +__LDBL_REDIR2_DECL (sprintf_chk) >> +__LDBL_REDIR2_DECL (vsprintf_chk) >>   # if defined __USE_ISOC99 || defined __USE_UNIX98 >> -__LDBL_REDIR_DECL (__snprintf_chk) >> -__LDBL_REDIR_DECL (__vsnprintf_chk) >> +__LDBL_REDIR2_DECL (snprintf_chk) >> +__LDBL_REDIR2_DECL (vsnprintf_chk) >>   # endif >>   # if __USE_FORTIFY_LEVEL > 1 >> -__LDBL_REDIR_DECL (__fprintf_chk) >> -__LDBL_REDIR_DECL (__printf_chk) >> -__LDBL_REDIR_DECL (__vfprintf_chk) >> -__LDBL_REDIR_DECL (__vprintf_chk) >> +__LDBL_REDIR2_DECL (fprintf_chk) >> +__LDBL_REDIR2_DECL (printf_chk) >> +__LDBL_REDIR2_DECL (vfprintf_chk) >> +__LDBL_REDIR2_DECL (vprintf_chk) >>   #  ifdef __USE_XOPEN2K8 >> -__LDBL_REDIR_DECL (__dprintf_chk) >> -__LDBL_REDIR_DECL (__vdprintf_chk) >> +__LDBL_REDIR2_DECL (dprintf_chk) >> +__LDBL_REDIR2_DECL (vdprintf_chk) >>   #  endif >>   #  ifdef __USE_GNU >> -__LDBL_REDIR_DECL (__asprintf_chk) >> -__LDBL_REDIR_DECL (__vasprintf_chk) >> -__LDBL_REDIR_DECL (__obstack_printf_chk) >> -__LDBL_REDIR_DECL (__obstack_vprintf_chk) >> +__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 >> diff --git a/libio/stdio.h b/libio/stdio.h >> index 5a10a4d3ee..18e29752c4 100644 >> --- a/libio/stdio.h >> +++ b/libio/stdio.h >> @@ -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 >> +#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 >>   #endif >> -#ifdef __LDBL_COMPAT >> + >> +#include >> +#if defined __LDBL_COMPAT || __LONG_DOUBLE_USES_FLOAT128 == 1 >>   # include >>   #endif >> >> diff --git a/misc/bits/syslog-ldbl.h b/misc/bits/syslog-ldbl.h >> index fead0d4648..657b192b9b 100644 >> --- a/misc/bits/syslog-ldbl.h >> +++ b/misc/bits/syslog-ldbl.h >> @@ -27,9 +27,9 @@ __LDBL_REDIR_DECL (vsyslog) >>   #endif >> >>   #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function >> -__LDBL_REDIR_DECL (__syslog_chk) >> +__LDBL_REDIR2_DECL (syslog_chk) >> >>   # ifdef __USE_MISC >> -__LDBL_REDIR_DECL (__vsyslog_chk) >> +__LDBL_REDIR2_DECL (vsyslog_chk) >>   # endif >>   #endif >> diff --git a/misc/err.h b/misc/err.h >> index f6fd72945f..d146a55054 100644 >> --- a/misc/err.h >> +++ b/misc/err.h >> @@ -52,7 +52,8 @@ extern void errx (int __status, const char >> *__format, ...) >>   extern void verrx (int __status, const char *, __gnuc_va_list) >>        __attribute__ ((__noreturn__, __format__ (__printf__, 2, 0))); >> >> -#ifdef __LDBL_COMPAT >> +#include >> +#if defined __LDBL_COMPAT || __LONG_DOUBLE_USES_FLOAT128 == 1 >>   # include >>   #endif >> >> diff --git a/misc/error.h b/misc/error.h >> index a456695f1a..bb8a3b26a4 100644 >> --- a/misc/error.h >> +++ b/misc/error.h >> @@ -47,11 +47,13 @@ extern unsigned int error_message_count; >>      variable controls whether this mode is selected or not.  */ >>   extern int error_one_per_line; >> >> -#ifdef __LDBL_COMPAT >> +#include >> +#if defined __LDBL_COMPAT || __LONG_DOUBLE_USES_FLOAT128 == 1 >>   # include >>   #else >>   /* Do not inline error and error_at_line when long double has the same >> -   size of double, because that would invalidate the redirections to the >> +   size of double, nor when long double reuses the float128 >> +   implementation, because that would invalidate the redirections to the >>      compatibility functions.  */ >>   # if defined __extern_always_inline && defined __va_arg_pack >>   #  include >> diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h >> index ff7144f3f3..dd5f69f833 100644 >> --- a/misc/sys/cdefs.h >> +++ b/misc/sys/cdefs.h >> @@ -452,7 +452,37 @@ >>   #include >>   #include >> >> -#if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH >> +#if __LONG_DOUBLE_USES_FLOAT128 == 1 >> +# ifdef __REDIRECT >> + >> +/* Alias name defined automatically.  */ >> +#  define __LDBL_REDIR(name, proto) ... unused__ldbl_redir >> +#  define __LDBL_REDIR_DECL(name) \ >> +  extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128")); >> + >> +/* Alias name defined automatically, with leading underscores.  */ >> +#  define __LDBL_REDIR2_DECL(name) \ >> +  extern __typeof (__##name) __##name \ >> +    __asm (__ASMNAME ("__" #name "ieee128")); >> + >> +/* Alias name defined manually.  */ >> +#  define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1 >> +#  define __LDBL_REDIR1_DECL(name, alias) \ >> +  extern __typeof (name) name __asm (__ASMNAME (#alias)); >> + >> +#  define __LDBL_REDIR1_NTH(name, proto, alias) \ >> +  __REDIRECT_NTH (name, proto, alias) >> +#  define __REDIRECT_NTH_LDBL(name, proto, alias) \ >> +  __LDBL_REDIR1_NTH (name, proto, __##alias##ieee128) >> + >> +/* Unused.  */ >> +#  define __REDIRECT_LDBL(name, proto, alias) ... unused__redirect_ldbl >> +#  define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth >> + >> +# else >> +_Static_assert (0, "IEEE 128-bits long double requires redirection on >> this platform"); >> +# endif >> +#elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined >> __NO_LONG_DOUBLE_MATH >>   # define __LDBL_COMPAT 1 >>   # ifdef __REDIRECT >>   #  define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, >> alias) >> @@ -461,6 +491,8 @@ >>   #  define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH >> (name, proto, alias) >>   #  define __LDBL_REDIR_NTH(name, proto) \ >>     __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) >> +#  define __LDBL_REDIR2_DECL(name) \ >> +  extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" >> #name)); >>   #  define __LDBL_REDIR1_DECL(name, alias) \ >>     extern __typeof (name) name __asm (__ASMNAME (#alias)); >>   #  define __LDBL_REDIR_DECL(name) \ >> @@ -471,11 +503,13 @@ >>     __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias) >>   # endif >>   #endif >> -#if !defined __LDBL_COMPAT || !defined __REDIRECT >> +#if (!defined __LDBL_COMPAT && __LONG_DOUBLE_USES_FLOAT128 == 0) \ >> +    || !defined __REDIRECT >>   # define __LDBL_REDIR1(name, proto, alias) name proto >>   # define __LDBL_REDIR(name, proto) name proto >>   # define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW >>   # define __LDBL_REDIR_NTH(name, proto) name proto __THROW >> +# define __LDBL_REDIR2_DECL(name) >>   # define __LDBL_REDIR_DECL(name) >>   # ifdef __REDIRECT >>   #  define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, >> proto, alias) >> diff --git a/misc/sys/syslog.h b/misc/sys/syslog.h >> index ee01478c4b..c000b8e915 100644 >> --- a/misc/sys/syslog.h >> +++ b/misc/sys/syslog.h >> @@ -206,7 +206,9 @@ extern void vsyslog (int __pri, const char *__fmt, >> __gnuc_va_list __ap) >>   #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function >>   # include >>   #endif >> -#ifdef __LDBL_COMPAT >> + >> +#include >> +#if defined __LDBL_COMPAT || __LONG_DOUBLE_USES_FLOAT128 == 1 >>   # include >>   #endif >> >> diff --git a/stdio-common/printf.h b/stdio-common/printf.h >> index ad3c8a4254..00bedebfdb 100644 >> --- a/stdio-common/printf.h >> +++ b/stdio-common/printf.h >> @@ -182,7 +182,8 @@ extern int printf_size_info (const struct >> printf_info *__restrict >>                    __info, size_t __n, int *__restrict __argtypes) >>        __THROW; >> >> -#ifdef __LDBL_COMPAT >> +#include >> +#if defined __LDBL_COMPAT || __LONG_DOUBLE_USES_FLOAT128 == 1 >>   # include >>   #endif >> >> diff --git a/stdlib/bits/stdlib-ldbl.h b/stdlib/bits/stdlib-ldbl.h >> index 5c6294ed9b..2469474532 100644 >> --- a/stdlib/bits/stdlib-ldbl.h >> +++ b/stdlib/bits/stdlib-ldbl.h >> @@ -21,21 +21,43 @@ >>   #endif >> >>   #ifdef    __USE_ISOC99 >> +# ifdef __LDBL_COMPAT >>   __LDBL_REDIR1_DECL (strtold, strtod) >> +# else >> +__LDBL_REDIR1_DECL (strtold, __strtoieee128) >> +# endif >>   #endif >> >>   #ifdef __USE_GNU >> +# ifdef __LDBL_COMPAT >>   __LDBL_REDIR1_DECL (strtold_l, strtod_l) >> +# else >> +__LDBL_REDIR1_DECL (strtold_l, __strtoieee128_l) >> +# endif >>   #endif >> >>   #if __GLIBC_USE (IEC_60559_BFP_EXT_C2X) >> +# ifdef __LDBL_COMPAT >>   __LDBL_REDIR1_DECL (strfroml, strfromd) >> +# else >> +__LDBL_REDIR1_DECL (strfroml, __strfromieee128) >> +# endif >>   #endif >> >>   #ifdef __USE_MISC >> +# if defined __LDBL_COMPAT >>   __LDBL_REDIR1_DECL (qecvt, ecvt) >>   __LDBL_REDIR1_DECL (qfcvt, fcvt) >>   __LDBL_REDIR1_DECL (qgcvt, gcvt) >>   __LDBL_REDIR1_DECL (qecvt_r, ecvt_r) >>   __LDBL_REDIR1_DECL (qfcvt_r, fcvt_r) >> +# elif __LONG_DOUBLE_USES_FLOAT128 == 1 >> +__LDBL_REDIR1_DECL (qecvt, __qecvtieee128) >> +__LDBL_REDIR1_DECL (qfcvt, __qfcvtieee128) >> +__LDBL_REDIR1_DECL (qgcvt, __qgcvtieee128) >> +__LDBL_REDIR1_DECL (qecvt_r, __qecvtieee128_r) >> +__LDBL_REDIR1_DECL (qfcvt_r, __qfcvtieee128_r) >> +# else >> +#  error bits/stdlib-ldbl.h included when no ldbl redirections are >> required. >> +# endif >>   #endif >> diff --git a/stdlib/monetary.h b/stdlib/monetary.h >> index dfb6ed5c0c..4a6d61fd2d 100644 >> --- a/stdlib/monetary.h >> +++ b/stdlib/monetary.h >> @@ -50,7 +50,8 @@ extern ssize_t strfmon_l (char *__restrict __s, >> size_t __maxsize, >>        __THROW __attribute_format_strfmon__ (4, 5); >>   #endif >> >> -#ifdef __LDBL_COMPAT >> +#include >> +#if defined __LDBL_COMPAT || __LONG_DOUBLE_USES_FLOAT128 == 1 >>   # include >>   #endif >> >> diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h >> index e3470631e1..a7c0c71a80 100644 >> --- a/stdlib/stdlib.h >> +++ b/stdlib/stdlib.h >> @@ -1016,7 +1016,9 @@ extern int ttyslot (void) __THROW; >>   #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function >>   # include >>   #endif >> -#ifdef __LDBL_COMPAT >> + >> +#include >> +#if defined __LDBL_COMPAT || __LONG_DOUBLE_USES_FLOAT128 == 1 >>   # include >>   #endif >> >> diff --git a/wcsmbs/bits/wchar-ldbl.h b/wcsmbs/bits/wchar-ldbl.h >> index fc50ee26de..75d547f680 100644 >> --- a/wcsmbs/bits/wchar-ldbl.h >> +++ b/wcsmbs/bits/wchar-ldbl.h >> @@ -28,9 +28,17 @@ __LDBL_REDIR_DECL (vfwprintf); >>   __LDBL_REDIR_DECL (vwprintf); >>   __LDBL_REDIR_DECL (vswprintf); >>   # if !__GLIBC_USE (DEPRECATED_SCANF) >> +#  if defined __LDBL_COMPAT >>   __LDBL_REDIR1_DECL (fwscanf, __nldbl___isoc99_fwscanf) >>   __LDBL_REDIR1_DECL (wscanf, __nldbl___isoc99_wscanf) >>   __LDBL_REDIR1_DECL (swscanf, __nldbl___isoc99_swscanf) >> +#  elif __LONG_DOUBLE_USES_FLOAT128 == 1 >> +__LDBL_REDIR1_DECL (fwscanf, __isoc99_fwscanfieee128) >> +__LDBL_REDIR1_DECL (wscanf, __isoc99_wscanfieee128) >> +__LDBL_REDIR1_DECL (swscanf, __isoc99_swscanfieee128) >> +#  else >> +#   error bits/stdlib-ldbl.h included when no ldbl redirections are >> required. >> +#  endif >>   # else >>   __LDBL_REDIR_DECL (fwscanf); >>   __LDBL_REDIR_DECL (wscanf); >> @@ -39,11 +47,23 @@ __LDBL_REDIR_DECL (swscanf); >>   #endif >> >>   #ifdef __USE_ISOC99 >> +# ifdef __LDBL_COMPAT >>   __LDBL_REDIR1_DECL (wcstold, wcstod); >> +# else >> +__LDBL_REDIR1_DECL (wcstold, __wcstoieee128) >> +# endif >>   # if !__GLIBC_USE (DEPRECATED_SCANF) >> +#  if defined __LDBL_COMPAT >>   __LDBL_REDIR1_DECL (vfwscanf, __nldbl___isoc99_vfwscanf) >>   __LDBL_REDIR1_DECL (vwscanf, __nldbl___isoc99_vwscanf) >>   __LDBL_REDIR1_DECL (vswscanf, __nldbl___isoc99_vswscanf) >> +#  elif __LONG_DOUBLE_USES_FLOAT128 == 1 >> +__LDBL_REDIR1_DECL (vfwscanf, __isoc99_vfwscanfieee128) >> +__LDBL_REDIR1_DECL (vwscanf, __isoc99_vwscanfieee128) >> +__LDBL_REDIR1_DECL (vswscanf, __isoc99_vswscanfieee128) >> +#  else >> +#   error bits/stdlib-ldbl.h included when no ldbl redirections are >> required. >> +#  endif >>   # else >>   __LDBL_REDIR_DECL (vfwscanf); >>   __LDBL_REDIR_DECL (vwscanf); >> @@ -52,16 +72,20 @@ __LDBL_REDIR_DECL (vswscanf); >>   #endif >> >>   #ifdef __USE_GNU >> +# ifdef __LDBL_COMPAT >>   __LDBL_REDIR1_DECL (wcstold_l, wcstod_l); >> +# else >> +__LDBL_REDIR1_DECL (wcstold_l, __wcstoieee128_l) >> +# endif >>   #endif >> >>   #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function >> -__LDBL_REDIR_DECL (__swprintf_chk) >> -__LDBL_REDIR_DECL (__vswprintf_chk) >> +__LDBL_REDIR2_DECL (swprintf_chk) >> +__LDBL_REDIR2_DECL (vswprintf_chk) >>   # if __USE_FORTIFY_LEVEL > 1 >> -__LDBL_REDIR_DECL (__fwprintf_chk) >> -__LDBL_REDIR_DECL (__wprintf_chk) >> -__LDBL_REDIR_DECL (__vfwprintf_chk) >> -__LDBL_REDIR_DECL (__vwprintf_chk) >> +__LDBL_REDIR2_DECL (fwprintf_chk) >> +__LDBL_REDIR2_DECL (wprintf_chk) >> +__LDBL_REDIR2_DECL (vfwprintf_chk) >> +__LDBL_REDIR2_DECL (vwprintf_chk) >>   # endif >>   #endif >> diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h >> index 5e0d65b14e..fb2cec8167 100644 >> --- a/wcsmbs/wchar.h >> +++ b/wcsmbs/wchar.h >> @@ -633,9 +633,11 @@ extern int swscanf (const wchar_t *__restrict __s, >>        __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; >> >>   /* 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/wchar-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/wchar-ldbl.h.  */ >> +#if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT \ >> +     && __LONG_DOUBLE_USES_FLOAT128 == 0 >>   #  ifdef __REDIRECT >>   extern int __REDIRECT (fwscanf, (__FILE *__restrict __stream, >>                    const wchar_t *__restrict __format, ...), >> @@ -688,7 +690,8 @@ extern int vswscanf (const wchar_t *__restrict __s, >>   /* Same redirection as above for the v*wscanf family.  */ >>   # if !__GLIBC_USE (DEPRECATED_SCANF) \ >>        && (!defined __LDBL_COMPAT || !defined __REDIRECT) \ >> -     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K) >> +     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K) \ >> +     && __LONG_DOUBLE_USES_FLOAT128 == 0 >>   #  ifdef __REDIRECT >>   extern int __REDIRECT (vfwscanf, (__FILE *__restrict __s, >>                     const wchar_t *__restrict __format, >> @@ -849,7 +852,8 @@ extern size_t wcsftime_l (wchar_t *__restrict __s, >> size_t __maxsize, >>   # include >>   #endif >> >> -#ifdef __LDBL_COMPAT >> +#include >> +#if defined __LDBL_COMPAT || __LONG_DOUBLE_USES_FLOAT128 == 1 >>   # include >>   #endif >>