[v6] string: Add strerrorname_np and strerrordesc_np

Message ID 20200706135743.1265504-1-adhemerval.zanella@linaro.org
State New
Headers show
Series
  • [v6] string: Add strerrorname_np and strerrordesc_np
Related show

Commit Message

Ben Coyote Woodard via Libc-alpha July 6, 2020, 1:57 p.m.
The strerrorname_np returns error number name (i.g. "EINVAL" for EINVAL)
while strerrordesc_np returns string describing error number (i.g
"Invalid argument" for EINVAL).  Different than strerror,
strerrordesc_np does not attempt to translate the return description,
both functions return NULL for an invalid error number.

They should be used instead of sys_errlist and sys_nerr, both are
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.

Tested-by: Carlos O'Donell <carlos@redhat.com>

---
 NEWS                                          | 10 +++
 include/stdio.h                               |  1 +
 manual/errno.texi                             | 23 +++++++
 stdio-common/errlist.c                        | 33 ++++++++++
 stdio-common/test-strerr.c                    | 65 +++++++++++++++++++
 string/Makefile                               |  3 +-
 string/Versions                               |  1 +
 string/strerrordesc_np.c                      | 26 ++++++++
 string/strerrorname_np.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, 259 insertions(+), 1 deletion(-)
 create mode 100644 stdio-common/test-strerr.c
 create mode 100644 string/strerrordesc_np.c
 create mode 100644 string/strerrorname_np.c
 create mode 100644 sysdeps/mach/hurd/test-err_np.c

-- 
2.25.1

Comments

Andreas Schwab July 6, 2020, 2:04 p.m. | #1
On Jul 06 2020, Adhemerval Zanella via Libc-alpha wrote:

> diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist

> index 6e52e9b74a..de41e535ef 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


No such functions.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."
Ben Coyote Woodard via Libc-alpha July 6, 2020, 2:06 p.m. | #2
On 06/07/2020 11:04, Andreas Schwab wrote:
> On Jul 06 2020, Adhemerval Zanella via Libc-alpha wrote:

> 

>> diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist

>> index 6e52e9b74a..de41e535ef 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

> 

> No such functions.


Sigh, I just run the update scrip on linux folders... I fixed it 
locally, thanks.
Ben Coyote Woodard via Libc-alpha July 6, 2020, 3:07 p.m. | #3
On 7/6/20 9:57 AM, Adhemerval Zanella wrote:
> The strerrorname_np returns error number name (i.g. "EINVAL" for EINVAL)

> while strerrordesc_np returns string describing error number (i.g

> "Invalid argument" for EINVAL).  Different than strerror,

> strerrordesc_np does not attempt to translate the return description,

> both functions return NULL for an invalid error number.

> 

> They should be used instead of sys_errlist and sys_nerr, both are

> 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.


OK for master if you fix the hurd symbol names in the abi list.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>

 
> Tested-by: Carlos O'Donell <carlos@redhat.com>

> ---

>  NEWS                                          | 10 +++

>  include/stdio.h                               |  1 +

>  manual/errno.texi                             | 23 +++++++

>  stdio-common/errlist.c                        | 33 ++++++++++

>  stdio-common/test-strerr.c                    | 65 +++++++++++++++++++

>  string/Makefile                               |  3 +-

>  string/Versions                               |  1 +

>  string/strerrordesc_np.c                      | 26 ++++++++

>  string/strerrorname_np.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, 259 insertions(+), 1 deletion(-)

>  create mode 100644 stdio-common/test-strerr.c

>  create mode 100644 string/strerrordesc_np.c

>  create mode 100644 string/strerrorname_np.c

>  create mode 100644 sysdeps/mach/hurd/test-err_np.c

> 

> diff --git a/NEWS b/NEWS

> index ee91175567..b63b022267 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_np and strerrordesc_np have been added.  The

> +  strerroname_np returns error number name (e.g. "EINVAL" for EINVAL) while

> +  strerrordesc_np returns string describing error number

> +  (e.g "Invalid argument" for EINVAL).  Different than strerror,

> +  strerrordesc_np does not attempt to translate the return description, both

> +  functions return NULL for an invalid error number.

> +

> +  They should be used instead of sys_errlist and sys_nerr and both are

> +  thread and async-signal safe.  These functions are GNU extensions.

> +

>  Deprecated and removed features, and other changes affecting compatibility:

>  

>  * The deprecated <sys/sysctl.h> 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;

>  

>  libc_hidden_ldbl_proto (__asprintf)

>  

> diff --git a/manual/errno.texi b/manual/errno.texi

> index 8cb4ce8b48..1834339220 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_np (int @var{errnum})

> +@standards{GNU, string.h}

> +@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}

> +This function returns the name describing the error @var{errnum} or

> +@code{NULL} if there is no known constant with this value (e.g "EINVAL"

> +for @code{EINVAL}).

> +

> +@pindex string.h

> +This function is a GNU extension, declared in the header file @file{string.h}.

> +@end deftypefun

> +

> +@deftypefun void strerrordesc_np (int @var{errnum})

> +@standards{GNU, string.h}

> +@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}

> +This function returns the message describing the error @var{errnum} or

> +@code{NULL} if there is no known constant with this value (e.g "Invalid

> +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 <errlist.h>

> +#undef _S

> +  };

> +  char str[0];

> +} _sys_errname = { {

> +#define _S(n, s) s,

> +#include <errlist.h>

> +#undef _S

> +} };

> +

> +static const unsigned short _sys_errnameidx[] =

> +{

> +#define _S(n, s) [n] = offsetof(union sys_errname_t, MSGSTRFIELD(__LINE__)),

> +#include <errlist.h>

> +#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];

> +}

> +

>  #include <errlist-compat.c>

> diff --git a/stdio-common/test-strerr.c b/stdio-common/test-strerr.c

> new file mode 100644

> index 0000000000..fded208118

> --- /dev/null

> +++ b/stdio-common/test-strerr.c

> @@ -0,0 +1,65 @@

> +/* Test strerrorname_np and strerrordesc_np.

> +   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

> +   <https://www.gnu.org/licenses/>.  */

> +

> +#include <string.h>

> +#include <errno.h>

> +#include <array_length.h>

> +

> +#include <support/support.h>

> +#include <support/check.h>

> +

> +#define N_(name)      name

> +

> +static const char *const errlist[] =

> +  {

> +/* This file is auto-generated from errlist.def.  */

> +#include <errlist.h>

> +  };

> +

> +#define MSGSTR_T errname_t

> +#define MSGSTR   errname

> +#define MSGIDX   errnameidx

> +#include <errlist-name.h>

> +#undef MSGSTR

> +#undef MSGIDX

> +

> +static int

> +do_test (void)

> +{

> +  TEST_VERIFY (strerrordesc_np (-1) == NULL);

> +  TEST_VERIFY (strerrordesc_np (array_length (errlist)) == NULL);

> +  for (size_t i = 0; i < array_length (errlist); i++)

> +    {

> +      if (errlist[i] == NULL)

> +        continue;

> +      TEST_COMPARE_STRING (strerrordesc_np (i), errlist[i]);

> +    }

> +

> +  TEST_VERIFY (strerrorname_np (-1) == NULL);

> +  TEST_VERIFY (strerrorname_np (array_length (errlist)) == NULL);

> +  for (size_t i = 0; i < array_length (errlist); i++)

> +    {

> +      if (errlist[i] == NULL)

> +        continue;

> +      TEST_COMPARE_STRING (strerrorname_np (i), errname.str + errnameidx[i]);

> +    }

> +

> +  return 0;

> +}

> +

> +#include <support/test-driver.c>

> diff --git a/string/Makefile b/string/Makefile

> index 8fe7e17fe2..f8d3104e16 100644

> --- a/string/Makefile

> +++ b/string/Makefile

> @@ -45,7 +45,8 @@ 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_np		\

> +		   strerrordesc_np

>  

>  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..298ecd401a 100644

> --- a/string/Versions

> +++ b/string/Versions

> @@ -87,5 +87,6 @@ libc {

>    }

>    GLIBC_2.32 {

>      sigdescr_np; sigabbrev_np;

> +    strerrordesc_np; strerrorname_np;

>    }

>  }

> diff --git a/string/strerrordesc_np.c b/string/strerrordesc_np.c

> new file mode 100644

> index 0000000000..cdaf3a7f44

> --- /dev/null

> +++ b/string/strerrordesc_np.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

> +   <https://www.gnu.org/licenses/>.  */

> +

> +#include <stdio.h>

> +

> +const char *

> +__strerrordesc_np (int errnum)

> +{

> +  return __get_errlist (errnum);

> +}

> +weak_alias (__strerrordesc_np, strerrordesc_np)

> diff --git a/string/strerrorname_np.c b/string/strerrorname_np.c

> new file mode 100644

> index 0000000000..bc337d20c2

> --- /dev/null

> +++ b/string/strerrorname_np.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

> +   <https://www.gnu.org/licenses/>.  */

> +

> +#include <stdio.h>

> +

> +const char *

> +strerrorname_np (int errnum)

> +{

> +  return __get_errname (errnum);

> +}

> diff --git a/string/string.h b/string/string.h

> index 0119d7f45d..b0be00c0f7 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

> +/* Return a string describing the meaning of tthe error in ERR.  */

> +extern const char *strerrordesc_np (int __err) __THROW;

> +/* Return a string with the error name in ERR.  */

> +extern const char *strerrorname_np (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 6e52e9b74a..de41e535ef 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


As Andreas noted this is wrong.

>  GLIBC_2.32 mach_print F

>  GLIBC_2.32 mremap F

>  GLIBC_2.32 sigabbrev_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 <mach/error.h>

> +

> +#define ERR_MAP(value) err_get_code (value)

> +#include <stdio-common/test-err_np.c>

> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist

> index bb6045d8a6..c7d8ab90c3 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_np F

> +GLIBC_2.32 strerrorname_np F

> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist

> index 8e15a58eaf..e93eee7931 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_np F

> +GLIBC_2.32 strerrorname_np 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..02e75d655a 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_np F

> +GLIBC_2.32 strerrorname_np 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..ad30a662b9 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_np F

> +GLIBC_2.32 strerrorname_np 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..e5174594a1 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_np F

> +GLIBC_2.32 strerrorname_np F

> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist

> index 053cda00a4..8e00ff5e5d 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_np F

> +GLIBC_2.32 strerrorname_np 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..c84fb17c81 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_np F

> +GLIBC_2.32 strerrorname_np 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..70dc72391e 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_np F

> +GLIBC_2.32 strerrorname_np 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..c96f6c98b0 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_np F

> +GLIBC_2.32 strerrorname_np 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..e880fc83bf 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_np F

> +GLIBC_2.32 strerrorname_np 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..dce473c4b1 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_np F

> +GLIBC_2.32 strerrorname_np F

> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist

> index 099d51e893..b367f119cb 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_np F

> +GLIBC_2.32 strerrorname_np 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..9480b7ebf9 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_np F

> +GLIBC_2.32 strerrorname_np 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..c007d170de 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_np F

> +GLIBC_2.32 strerrorname_np 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..ee7655936d 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_np F

> +GLIBC_2.32 strerrorname_np 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..b50be3f570 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_np F

> +GLIBC_2.32 strerrorname_np 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..7c4127baee 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_np F

> +GLIBC_2.32 strerrorname_np 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..ac528d2611 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_np F

> +GLIBC_2.32 strerrorname_np 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..d5279024c8 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_np F

> +GLIBC_2.32 strerrorname_np 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..ee312901f6 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_np F

> +GLIBC_2.32 strerrorname_np 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..400b8f4e8b 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_np F

> +GLIBC_2.32 strerrorname_np F

> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist

> index ff5b64c1dd..03e477bc75 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_np F

> +GLIBC_2.32 strerrorname_np 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..a82ce6bfea 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_np F

> +GLIBC_2.32 strerrorname_np 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..1b4c4a79b9 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_np F

> +GLIBC_2.32 strerrorname_np 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..8e5cd9f9b8 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_np F

> +GLIBC_2.32 strerrorname_np 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..ccff98f7ff 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_np F

> +GLIBC_2.32 strerrorname_np 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..9e4b84970b 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_np F

> +GLIBC_2.32 strerrorname_np 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..99b0e1b48b 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_np F

> +GLIBC_2.32 strerrorname_np 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..1fc276173f 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_np F

> +GLIBC_2.32 strerrorname_np 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..f81123e6b4 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_np F

> +GLIBC_2.32 strerrorname_np F

> 



-- 
Cheers,
Carlos.

Patch

diff --git a/NEWS b/NEWS
index ee91175567..b63b022267 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_np and strerrordesc_np have been added.  The
+  strerroname_np returns error number name (e.g. "EINVAL" for EINVAL) while
+  strerrordesc_np returns string describing error number
+  (e.g "Invalid argument" for EINVAL).  Different than strerror,
+  strerrordesc_np does not attempt to translate the return description, both
+  functions return NULL for an invalid error number.
+
+  They should be used instead of sys_errlist and sys_nerr and both are
+  thread and async-signal safe.  These functions are GNU extensions.
+
 Deprecated and removed features, and other changes affecting compatibility:
 
 * The deprecated <sys/sysctl.h> 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;
 
 libc_hidden_ldbl_proto (__asprintf)
 
diff --git a/manual/errno.texi b/manual/errno.texi
index 8cb4ce8b48..1834339220 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_np (int @var{errnum})
+@standards{GNU, string.h}
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+This function returns the name describing the error @var{errnum} or
+@code{NULL} if there is no known constant with this value (e.g "EINVAL"
+for @code{EINVAL}).
+
+@pindex string.h
+This function is a GNU extension, declared in the header file @file{string.h}.
+@end deftypefun
+
+@deftypefun void strerrordesc_np (int @var{errnum})
+@standards{GNU, string.h}
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+This function returns the message describing the error @var{errnum} or
+@code{NULL} if there is no known constant with this value (e.g "Invalid
+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 <errlist.h>
+#undef _S
+  };
+  char str[0];
+} _sys_errname = { {
+#define _S(n, s) s,
+#include <errlist.h>
+#undef _S
+} };
+
+static const unsigned short _sys_errnameidx[] =
+{
+#define _S(n, s) [n] = offsetof(union sys_errname_t, MSGSTRFIELD(__LINE__)),
+#include <errlist.h>
+#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];
+}
+
 #include <errlist-compat.c>
diff --git a/stdio-common/test-strerr.c b/stdio-common/test-strerr.c
new file mode 100644
index 0000000000..fded208118
--- /dev/null
+++ b/stdio-common/test-strerr.c
@@ -0,0 +1,65 @@ 
+/* Test strerrorname_np and strerrordesc_np.
+   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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <string.h>
+#include <errno.h>
+#include <array_length.h>
+
+#include <support/support.h>
+#include <support/check.h>
+
+#define N_(name)      name
+
+static const char *const errlist[] =
+  {
+/* This file is auto-generated from errlist.def.  */
+#include <errlist.h>
+  };
+
+#define MSGSTR_T errname_t
+#define MSGSTR   errname
+#define MSGIDX   errnameidx
+#include <errlist-name.h>
+#undef MSGSTR
+#undef MSGIDX
+
+static int
+do_test (void)
+{
+  TEST_VERIFY (strerrordesc_np (-1) == NULL);
+  TEST_VERIFY (strerrordesc_np (array_length (errlist)) == NULL);
+  for (size_t i = 0; i < array_length (errlist); i++)
+    {
+      if (errlist[i] == NULL)
+        continue;
+      TEST_COMPARE_STRING (strerrordesc_np (i), errlist[i]);
+    }
+
+  TEST_VERIFY (strerrorname_np (-1) == NULL);
+  TEST_VERIFY (strerrorname_np (array_length (errlist)) == NULL);
+  for (size_t i = 0; i < array_length (errlist); i++)
+    {
+      if (errlist[i] == NULL)
+        continue;
+      TEST_COMPARE_STRING (strerrorname_np (i), errname.str + errnameidx[i]);
+    }
+
+  return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/string/Makefile b/string/Makefile
index 8fe7e17fe2..f8d3104e16 100644
--- a/string/Makefile
+++ b/string/Makefile
@@ -45,7 +45,8 @@  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_np		\
+		   strerrordesc_np
 
 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..298ecd401a 100644
--- a/string/Versions
+++ b/string/Versions
@@ -87,5 +87,6 @@  libc {
   }
   GLIBC_2.32 {
     sigdescr_np; sigabbrev_np;
+    strerrordesc_np; strerrorname_np;
   }
 }
diff --git a/string/strerrordesc_np.c b/string/strerrordesc_np.c
new file mode 100644
index 0000000000..cdaf3a7f44
--- /dev/null
+++ b/string/strerrordesc_np.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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+
+const char *
+__strerrordesc_np (int errnum)
+{
+  return __get_errlist (errnum);
+}
+weak_alias (__strerrordesc_np, strerrordesc_np)
diff --git a/string/strerrorname_np.c b/string/strerrorname_np.c
new file mode 100644
index 0000000000..bc337d20c2
--- /dev/null
+++ b/string/strerrorname_np.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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+
+const char *
+strerrorname_np (int errnum)
+{
+  return __get_errname (errnum);
+}
diff --git a/string/string.h b/string/string.h
index 0119d7f45d..b0be00c0f7 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
+/* Return a string describing the meaning of tthe error in ERR.  */
+extern const char *strerrordesc_np (int __err) __THROW;
+/* Return a string with the error name in ERR.  */
+extern const char *strerrorname_np (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 6e52e9b74a..de41e535ef 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 mremap F
 GLIBC_2.32 sigabbrev_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 <mach/error.h>
+
+#define ERR_MAP(value) err_get_code (value)
+#include <stdio-common/test-err_np.c>
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index bb6045d8a6..c7d8ab90c3 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_np F
+GLIBC_2.32 strerrorname_np F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 8e15a58eaf..e93eee7931 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_np F
+GLIBC_2.32 strerrorname_np 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..02e75d655a 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_np F
+GLIBC_2.32 strerrorname_np 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..ad30a662b9 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_np F
+GLIBC_2.32 strerrorname_np 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..e5174594a1 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_np F
+GLIBC_2.32 strerrorname_np F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 053cda00a4..8e00ff5e5d 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_np F
+GLIBC_2.32 strerrorname_np 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..c84fb17c81 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_np F
+GLIBC_2.32 strerrorname_np 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..70dc72391e 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_np F
+GLIBC_2.32 strerrorname_np 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..c96f6c98b0 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_np F
+GLIBC_2.32 strerrorname_np 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..e880fc83bf 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_np F
+GLIBC_2.32 strerrorname_np 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..dce473c4b1 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_np F
+GLIBC_2.32 strerrorname_np F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 099d51e893..b367f119cb 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_np F
+GLIBC_2.32 strerrorname_np 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..9480b7ebf9 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_np F
+GLIBC_2.32 strerrorname_np 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..c007d170de 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_np F
+GLIBC_2.32 strerrorname_np 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..ee7655936d 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_np F
+GLIBC_2.32 strerrorname_np 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..b50be3f570 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_np F
+GLIBC_2.32 strerrorname_np 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..7c4127baee 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_np F
+GLIBC_2.32 strerrorname_np 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..ac528d2611 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_np F
+GLIBC_2.32 strerrorname_np 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..d5279024c8 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_np F
+GLIBC_2.32 strerrorname_np 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..ee312901f6 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_np F
+GLIBC_2.32 strerrorname_np 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..400b8f4e8b 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_np F
+GLIBC_2.32 strerrorname_np F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index ff5b64c1dd..03e477bc75 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_np F
+GLIBC_2.32 strerrorname_np 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..a82ce6bfea 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_np F
+GLIBC_2.32 strerrorname_np 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..1b4c4a79b9 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_np F
+GLIBC_2.32 strerrorname_np 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..8e5cd9f9b8 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_np F
+GLIBC_2.32 strerrorname_np 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..ccff98f7ff 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_np F
+GLIBC_2.32 strerrorname_np 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..9e4b84970b 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_np F
+GLIBC_2.32 strerrorname_np 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..99b0e1b48b 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_np F
+GLIBC_2.32 strerrorname_np 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..1fc276173f 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_np F
+GLIBC_2.32 strerrorname_np 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..f81123e6b4 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_np F
+GLIBC_2.32 strerrorname_np F