From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by sourceware.org (Postfix) with ESMTP id 6653E385BF81 for ; Thu, 2 Jul 2020 21:43:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 6653E385BF81 Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-418-Cqd_oryZN5ecxnaNN1D1Uw-1; Thu, 02 Jul 2020 17:43:31 -0400 X-MC-Unique: Cqd_oryZN5ecxnaNN1D1Uw-1 Received: by mail-qv1-f72.google.com with SMTP id cv20so8345683qvb.12 for ; Thu, 02 Jul 2020 14:43:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=enarzmPb1o8+PnODMK9VsDO09yJ1VkOdK87PgixvDq8=; b=h8hZhUXqawSHJRVdA4bLNYOb2L/JAmWKdo0k8SDGWUCEEKlLctJvtttcrSg656PqAG 4WK5wzFyK3IooHlWZl0DOst/DTsr75+gaJtYSaMVtaCrPEl+rM5pt9l1kc8J7hYt3ATA GpzCw6XoQYDs25Tgn0Fvi78o3QDu37uYc8bT6tpuRcjL1Ydxi8D/3N4VShYjl9+r8qHA ZnnZmC9NEi3ku+PN6hTS7ig+UPd0EtGfsdbbSKQ1Xe9MSNbBHTdZjO40l7Mhj2Ki6R0I aKAu9b8Ota8/eEcUKQ54JjneFygSLoYfmsLwgXloiU1zP5GibWY0wo9yeNQorLqgY30D Hgzg== X-Gm-Message-State: AOAM533XROpHeGvCkV8kakuqpeSOag+tsFtR7gg41dempHRNgkQztDwR YEU5FozOe0gTZ9iuV8r1SK6DWsYxf/us5RVSWEmt6YtfrGunbzp2sCkfJNkhDmRi6mD2x3O3G/q SKmp/79qREzUgrJcoXFGi X-Received: by 2002:a05:620a:1282:: with SMTP id w2mr31068890qki.196.1593726210099; Thu, 02 Jul 2020 14:43:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxhQoRcMnSzAVI/TuKEKjOCzQFG11dyeeI1B5aw9LA1xKFnw1fEUrZ+xoMi2DcZ2Rzp8gDQ1Q== X-Received: by 2002:a05:620a:1282:: with SMTP id w2mr31068872qki.196.1593726209487; Thu, 02 Jul 2020 14:43:29 -0700 (PDT) Received: from [192.168.1.4] (198-84-170-103.cpe.teksavvy.com. [198.84.170.103]) by smtp.gmail.com with ESMTPSA id g1sm10677744qko.70.2020.07.02.14.43.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 02 Jul 2020 14:43:28 -0700 (PDT) Subject: Re: [PATCH v5 13/13] string: Add strerrorname and strerrordesc To: Adhemerval Zanella , libc-alpha@sourceware.org References: <20200619134352.297146-1-adhemerval.zanella@linaro.org> <20200619134352.297146-13-adhemerval.zanella@linaro.org> From: Carlos O'Donell Organization: Red Hat Message-ID: <1a3b968c-0d58-8703-c317-58b32d22501c@redhat.com> Date: Thu, 2 Jul 2020 17:43:27 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20200619134352.297146-13-adhemerval.zanella@linaro.org> Content-Language: en-US X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Jul 2020 21:43:36 -0000 On 6/19/20 9:43 AM, Adhemerval Zanella wrote: > The strerrorname returns error number name (i.g. "EINVAL" for EINVAL) > while strerrordesc returns string describing error number (i.g > "Invalid argument" for EINVAL). Different than strerror, strerrordesc > does not attempt to translate the return description and both functions > return NULL for an invalid error number. > > They should be used instead of sys_errlist and sys_nerr and both are s/and both/, both/g > thread and async-signal safe. These functions are GNU extensions. > > Checked on x86-64-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu, > and s390x-linux-gnu. Why not strerrorname_np or strerrordesc_np? We don't have to use *_np, but these functions are fiarly close in name to 'strerror' and so it might be beneficial to use _np at the end, like you did for sigabbrev_np and sigdescr_np. Thoughts? No regression on x86_64 and i686. Tested-by: Carlos O'Donell > --- > NEWS | 10 +++ > include/stdio.h | 1 + > manual/errno.texi | 23 +++++++ > stdio-common/errlist.c | 33 ++++++++++ > stdio-common/test-strerr.c | 65 +++++++++++++++++++ > string/Makefile | 2 +- > string/Versions | 1 + > string/strerrordesc.c | 26 ++++++++ > string/strerrorname.c | 25 +++++++ > string/string.h | 7 ++ > sysdeps/mach/hurd/i386/libc.abilist | 2 + > sysdeps/mach/hurd/test-err_np.c | 4 ++ > sysdeps/unix/sysv/linux/aarch64/libc.abilist | 2 + > sysdeps/unix/sysv/linux/alpha/libc.abilist | 2 + > sysdeps/unix/sysv/linux/arm/be/libc.abilist | 2 + > sysdeps/unix/sysv/linux/arm/le/libc.abilist | 2 + > sysdeps/unix/sysv/linux/csky/libc.abilist | 2 + > sysdeps/unix/sysv/linux/hppa/libc.abilist | 2 + > sysdeps/unix/sysv/linux/i386/libc.abilist | 2 + > sysdeps/unix/sysv/linux/ia64/libc.abilist | 2 + > .../sysv/linux/m68k/coldfire/libc.abilist | 2 + > .../unix/sysv/linux/m68k/m680x0/libc.abilist | 2 + > .../sysv/linux/microblaze/be/libc.abilist | 2 + > .../sysv/linux/microblaze/le/libc.abilist | 2 + > .../sysv/linux/mips/mips32/fpu/libc.abilist | 2 + > .../sysv/linux/mips/mips32/nofpu/libc.abilist | 2 + > .../sysv/linux/mips/mips64/n32/libc.abilist | 2 + > .../sysv/linux/mips/mips64/n64/libc.abilist | 2 + > sysdeps/unix/sysv/linux/nios2/libc.abilist | 2 + > .../linux/powerpc/powerpc32/fpu/libc.abilist | 2 + > .../powerpc/powerpc32/nofpu/libc.abilist | 2 + > .../linux/powerpc/powerpc64/be/libc.abilist | 2 + > .../linux/powerpc/powerpc64/le/libc.abilist | 2 + > .../unix/sysv/linux/riscv/rv64/libc.abilist | 2 + > .../unix/sysv/linux/s390/s390-32/libc.abilist | 2 + > .../unix/sysv/linux/s390/s390-64/libc.abilist | 2 + > sysdeps/unix/sysv/linux/sh/be/libc.abilist | 2 + > sysdeps/unix/sysv/linux/sh/le/libc.abilist | 2 + > .../sysv/linux/sparc/sparc32/libc.abilist | 2 + > .../sysv/linux/sparc/sparc64/libc.abilist | 2 + > .../unix/sysv/linux/x86_64/64/libc.abilist | 2 + > .../unix/sysv/linux/x86_64/x32/libc.abilist | 2 + > 42 files changed, 258 insertions(+), 1 deletion(-) > create mode 100644 stdio-common/test-strerr.c > create mode 100644 string/strerrordesc.c > create mode 100644 string/strerrorname.c > create mode 100644 sysdeps/mach/hurd/test-err_np.c > > diff --git a/NEWS b/NEWS > index f504772eb6..888727581b 100644 > --- a/NEWS > +++ b/NEWS > @@ -41,6 +41,16 @@ Major new features: > They should be used instead of sys_siglist or sys_sigabbrev and they > are both thread and async-signal safe. These functions are GNU extensions. > > +* The functions strerrorname and strerrordesc have been added. The > + strerroname returns error number name (i.g. "EINVAL" for EINVAL) while s/i.g./e.g./g > + strerrordesc returns string describing error number (i.g "Invalid argument" > + for EINVAL). Different than strerror, strerrordesc does not attempt to > + translate the return description and both functions return NULL for an > + invalid error number. > + > + They should be used instead of sys_errlist and sys_nerr and both are s/and both/, both/g > + thread and async-signal safe. These functions are GNU extensions. > + > Deprecated and removed features, and other changes affecting compatibility: > > * The deprecated header and the sysctl function have been > diff --git a/include/stdio.h b/include/stdio.h > index 9e3bf6fe42..bc67d020d4 100644 > --- a/include/stdio.h > +++ b/include/stdio.h > @@ -187,6 +187,7 @@ libc_hidden_proto (__libc_readline_unlocked); > > extern const char *const _sys_errlist_internal[] attribute_hidden; > extern const char *__get_errlist (int) attribute_hidden; > +extern const char *__get_errname (int) attribute_hidden; OK. > > libc_hidden_ldbl_proto (__asprintf) > > diff --git a/manual/errno.texi b/manual/errno.texi > index 8cb4ce8b48..dfc4001af0 100644 > --- a/manual/errno.texi > +++ b/manual/errno.texi > @@ -1207,6 +1207,29 @@ to @code{errno}. > The function @code{perror} is declared in @file{stdio.h}. > @end deftypefun > > +@deftypefun void strerrorname (int @var{errnum}) > +@standards{GNU, string.h} > +@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}} Use @mtsafe{} since it doesn't touch _sigintr. > +This function returns the name describing the error @var{errnum} or > +@code{NULL} if there is no known E* constant with this value (i.g "EINVAL"> +for @code{EINVAL}). s/E*//g > + > +@pindex string.h > +This function is a GNU extension, declared in the header file @file{string.h}. > +@end deftypefun > + > +@deftypefun void errdesc_np (int @var{errnum}) > +@standards{GNU, string.h} > +@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}} Use @mtsafe{} since it doesn't touch _sigintr. > +This function returns the message describing the error @var{errnum} or > +@code{NULL} if there is no known E* constant with this value (i.g "Invalid s/E*//g > +argument" for @code{EINVAL}). Different than @code{strerror} the returned > +description is not translated. > + > +@pindex string.h > +This function is a GNU extension, declared in the header file @file{string.h}. > +@end deftypefun > + > @code{strerror} and @code{perror} produce the exact same message for any > given error code; the precise text varies from system to system. With > @theglibc{}, the messages are fairly short; there are no multi-line > diff --git a/stdio-common/errlist.c b/stdio-common/errlist.c > index df52356066..d15f13a22a 100644 > --- a/stdio-common/errlist.c > +++ b/stdio-common/errlist.c > @@ -35,4 +35,37 @@ __get_errlist (int errnum) > return NULL; > } > > +static const union sys_errname_t > +{ > + struct > + { > +#define MSGSTRFIELD1(line) str##line > +#define MSGSTRFIELD(line) MSGSTRFIELD1(line) > +#define _S(n, str) char MSGSTRFIELD(__LINE__)[sizeof(str)]; > +#include > +#undef _S > + }; > + char str[0]; > +} _sys_errname = { { > +#define _S(n, s) s, > +#include > +#undef _S > +} }; > + > +static const unsigned short _sys_errnameidx[] = > +{ > +#define _S(n, s) [n] = offsetof(union sys_errname_t, MSGSTRFIELD(__LINE__)), > +#include > +#undef _S > +}; > + > +const char * > +__get_errname (int errnum) > +{ > + if (errnum < 0 || errnum >= array_length (_sys_errnameidx) > + || (errnum > 0 && _sys_errnameidx[errnum] == 0)) > + return NULL; > + return _sys_errname.str + _sys_errnameidx[errnum]; > +} OK. > + > #include > diff --git a/stdio-common/test-strerr.c b/stdio-common/test-strerr.c > new file mode 100644 > index 0000000000..baa8d8e6d4 > --- /dev/null > +++ b/stdio-common/test-strerr.c > @@ -0,0 +1,65 @@ > +/* Test strerrorname and strerrordesc. > + Copyright (C) 2020 Free Software Foundation, Inc. > + This file is part of the GNU C Library. OK. > + > + 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 > + . */ > + > +#include > +#include > +#include > + > +#include > +#include > + > +#define N_(name) name > + > +static const char *const errlist[] = > + { > +/* This file is auto-generated from errlist.def. */ > +#include OK. We cross reference the entire errlist. > + }; > + > +#define MSGSTR_T errname_t > +#define MSGSTR errname > +#define MSGIDX errnameidx > +#include > +#undef MSGSTR > +#undef MSGIDX > + > +static int > +do_test (void) > +{ > + TEST_VERIFY (strerrordesc (-1) == NULL); > + TEST_VERIFY (strerrordesc (array_length (errlist)) == NULL); OK. > + for (size_t i = 0; i < array_length (errlist); i++) > + { > + if (errlist[i] == NULL) > + continue; > + TEST_COMPARE_STRING (strerrordesc (i), errlist[i]); > + } > + > + TEST_VERIFY (strerrorname (-1) == NULL); > + TEST_VERIFY (strerrorname (array_length (errlist)) == NULL); > + for (size_t i = 0; i < array_length (errlist); i++) > + { > + if (errlist[i] == NULL) > + continue; > + TEST_COMPARE_STRING (strerrorname (i), errname.str + errnameidx[i]); > + } > + > + return 0; > +} OK. > + > +#include > diff --git a/string/Makefile b/string/Makefile > index e5075521b7..fd06409197 100644 > --- a/string/Makefile > +++ b/string/Makefile > @@ -45,7 +45,7 @@ routines := strcat strchr strcmp strcoll strcpy strcspn \ > envz basename \ > strcoll_l strxfrm_l string-inlines memrchr \ > xpg-strerror strerror_l explicit_bzero \ > - sigdescr_np sigabbrev_np > + sigdescr_np sigabbrev_np strerrorname strerrordesc Why not _np also? > > strop-tests := memchr memcmp memcpy memmove mempcpy memset memccpy \ > stpcpy stpncpy strcat strchr strcmp strcpy strcspn \ > diff --git a/string/Versions b/string/Versions > index 6f8dd2d372..7727fca001 100644 > --- a/string/Versions > +++ b/string/Versions > @@ -87,5 +87,6 @@ libc { > } > GLIBC_2.32 { > sigdescr_np; sigabbrev_np; > + strerrordesc; strerrorname; Likewise. > } > } > diff --git a/string/strerrordesc.c b/string/strerrordesc.c > new file mode 100644 > index 0000000000..f59448f2d1 > --- /dev/null > +++ b/string/strerrordesc.c > @@ -0,0 +1,26 @@ > +/* Return string describing error number. > + Copyright (C) 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 > + . */ > + > +#include > + > +const char * > +__strerrordesc (int errnum) > +{ > + return __get_errlist (errnum); > +} OK. > +weak_alias (__strerrordesc, strerrordesc) > diff --git a/string/strerrorname.c b/string/strerrorname.c > new file mode 100644 > index 0000000000..889ea0d245 > --- /dev/null > +++ b/string/strerrorname.c > @@ -0,0 +1,25 @@ > +/* Return string describing errno name. > + Copyright (C) 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 > + . */ > + > +#include > + > +const char * > +strerrorname (int errnum) > +{ > + return __get_errname (errnum); > +} OK. > diff --git a/string/string.h b/string/string.h > index 0119d7f45d..bb90219ada 100644 > --- a/string/string.h > +++ b/string/string.h > @@ -428,6 +428,13 @@ extern int __xpg_strerror_r (int __errnum, char *__buf, size_t __buflen) > extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) > __THROW __nonnull ((2)) __wur __attr_access ((__write_only__, 2, 3)); > # endif > + > +# ifdef __USE_GNU OK. GNU extension. > +/* Return a string describing the meaning of tthe error in ERR. */ > +extern const char *strerrordesc (int __err) __THROW; > +/* Return a string with the error name in ERR. */ > +extern const char *strerrorname (int __err) __THROW; > +# endif > #endif > > #ifdef __USE_XOPEN2K8 > diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist > index ff8ad98d03..193ceba987 100644 > --- a/sysdeps/mach/hurd/i386/libc.abilist > +++ b/sysdeps/mach/hurd/i386/libc.abilist > @@ -2181,6 +2181,8 @@ GLIBC_2.3.4 setsourcefilter F > GLIBC_2.3.4 xdr_quad_t F > GLIBC_2.3.4 xdr_u_quad_t F > GLIBC_2.30 twalk_r F > +GLIBC_2.32 errdescr_np F > +GLIBC_2.32 errname_np F > GLIBC_2.32 mach_print F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > diff --git a/sysdeps/mach/hurd/test-err_np.c b/sysdeps/mach/hurd/test-err_np.c > new file mode 100644 > index 0000000000..3127141128 > --- /dev/null > +++ b/sysdeps/mach/hurd/test-err_np.c > @@ -0,0 +1,4 @@ > +#include > + > +#define ERR_MAP(value) err_get_code (value) > +#include > diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist > index bb6045d8a6..f0529706ee 100644 > --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist > @@ -2157,3 +2157,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist > index 8e15a58eaf..ac892eceda 100644 > --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist > +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist > @@ -2239,6 +2239,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist > index ce82b840e8..af574dfb9d 100644 > --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist > @@ -141,6 +141,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _Exit F > GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 > GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 > diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist > index c7a436cd42..bb0e8bf312 100644 > --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist > @@ -138,6 +138,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _Exit F > GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 > GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 > diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist > index 7f51d47b2f..8a612ece3e 100644 > --- a/sysdeps/unix/sysv/linux/csky/libc.abilist > +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist > @@ -2101,3 +2101,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist > index 053cda00a4..ccb61a322a 100644 > --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist > +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist > @@ -2060,6 +2060,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist > index f18de50f9e..bc5329d7b9 100644 > --- a/sysdeps/unix/sysv/linux/i386/libc.abilist > +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist > @@ -2226,6 +2226,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist > index a1966cac5a..8f8cbfa80b 100644 > --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist > @@ -2092,6 +2092,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist > index 8f44bc9231..802e16ac7d 100644 > --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist > +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist > @@ -142,6 +142,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _Exit F > GLIBC_2.4 _IO_2_1_stderr_ D 0x98 > GLIBC_2.4 _IO_2_1_stdin_ D 0x98 > diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist > index 088f2fa0f2..62bfa336b8 100644 > --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist > +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist > @@ -2172,6 +2172,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist > index 34c1c4fdca..680c7b0c77 100644 > --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist > @@ -2152,3 +2152,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist > index 099d51e893..e102493f6c 100644 > --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist > @@ -2149,3 +2149,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist > index ea86646c3b..28588017fa 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist > @@ -2143,6 +2143,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist > index 9adac43e36..64c99116c0 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist > @@ -2141,6 +2141,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist > index c42c093cfb..7e197736d8 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist > @@ -2149,6 +2149,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist > index 605e60a35e..e1964effc6 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist > @@ -2143,6 +2143,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist > index 7a57babca5..f647f86c09 100644 > --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist > +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist > @@ -2190,3 +2190,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist > index c3745c3733..8998f3e0ab 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist > @@ -2199,6 +2199,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist > index 719512e999..a96c6d1ce2 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist > @@ -2232,6 +2232,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist > index 3f79daa39c..f9f0a9dd93 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist > @@ -2062,6 +2062,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist > index af1a2ae8a6..921098b1f3 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist > @@ -2352,3 +2352,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist > index ff5b64c1dd..1e65005b9f 100644 > --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist > @@ -2119,3 +2119,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist > index 576caca63c..b31811135b 100644 > --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist > @@ -2197,6 +2197,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist > index 7201b10288..c30fc0ef71 100644 > --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist > @@ -2098,6 +2098,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist > index 4f954ac7ee..9cbe4a650a 100644 > --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist > @@ -2067,6 +2067,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist > index 9db9ba5cc0..c00327a607 100644 > --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist > @@ -2064,6 +2064,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist > index ecb54db317..a990eee8f8 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist > @@ -2188,6 +2188,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 _IO_fprintf F > GLIBC_2.4 _IO_printf F > GLIBC_2.4 _IO_sprintf F > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist > index 74bd6efed8..e988546b20 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist > @@ -2115,6 +2115,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist > index 50e45a43e8..fa10e68d3a 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist > @@ -2073,6 +2073,8 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > GLIBC_2.4 __confstr_chk F > GLIBC_2.4 __fgets_chk F > GLIBC_2.4 __fgets_unlocked_chk F > diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist > index 59b26b097d..29119996ae 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist > @@ -2170,3 +2170,5 @@ GLIBC_2.32 pthread_getattr_np F > GLIBC_2.32 pthread_sigmask F > GLIBC_2.32 sigabbrev_np F > GLIBC_2.32 sigdescr_np F > +GLIBC_2.32 strerrordesc F > +GLIBC_2.32 strerrorname F > OK. -- Cheers, Carlos.