[PATCH 3/3] login: Move libutil into libc

Adhemerval Zanella adhemerval.zanella@linaro.org
Tue Jun 29 14:09:07 GMT 2021



On 21/06/2021 08:47, Florian Weimer via Libc-alpha wrote:
> The symbols forkpty, login, login_tty, logout, logwtmp, openpty
> werem oved using scripts/move-symbol-to-libc.py.

'were moved'

> 
> This is a single commit because most of the symbols are tied together
> via forkpty, for example.
> 
> Several changes to use hidden prototypes are needed.  This commit
> also updates terminology on modified lines.
> 
> For 390 (31-bit), this commit follows the existing style for the
> compat symbol version creation.

Please also add you are changing the internal terminology of
master/slave to ptmx/terminal in various places.

LGTM with some nits below.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>


> ---
>  include/pty.h                                 |  3 +-
>  include/utmp.h                                |  5 +-
>  login/Makefile                                | 15 +++--
>  login/Versions                                |  9 ++-
>  login/forkpty.c                               | 29 +++++----
>  login/libutil-compat.c                        | 33 +++++++++++
>  login/login.c                                 | 22 ++++---
>  login/login_tty.c                             | 32 ++++++----
>  login/logout.c                                | 19 ++++--
>  login/logwtmp.c                               | 12 +++-
>  login/openpty.c                               | 59 ++++++++++---------
>  sysdeps/mach/hurd/i386/libc.abilist           | 12 ++++
>  sysdeps/mach/hurd/i386/libutil.abilist        |  7 +--
>  sysdeps/unix/sysv/linux/aarch64/libc.abilist  | 12 ++++
>  .../unix/sysv/linux/aarch64/libutil.abilist   |  7 +--
>  sysdeps/unix/sysv/linux/alpha/libc.abilist    | 12 ++++
>  sysdeps/unix/sysv/linux/alpha/libutil.abilist |  7 +--
>  sysdeps/unix/sysv/linux/arc/libc.abilist      | 12 ++++
>  sysdeps/unix/sysv/linux/arc/libutil.abilist   |  7 +--
>  sysdeps/unix/sysv/linux/arm/be/libc.abilist   | 12 ++++
>  .../unix/sysv/linux/arm/be/libutil.abilist    |  7 +--
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   | 12 ++++
>  .../unix/sysv/linux/arm/le/libutil.abilist    |  7 +--
>  sysdeps/unix/sysv/linux/csky/libc.abilist     | 12 ++++
>  sysdeps/unix/sysv/linux/csky/libutil.abilist  |  7 +--
>  sysdeps/unix/sysv/linux/hppa/libc.abilist     | 12 ++++
>  sysdeps/unix/sysv/linux/hppa/libutil.abilist  |  7 +--
>  sysdeps/unix/sysv/linux/i386/libc.abilist     | 12 ++++
>  sysdeps/unix/sysv/linux/i386/libutil.abilist  |  7 +--
>  sysdeps/unix/sysv/linux/ia64/libc.abilist     | 12 ++++
>  sysdeps/unix/sysv/linux/ia64/libutil.abilist  |  7 +--
>  .../sysv/linux/m68k/coldfire/libc.abilist     | 12 ++++
>  .../sysv/linux/m68k/coldfire/libutil.abilist  |  7 +--
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  | 12 ++++
>  .../sysv/linux/m68k/m680x0/libutil.abilist    |  7 +--
>  .../sysv/linux/microblaze/be/libc.abilist     | 12 ++++
>  .../sysv/linux/microblaze/be/libutil.abilist  |  7 +--
>  .../sysv/linux/microblaze/le/libc.abilist     | 12 ++++
>  .../sysv/linux/microblaze/le/libutil.abilist  |  7 +--
>  .../sysv/linux/mips/mips32/fpu/libc.abilist   | 12 ++++
>  .../sysv/linux/mips/mips32/libutil.abilist    |  7 +--
>  .../sysv/linux/mips/mips32/nofpu/libc.abilist | 12 ++++
>  .../sysv/linux/mips/mips64/libutil.abilist    |  7 +--
>  .../sysv/linux/mips/mips64/n32/libc.abilist   | 12 ++++
>  .../sysv/linux/mips/mips64/n64/libc.abilist   | 12 ++++
>  sysdeps/unix/sysv/linux/nios2/libc.abilist    | 12 ++++
>  sysdeps/unix/sysv/linux/nios2/libutil.abilist |  7 +--
>  .../linux/powerpc/powerpc32/fpu/libc.abilist  | 12 ++++
>  .../linux/powerpc/powerpc32/libutil.abilist   |  7 +--
>  .../powerpc/powerpc32/nofpu/libc.abilist      | 12 ++++
>  .../linux/powerpc/powerpc64/be/libc.abilist   | 12 ++++
>  .../powerpc/powerpc64/be/libutil.abilist      |  7 +--
>  .../linux/powerpc/powerpc64/le/libc.abilist   | 12 ++++
>  .../powerpc/powerpc64/le/libutil.abilist      |  7 +--
>  .../unix/sysv/linux/riscv/rv32/libc.abilist   | 12 ++++
>  .../sysv/linux/riscv/rv32/libutil.abilist     |  7 +--
>  .../unix/sysv/linux/riscv/rv64/libc.abilist   | 12 ++++
>  .../sysv/linux/riscv/rv64/libutil.abilist     |  7 +--
>  sysdeps/unix/sysv/linux/s390/s390-32/Makefile |  3 +-
>  sysdeps/unix/sysv/linux/s390/s390-32/Versions |  3 +-
>  .../unix/sysv/linux/s390/s390-32/libc.abilist | 13 ++++
>  .../sysv/linux/s390/s390-32/libutil-compat.c  | 23 ++++++++
>  .../sysv/linux/s390/s390-32/libutil.abilist   |  9 +--
>  sysdeps/unix/sysv/linux/s390/s390-32/login.c  | 11 ++--
>  .../unix/sysv/linux/s390/s390-32/login32.c    | 12 ++--
>  .../unix/sysv/linux/s390/s390-64/libc.abilist | 12 ++++
>  .../sysv/linux/s390/s390-64/libutil.abilist   |  7 +--
>  sysdeps/unix/sysv/linux/sh/be/libc.abilist    | 12 ++++
>  sysdeps/unix/sysv/linux/sh/be/libutil.abilist |  7 +--
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    | 12 ++++
>  sysdeps/unix/sysv/linux/sh/le/libutil.abilist |  7 +--
>  .../sysv/linux/sparc/sparc32/libc.abilist     | 12 ++++
>  .../sysv/linux/sparc/sparc32/libutil.abilist  |  7 +--
>  .../sysv/linux/sparc/sparc64/libc.abilist     | 12 ++++
>  .../sysv/linux/sparc/sparc64/libutil.abilist  |  7 +--
>  .../unix/sysv/linux/x86_64/64/libc.abilist    | 12 ++++
>  .../unix/sysv/linux/x86_64/64/libutil.abilist |  7 +--
>  .../unix/sysv/linux/x86_64/x32/libc.abilist   | 12 ++++
>  .../sysv/linux/x86_64/x32/libutil.abilist     |  7 +--
>  79 files changed, 630 insertions(+), 269 deletions(-)
>  create mode 100644 login/libutil-compat.c
>  create mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/libutil-compat.c
> 
> diff --git a/include/pty.h b/include/pty.h
> index 4979bb765f..93335fe3b6 100644
> --- a/include/pty.h
> +++ b/include/pty.h
> @@ -3,7 +3,8 @@
>  
>  # ifndef _ISOMAC
>  
> -libutil_hidden_proto (openpty)
> +libc_hidden_proto (forkpty)
> +libc_hidden_proto (openpty)
>  
>  # endif /* !_ISOMAC */
>  #endif

Ok.

> diff --git a/include/utmp.h b/include/utmp.h
> index e8162bd08d..b7921e5fb8 100644
> --- a/include/utmp.h
> +++ b/include/utmp.h
> @@ -29,7 +29,10 @@ extern int __getutline_r (const struct utmp *__line,
>  			  struct utmp *__buffer, struct utmp **__result);
>  libc_hidden_proto (__getutline_r)
>  
> -libutil_hidden_proto (login_tty)
> +libc_hidden_proto (login)
> +libc_hidden_proto (login_tty)
> +libc_hidden_proto (logout)
> +libc_hidden_proto (logwtmp)
>  
>  # endif /* !_ISOMAC */
>  #endif

Ok.

> diff --git a/login/Makefile b/login/Makefile
> index bc72e6e5b4..4e6b97734d 100644
> --- a/login/Makefile
> +++ b/login/Makefile
> @@ -28,7 +28,7 @@ headers	:= utmp.h bits/utmp.h lastlog.h pty.h
>  routines := getlogin getlogin_r setlogin getlogin_r_chk \
>  	    getutent getutent_r getutid getutline getutid_r getutline_r \
>  	    utmp_file utmpname updwtmp getpt grantpt unlockpt ptsname \
> -	    ptsname_r_chk
> +	    ptsname_r_chk login login_tty logout logwtmp openpty forkpty
>  
>  CFLAGS-grantpt.c += -DLIBEXECDIR='"$(libexecdir)"'
>  

Ok.

> @@ -46,11 +46,18 @@ vpath %.c programs
>  tests := tst-utmp tst-utmpx tst-grantpt tst-ptsname tst-getlogin tst-updwtmpx \
>    tst-pututxline-lockfail tst-pututxline-cache
>  
> -# Build the -lutil library with these extra functions.
> +ifeq ($(have-GLIBC_2.33),yes)
> +# Empty compatibility library for old binaries.
>  extra-libs      := libutil
>  extra-libs-others := $(extra-libs)
> -
> -libutil-routines:= login login_tty logout logwtmp openpty forkpty
> +libutil-routines := libutil-compat
> +libutil-shared-only-routines := libutil-compat
> +
> +# Pretend that libutil.so is a linker script, so that the symbolic
> +# link is not installed.
> +install-lib-ldscripts = libutil.so
> +$(inst_libdir)/libutil.so:
> +endif # $(have-GLIBC_2.33)
>  
>  include ../Rules
>  

Ok.

> diff --git a/login/Versions b/login/Versions
> index 475fcf063f..9de9804cb0 100644
> --- a/login/Versions
> +++ b/login/Versions
> @@ -16,6 +16,9 @@ libc {
>  
>      # u*
>      updwtmp; utmpname;
> +
> +    # Symbols formerly in libutil.
> +    forkpty; login; login_tty; logout; logwtmp; openpty;
>    }
>    GLIBC_2.1 {
>      # e*
> @@ -45,10 +48,14 @@ libc {
>      __getlogin_r_chk;
>      __ptsname_r_chk;
>    }
> +  GLIBC_2.34 {
> +    # Symbols formerly in libutil.
> +    forkpty; login; login_tty; logout; logwtmp; openpty;
> +  }
>  }
>  
>  libutil {
>    GLIBC_2.0 {
> -    forkpty; login; login_tty; logout; logwtmp; openpty;
> +    __libutil_version_placeholder;
>    }
>  }

One entry per line maybe?

> diff --git a/login/forkpty.c b/login/forkpty.c
> index 1e91bd8198..79f9846ac4 100644
> --- a/login/forkpty.c
> +++ b/login/forkpty.c
> @@ -21,34 +21,41 @@
>  #include <unistd.h>
>  #include <utmp.h>
>  #include <pty.h>
> +#include <shlib-compat.h>
>  
>  int
> -forkpty (int *amaster, char *name, const struct termios *termp,
> -	 const struct winsize *winp)
> +__forkpty (int *pptmx, char *name, const struct termios *termp,
> +	   const struct winsize *winp)
>  {
> -  int master, slave, pid;
> +  int ptmx, terminal, pid;
>  
> -  if (openpty (&master, &slave, name, termp, winp) == -1)
> +  if (openpty (&ptmx, &terminal, name, termp, winp) == -1)
>      return -1;
>  
> -  switch (pid = fork ())
> +  switch (pid = __fork ())
>      {
>      case -1:
> -      close (master);
> -      close (slave);
> +      __close (ptmx);
> +      __close (terminal);
>        return -1;
>      case 0:
>        /* Child.  */
> -      close (master);
> -      if (login_tty (slave))
> +      __close (ptmx);
> +      if (login_tty (terminal))
>  	_exit (1);
>  
>        return 0;
>      default:
>        /* Parent.  */
> -      *amaster = master;
> -      close (slave);
> +      *pptmx = ptmx;
> +      __close (terminal);
>  
>        return pid;
>      }
>  }
> +versioned_symbol (libc, __forkpty, forkpty, GLIBC_2_34);
> +libc_hidden_ver (__forkpty, forkpty)
> +
> +#if OTHER_SHLIB_COMPAT (libutil, GLIBC_2_0, GLIBC_2_34)
> +compat_symbol (libutil, __forkpty, forkpty, GLIBC_2_0);
> +#endif

Ok.

> diff --git a/login/libutil-compat.c b/login/libutil-compat.c
> new file mode 100644
> index 0000000000..249512a22e
> --- /dev/null
> +++ b/login/libutil-compat.c
> @@ -0,0 +1,33 @@
> +/* Placeholder compatibility symbols for libutil.
> +   Copyright (C) 2021 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 <shlib-compat.h>
> +#include <sys/cdefs.h>
> +
> +/* This file is used to keep specific symbol versions occupied, so
> +   that ld does not generate weak symbol version definitions.  */
> +
> +void
> +attribute_compat_text_section
> +__attribute_used__
> +__libutil_version_placeholder_1 (void)
> +{
> +}
> +
> +compat_symbol (libutil, __libutil_version_placeholder_1,
> +               __libutil_version_placeholder, GLIBC_2_0);

Ok.

> diff --git a/login/login.c b/login/login.c
> index d280c13f1f..c95b98416a 100644
> --- a/login/login.c
> +++ b/login/login.c
> @@ -23,7 +23,7 @@
>  #include <unistd.h>
>  #include <stdlib.h>
>  #include <utmp.h>
> -
> +#include <shlib-compat.h>
>  
>  /* Return the result of ttyname in the buffer pointed to by TTY, which should
>     be of length BUF_LEN.  If it is too long to fit in this buffer, a
> @@ -41,7 +41,7 @@ tty_name (int fd, char **tty, size_t buf_len)
>  
>        if (buf_len)
>  	{
> -	  rv = ttyname_r (fd, buf, buf_len);
> +	  rv = __ttyname_r (fd, buf, buf_len);
>  
>  	  if (rv != 0 || memchr (buf, '\0', buf_len))
>  	    /* We either got an error, or we succeeded and the

Ok.

> @@ -78,7 +78,7 @@ tty_name (int fd, char **tty, size_t buf_len)
>  }
>  

>  void
> -login (const struct utmp *ut)
> +__login (const struct utmp *ut)
>  {
>  #ifdef PATH_MAX
>    char _tty[PATH_MAX + UT_LINESIZE];
> @@ -114,16 +114,16 @@ login (const struct utmp *ut)
>        strncpy (copy.ut_line, ttyp, UT_LINESIZE);
>  
>        /* Tell that we want to use the UTMP file.  */
> -      if (utmpname (_PATH_UTMP) == 0)
> +      if (__utmpname (_PATH_UTMP) == 0)
>  	{
>  	  /* Open UTMP file.  */
> -	  setutent ();
> +	  __setutent ();
>  
>  	  /* Write the entry.  */
> -	  pututline (&copy);
> +	  __pututline (&copy);
>  
>  	  /* Close UTMP file.  */
> -	  endutent ();
> +	  __endutent ();
>  	}
>  
>        if (tty != _tty)
> @@ -135,5 +135,11 @@ login (const struct utmp *ut)
>      strncpy (copy.ut_line, "???", UT_LINESIZE);
>  
>    /* Update the WTMP file.  Here we have to add a new entry.  */
> -  updwtmp (_PATH_WTMP, &copy);
> +  __updwtmp (_PATH_WTMP, &copy);
>  }
> +versioned_symbol (libc, __login, login, GLIBC_2_34);
> +libc_hidden_ver (__login, login)
> +
> +#if OTHER_SHLIB_COMPAT (libutil, GLIBC_2_0, GLIBC_2_34)
> +compat_symbol (libutil, __login, login, GLIBC_2_0);
> +#endif

Ok.

> diff --git a/login/login_tty.c b/login/login_tty.c
> index a94f5cb861..79661c0756 100644
> --- a/login/login_tty.c
> +++ b/login/login_tty.c
> @@ -37,13 +37,14 @@ static char sccsid[] = "@(#)login_tty.c	8.1 (Berkeley) 6/4/93";
>  #include <unistd.h>
>  #include <fcntl.h>
>  #include <utmp.h>
> +#include <shlib-compat.h>
>  
>  int
> -login_tty (int fd)
> +__login_tty (int fd)
>  {
> -	(void) setsid();
> +	(void) __setsid();
>  #ifdef TIOCSCTTY
> -	if (ioctl(fd, TIOCSCTTY, (char *)NULL) == -1)
> +	if (__ioctl(fd, TIOCSCTTY, (char *)NULL) == -1)
>  		return (-1);

No need the cast here.

>  #else
>  	{
> @@ -53,24 +54,29 @@ login_tty (int fd)
>  	  if (fdname)
>  	    {
>  	      if (fd != 0)
> -		(void) close (0);
> +		(void) __close (0);
>  	      if (fd != 1)
> -		(void) close (1);
> +		(void) __close (1);
>  	      if (fd != 2)
> -		(void) close (2);
> -	      newfd = open (fdname, O_RDWR);
> -	      (void) close (newfd);
> +		(void) __close (2);
> +	      newfd = __open64 (fdname, O_RDWR);
> +	      (void) __close (newfd);
>  	    }
>  	}

No need to keep the cast here.

>  #endif
> -	while (dup2(fd, 0) == -1 && errno == EBUSY)
> +	while (__dup2(fd, 0) == -1 && errno == EBUSY)
>  	  ;
> -	while (dup2(fd, 1) == -1 && errno == EBUSY)
> +	while (__dup2(fd, 1) == -1 && errno == EBUSY)
>  	  ;
> -	while (dup2(fd, 2) == -1 && errno == EBUSY)
> +	while (__dup2(fd, 2) == -1 && errno == EBUSY)
>  	  ;
>  	if (fd > 2)
> -		(void) close(fd);
> +		(void) __close(fd);
>  	return (0);
>  }
> -libutil_hidden_def (login_tty)
> +versioned_symbol (libc, __login_tty, login_tty, GLIBC_2_34);
> +libc_hidden_ver (__login_tty, login_tty)
> +
> +#if OTHER_SHLIB_COMPAT (libutil, GLIBC_2_0, GLIBC_2_34)
> +compat_symbol (libutil, __login_tty, login_tty, GLIBC_2_0);
> +#endif

Ok.

> diff --git a/login/logout.c b/login/logout.c
> index 3def97fc83..bf78e0915e 100644
> --- a/login/logout.c
> +++ b/login/logout.c
> @@ -21,27 +21,28 @@
>  #include <utmp.h>
>  #include <time.h>
>  #include <sys/time.h>
> +#include <shlib-compat.h>
>  
>  int
> -logout (const char *line)
> +__logout (const char *line)
>  {
>    struct utmp tmp, utbuf;
>    struct utmp *ut;
>    int result = 0;
>  
>    /* Tell that we want to use the UTMP file.  */
> -  if (utmpname (_PATH_UTMP) == -1)
> +  if (__utmpname (_PATH_UTMP) == -1)
>      return 0;
>  
>    /* Open UTMP file.  */
> -  setutent ();
> +  __setutent ();
>  
>    /* Fill in search information.  */
>    tmp.ut_type = USER_PROCESS;
>    strncpy (tmp.ut_line, line, sizeof tmp.ut_line);
>  
>    /* Read the record.  */
> -  if (getutline_r (&tmp, &utbuf, &ut) >= 0)
> +  if (__getutline_r (&tmp, &utbuf, &ut) >= 0)
>      {
>        /* Clear information about who & from where.  */
>        memset (ut->ut_name, '\0', sizeof ut->ut_name);
> @@ -52,12 +53,18 @@ logout (const char *line)
>        TIMESPEC_TO_TIMEVAL (&ut->ut_tv, &ts);
>        ut->ut_type = DEAD_PROCESS;
>  
> -      if (pututline (ut) != NULL)
> +      if (__pututline (ut) != NULL)
>  	result = 1;
>      }
>  
>    /* Close UTMP file.  */
> -  endutent ();
> +  __endutent ();
>  
>    return result;
>  }
> +versioned_symbol (libc, __logout, logout, GLIBC_2_34);
> +libc_hidden_ver (__logout, logout)
> +
> +#if OTHER_SHLIB_COMPAT (libutil, GLIBC_2_0, GLIBC_2_34)
> +compat_symbol (libutil, __logout, logout, GLIBC_2_0);
> +#endif

Ok.

> diff --git a/login/logwtmp.c b/login/logwtmp.c
> index 1a7c46e9c0..8f3e8faed5 100644
> --- a/login/logwtmp.c
> +++ b/login/logwtmp.c
> @@ -22,10 +22,10 @@
>  #include <unistd.h>
>  #include <utmp.h>
>  #include <struct___timespec64.h>
> -
> +#include <shlib-compat.h>
>  
>  void
> -logwtmp (const char *line, const char *name, const char *host)
> +__logwtmp (const char *line, const char *name, const char *host)
>  {
>    struct utmp ut;
>  
> @@ -41,5 +41,11 @@ logwtmp (const char *line, const char *name, const char *host)
>    __clock_gettime64 (CLOCK_REALTIME, &ts);
>    TIMESPEC_TO_TIMEVAL (&ut.ut_tv, &ts);
>  
> -  updwtmp (_PATH_WTMP, &ut);
> +  __updwtmp (_PATH_WTMP, &ut);
>  }
> +versioned_symbol (libc, __logwtmp, logwtmp, GLIBC_2_34);
> +libc_hidden_ver (__logwtmp, logwtmp)
> +
> +#if OTHER_SHLIB_COMPAT (libutil, GLIBC_2_0, GLIBC_2_34)
> +compat_symbol (libutil, __logwtmp, logwtmp, GLIBC_2_0);
> +#endif

Ok.

> diff --git a/login/openpty.c b/login/openpty.c
> index 22845b64f5..15277573ec 100644
> --- a/login/openpty.c
> +++ b/login/openpty.c
> @@ -25,7 +25,7 @@
>  #include <termios.h>
>  #include <unistd.h>
>  #include <sys/types.h>
> -
> +#include <shlib-compat.h>
>  
>  /* Return the result of ptsname_r in the buffer pointed to by PTS,
>     which should be of length BUF_LEN.  If it is too long to fit in
> @@ -43,7 +43,7 @@ pts_name (int fd, char **pts, size_t buf_len)
>  
>        if (buf_len)
>  	{
> -	  rv = ptsname_r (fd, buf, buf_len);
> +	  rv = __ptsname_r (fd, buf, buf_len);
>  
>  	  if (rv != 0 || memchr (buf, '\0', buf_len))
>  	    /* We either got an error, or we succeeded and the
> @@ -79,12 +79,12 @@ pts_name (int fd, char **pts, size_t buf_len)
>    return rv;
>  }
>  
> -/* Create pseudo tty master slave pair and set terminal attributes
> +/* Create pseudo tty multiplexer/terminal pair and set terminal attributes
>     according to TERMP and WINP.  Return handles for both ends in
> -   AMASTER and ASLAVE, and return the name of the slave end in NAME.  */
> +   *PPTMX and *PTERMINAL, and return the name of the terminal end in NAME.  */
>  int
> -openpty (int *amaster, int *aslave, char *name,
> -	 const struct termios *termp, const struct winsize *winp)
> +__openpty (int *pptmx, int *pterminal, char *name,
> +	   const struct termios *termp, const struct winsize *winp)
>  {
>  #ifdef PATH_MAX
>    char _buf[PATH_MAX];
> @@ -92,51 +92,51 @@ openpty (int *amaster, int *aslave, char *name,
>    char _buf[512];
>  #endif
>    char *buf = _buf;
> -  int master, ret = -1, slave = -1;
> +  int ptmx, ret = -1, terminal = -1;
>  
>    *buf = '\0';
>  
> -  master = getpt ();
> -  if (master == -1)
> +  ptmx = __getpt ();
> +  if (ptmx == -1)
>      return -1;
>  
> -  if (grantpt (master))
> +  if (grantpt (ptmx))
>      goto on_error;
>  
> -  if (unlockpt (master))
> +  if (unlockpt (ptmx))
>      goto on_error;
>  
>  #ifdef TIOCGPTPEER
> -  /* Try to allocate slave fd solely based on master fd first. */
> -  slave = ioctl (master, TIOCGPTPEER, O_RDWR | O_NOCTTY);
> +  /* Try to allocate terminal fd solely based on PTMX fd first. */
> +  terminal = __ioctl (ptmx, TIOCGPTPEER, O_RDWR | O_NOCTTY);
>  #endif
> -  if (slave == -1)
> +  if (terminal == -1)
>      {
> -      /* Fallback to path-based slave fd allocation in case kernel doesn't
> +      /* Fallback to path-based terminal fd allocation in case kernel doesn't
>         * support TIOCGPTPEER.
>         */
> -      if (pts_name (master, &buf, sizeof (_buf)))
> +      if (pts_name (ptmx, &buf, sizeof (_buf)))
>          goto on_error;
>  
> -      slave = open (buf, O_RDWR | O_NOCTTY);
> -      if (slave == -1)
> +      terminal = __open64 (buf, O_RDWR | O_NOCTTY);
> +      if (terminal == -1)
>          goto on_error;
>      }
>  
>    /* XXX Should we ignore errors here?  */
>    if (termp)
> -    tcsetattr (slave, TCSAFLUSH, termp);
> +    tcsetattr (terminal, TCSAFLUSH, termp);
>  #ifdef TIOCSWINSZ
>    if (winp)
> -    ioctl (slave, TIOCSWINSZ, winp);
> +    __ioctl (terminal, TIOCSWINSZ, winp);
>  #endif
>  
> -  *amaster = master;
> -  *aslave = slave;
> +  *pptmx = ptmx;
> +  *pterminal = terminal;
>    if (name != NULL)
>      {
>        if (*buf == '\0')
> -        if (pts_name (master, &buf, sizeof (_buf)))
> +        if (pts_name (ptmx, &buf, sizeof (_buf)))
>            goto on_error;
>  
>        strcpy (name, buf);

Ok.

> @@ -146,10 +146,10 @@ openpty (int *amaster, int *aslave, char *name,
>  
>   on_error:
>    if (ret == -1) {
> -    close (master);
> +    __close (ptmx);
>  
> -    if (slave != -1)
> -      close (slave);
> +    if (terminal != -1)
> +      __close (terminal);
>    }
>  
>    if (buf != _buf)
> @@ -157,4 +157,9 @@ openpty (int *amaster, int *aslave, char *name,
>  
>    return ret;
>  }
> -libutil_hidden_def (openpty)
> +versioned_symbol (libc, __openpty, openpty, GLIBC_2_34);
> +libc_hidden_ver (__openpty, openpty)
> +
> +#if OTHER_SHLIB_COMPAT (libutil, GLIBC_2_0, GLIBC_2_34)
> +compat_symbol (libutil, __openpty, openpty, GLIBC_2_0);
> +#endif

Ok.

> diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
> index c3232ba32e..23cb784f0d 100644
> --- a/sysdeps/mach/hurd/i386/libc.abilist
> +++ b/sysdeps/mach/hurd/i386/libc.abilist
> @@ -863,6 +863,7 @@ GLIBC_2.2.6 fopen64 F
>  GLIBC_2.2.6 fopencookie F
>  GLIBC_2.2.6 fopenport F
>  GLIBC_2.2.6 fork F
> +GLIBC_2.2.6 forkpty F
>  GLIBC_2.2.6 fpathconf F
>  GLIBC_2.2.6 fprintf F
>  GLIBC_2.2.6 fputc F
> @@ -1215,6 +1216,10 @@ GLIBC_2.2.6 localtime_r F
>  GLIBC_2.2.6 lockf F
>  GLIBC_2.2.6 lockf64 F
>  GLIBC_2.2.6 locs D 0x4
> +GLIBC_2.2.6 login F
> +GLIBC_2.2.6 login_tty F
> +GLIBC_2.2.6 logout F
> +GLIBC_2.2.6 logwtmp F
>  GLIBC_2.2.6 longjmp F
>  GLIBC_2.2.6 lrand48 F
>  GLIBC_2.2.6 lrand48_r F
> @@ -1337,6 +1342,7 @@ GLIBC_2.2.6 open_memstream F
>  GLIBC_2.2.6 opendir F
>  GLIBC_2.2.6 openlog F
>  GLIBC_2.2.6 openport F
> +GLIBC_2.2.6 openpty F
>  GLIBC_2.2.6 optarg D 0x4
>  GLIBC_2.2.6 opterr D 0x4
>  GLIBC_2.2.6 optind D 0x4
> @@ -2228,6 +2234,12 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 shm_open F
>  GLIBC_2.34 shm_unlink F
>  GLIBC_2.34 timespec_getres F
> diff --git a/sysdeps/mach/hurd/i386/libutil.abilist b/sysdeps/mach/hurd/i386/libutil.abilist
> index 1dd59e0afb..0196d40e56 100644
> --- a/sysdeps/mach/hurd/i386/libutil.abilist
> +++ b/sysdeps/mach/hurd/i386/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.2.6 forkpty F
> -GLIBC_2.2.6 login F
> -GLIBC_2.2.6 login_tty F
> -GLIBC_2.2.6 logout F
> -GLIBC_2.2.6 logwtmp F
> -GLIBC_2.2.6 openpty F
> +GLIBC_2.2.6 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index 42e240e284..b1326d745e 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -862,6 +862,7 @@ GLIBC_2.17 fopen F
>  GLIBC_2.17 fopen64 F
>  GLIBC_2.17 fopencookie F
>  GLIBC_2.17 fork F
> +GLIBC_2.17 forkpty F
>  GLIBC_2.17 fpathconf F
>  GLIBC_2.17 fprintf F
>  GLIBC_2.17 fputc F
> @@ -1267,6 +1268,10 @@ GLIBC_2.17 localtime_r F
>  GLIBC_2.17 lockf F
>  GLIBC_2.17 lockf64 F
>  GLIBC_2.17 locs D 0x8
> +GLIBC_2.17 login F
> +GLIBC_2.17 login_tty F
> +GLIBC_2.17 logout F
> +GLIBC_2.17 logwtmp F
>  GLIBC_2.17 longjmp F
>  GLIBC_2.17 lrand48 F
>  GLIBC_2.17 lrand48_r F
> @@ -1387,6 +1392,7 @@ GLIBC_2.17 openat F
>  GLIBC_2.17 openat64 F
>  GLIBC_2.17 opendir F
>  GLIBC_2.17 openlog F
> +GLIBC_2.17 openpty F
>  GLIBC_2.17 optarg D 0x8
>  GLIBC_2.17 opterr D 0x4
>  GLIBC_2.17 optind D 0x4
> @@ -2365,12 +2371,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libutil.abilist b/sysdeps/unix/sysv/linux/aarch64/libutil.abilist
> index 99889de22e..3a2da66d2c 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.17 forkpty F
> -GLIBC_2.17 login F
> -GLIBC_2.17 login_tty F
> -GLIBC_2.17 logout F
> -GLIBC_2.17 logwtmp F
> -GLIBC_2.17 openpty F
> +GLIBC_2.17 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index fad54555dc..9ee02a0ea4 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -507,6 +507,7 @@ GLIBC_2.0 fnmatch F
>  GLIBC_2.0 fopen F
>  GLIBC_2.0 fopencookie F
>  GLIBC_2.0 fork F
> +GLIBC_2.0 forkpty F
>  GLIBC_2.0 fpathconf F
>  GLIBC_2.0 fprintf F
>  GLIBC_2.0 fputc F
> @@ -771,6 +772,10 @@ GLIBC_2.0 localtime F
>  GLIBC_2.0 localtime_r F
>  GLIBC_2.0 lockf F
>  GLIBC_2.0 locs D 0x8
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
>  GLIBC_2.0 longjmp F
>  GLIBC_2.0 lrand48 F
>  GLIBC_2.0 lrand48_r F
> @@ -851,6 +856,7 @@ GLIBC_2.0 open F
>  GLIBC_2.0 open_memstream F
>  GLIBC_2.0 opendir F
>  GLIBC_2.0 openlog F
> +GLIBC_2.0 openpty F
>  GLIBC_2.0 optarg D 0x8
>  GLIBC_2.0 opterr D 0x4
>  GLIBC_2.0 optind D 0x4
> @@ -2458,12 +2464,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libutil.abilist b/sysdeps/unix/sysv/linux/alpha/libutil.abilist
> index aa2d35b323..3d51141483 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.0 forkpty F
> -GLIBC_2.0 login F
> -GLIBC_2.0 login_tty F
> -GLIBC_2.0 logout F
> -GLIBC_2.0 logwtmp F
> -GLIBC_2.0 openpty F
> +GLIBC_2.0 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 907716ec39..350f0b80aa 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -806,6 +806,7 @@ GLIBC_2.32 fopen F
>  GLIBC_2.32 fopen64 F
>  GLIBC_2.32 fopencookie F
>  GLIBC_2.32 fork F
> +GLIBC_2.32 forkpty F
>  GLIBC_2.32 fpathconf F
>  GLIBC_2.32 fprintf F
>  GLIBC_2.32 fputc F
> @@ -1198,6 +1199,10 @@ GLIBC_2.32 localtime F
>  GLIBC_2.32 localtime_r F
>  GLIBC_2.32 lockf F
>  GLIBC_2.32 lockf64 F
> +GLIBC_2.32 login F
> +GLIBC_2.32 login_tty F
> +GLIBC_2.32 logout F
> +GLIBC_2.32 logwtmp F
>  GLIBC_2.32 longjmp F
>  GLIBC_2.32 lrand48 F
>  GLIBC_2.32 lrand48_r F
> @@ -1321,6 +1326,7 @@ GLIBC_2.32 openat F
>  GLIBC_2.32 openat64 F
>  GLIBC_2.32 opendir F
>  GLIBC_2.32 openlog F
> +GLIBC_2.32 openpty F
>  GLIBC_2.32 optarg D 0x4
>  GLIBC_2.32 opterr D 0x4
>  GLIBC_2.32 optind D 0x4
> @@ -2124,12 +2130,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/arc/libutil.abilist b/sysdeps/unix/sysv/linux/arc/libutil.abilist
> index 61f73bc34e..70c9ed96e5 100644
> --- a/sysdeps/unix/sysv/linux/arc/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.32 forkpty F
> -GLIBC_2.32 login F
> -GLIBC_2.32 login_tty F
> -GLIBC_2.32 logout F
> -GLIBC_2.32 logwtmp F
> -GLIBC_2.32 openpty F
> +GLIBC_2.32 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 50f987a429..8604edf28b 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -295,12 +295,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> @@ -1236,6 +1242,7 @@ GLIBC_2.4 fopen F
>  GLIBC_2.4 fopen64 F
>  GLIBC_2.4 fopencookie F
>  GLIBC_2.4 fork F
> +GLIBC_2.4 forkpty F
>  GLIBC_2.4 fpathconf F
>  GLIBC_2.4 fprintf F
>  GLIBC_2.4 fputc F
> @@ -1626,6 +1633,10 @@ GLIBC_2.4 localtime_r F
>  GLIBC_2.4 lockf F
>  GLIBC_2.4 lockf64 F
>  GLIBC_2.4 locs D 0x4
> +GLIBC_2.4 login F
> +GLIBC_2.4 login_tty F
> +GLIBC_2.4 logout F
> +GLIBC_2.4 logwtmp F
>  GLIBC_2.4 longjmp F
>  GLIBC_2.4 lrand48 F
>  GLIBC_2.4 lrand48_r F
> @@ -1735,6 +1746,7 @@ GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 opendir F
>  GLIBC_2.4 openlog F
> +GLIBC_2.4 openpty F
>  GLIBC_2.4 optarg D 0x4
>  GLIBC_2.4 opterr D 0x4
>  GLIBC_2.4 optind D 0x4
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libutil.abilist b/sysdeps/unix/sysv/linux/arm/be/libutil.abilist
> index cc1420e68c..3e4c25229d 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.4 forkpty F
> -GLIBC_2.4 login F
> -GLIBC_2.4 login_tty F
> -GLIBC_2.4 logout F
> -GLIBC_2.4 logwtmp F
> -GLIBC_2.4 openpty F
> +GLIBC_2.4 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index bf9038af84..b2f542e69b 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -292,12 +292,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> @@ -1233,6 +1239,7 @@ GLIBC_2.4 fopen F
>  GLIBC_2.4 fopen64 F
>  GLIBC_2.4 fopencookie F
>  GLIBC_2.4 fork F
> +GLIBC_2.4 forkpty F
>  GLIBC_2.4 fpathconf F
>  GLIBC_2.4 fprintf F
>  GLIBC_2.4 fputc F
> @@ -1623,6 +1630,10 @@ GLIBC_2.4 localtime_r F
>  GLIBC_2.4 lockf F
>  GLIBC_2.4 lockf64 F
>  GLIBC_2.4 locs D 0x4
> +GLIBC_2.4 login F
> +GLIBC_2.4 login_tty F
> +GLIBC_2.4 logout F
> +GLIBC_2.4 logwtmp F
>  GLIBC_2.4 longjmp F
>  GLIBC_2.4 lrand48 F
>  GLIBC_2.4 lrand48_r F
> @@ -1732,6 +1743,7 @@ GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 opendir F
>  GLIBC_2.4 openlog F
> +GLIBC_2.4 openpty F
>  GLIBC_2.4 optarg D 0x4
>  GLIBC_2.4 opterr D 0x4
>  GLIBC_2.4 optind D 0x4
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libutil.abilist b/sysdeps/unix/sysv/linux/arm/le/libutil.abilist
> index cc1420e68c..3e4c25229d 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.4 forkpty F
> -GLIBC_2.4 login F
> -GLIBC_2.4 login_tty F
> -GLIBC_2.4 logout F
> -GLIBC_2.4 logwtmp F
> -GLIBC_2.4 openpty F
> +GLIBC_2.4 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index afb91f6f43..33de8290c5 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -845,6 +845,7 @@ GLIBC_2.29 fopen F
>  GLIBC_2.29 fopen64 F
>  GLIBC_2.29 fopencookie F
>  GLIBC_2.29 fork F
> +GLIBC_2.29 forkpty F
>  GLIBC_2.29 fpathconf F
>  GLIBC_2.29 fprintf F
>  GLIBC_2.29 fputc F
> @@ -1253,6 +1254,10 @@ GLIBC_2.29 localtime F
>  GLIBC_2.29 localtime_r F
>  GLIBC_2.29 lockf F
>  GLIBC_2.29 lockf64 F
> +GLIBC_2.29 login F
> +GLIBC_2.29 login_tty F
> +GLIBC_2.29 logout F
> +GLIBC_2.29 logwtmp F
>  GLIBC_2.29 longjmp F
>  GLIBC_2.29 lrand48 F
>  GLIBC_2.29 lrand48_r F
> @@ -1378,6 +1383,7 @@ GLIBC_2.29 openat F
>  GLIBC_2.29 openat64 F
>  GLIBC_2.29 opendir F
>  GLIBC_2.29 openlog F
> +GLIBC_2.29 openpty F
>  GLIBC_2.29 optarg D 0x4
>  GLIBC_2.29 opterr D 0x4
>  GLIBC_2.29 optind D 0x4
> @@ -2384,12 +2390,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/csky/libutil.abilist b/sysdeps/unix/sysv/linux/csky/libutil.abilist
> index cbd11999a4..6b49490071 100644
> --- a/sysdeps/unix/sysv/linux/csky/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.29 forkpty F
> -GLIBC_2.29 login F
> -GLIBC_2.29 login_tty F
> -GLIBC_2.29 logout F
> -GLIBC_2.29 logwtmp F
> -GLIBC_2.29 openpty F
> +GLIBC_2.29 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 125f8a269a..2082ca8a3b 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -3,6 +3,12 @@ GLIBC_2.0 dlclose F
>  GLIBC_2.0 dlerror F
>  GLIBC_2.0 dlopen F
>  GLIBC_2.0 dlsym F
> +GLIBC_2.0 forkpty F
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
> +GLIBC_2.0 openpty F
>  GLIBC_2.1 dlopen F
>  GLIBC_2.1 dlvsym F
>  GLIBC_2.10 __cxa_at_quick_exit F
> @@ -2338,12 +2344,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libutil.abilist b/sysdeps/unix/sysv/linux/hppa/libutil.abilist
> index aa2d35b323..3d51141483 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.0 forkpty F
> -GLIBC_2.0 login F
> -GLIBC_2.0 login_tty F
> -GLIBC_2.0 logout F
> -GLIBC_2.0 logwtmp F
> -GLIBC_2.0 openpty F
> +GLIBC_2.0 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index 517753bdd1..72444a9938 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -493,6 +493,7 @@ GLIBC_2.0 fnmatch F
>  GLIBC_2.0 fopen F
>  GLIBC_2.0 fopencookie F
>  GLIBC_2.0 fork F
> +GLIBC_2.0 forkpty F
>  GLIBC_2.0 fpathconf F
>  GLIBC_2.0 fprintf F
>  GLIBC_2.0 fputc F
> @@ -753,6 +754,10 @@ GLIBC_2.0 localtime F
>  GLIBC_2.0 localtime_r F
>  GLIBC_2.0 lockf F
>  GLIBC_2.0 locs D 0x4
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
>  GLIBC_2.0 longjmp F
>  GLIBC_2.0 lrand48 F
>  GLIBC_2.0 lrand48_r F
> @@ -833,6 +838,7 @@ GLIBC_2.0 open F
>  GLIBC_2.0 open_memstream F
>  GLIBC_2.0 opendir F
>  GLIBC_2.0 openlog F
> +GLIBC_2.0 openpty F
>  GLIBC_2.0 optarg D 0x4
>  GLIBC_2.0 opterr D 0x4
>  GLIBC_2.0 optind D 0x4
> @@ -2522,12 +2528,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/i386/libutil.abilist b/sysdeps/unix/sysv/linux/i386/libutil.abilist
> index aa2d35b323..3d51141483 100644
> --- a/sysdeps/unix/sysv/linux/i386/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.0 forkpty F
> -GLIBC_2.0 login F
> -GLIBC_2.0 login_tty F
> -GLIBC_2.0 logout F
> -GLIBC_2.0 logwtmp F
> -GLIBC_2.0 openpty F
> +GLIBC_2.0 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index 23d0928360..a72a5284d2 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -3,6 +3,12 @@ GLIBC_2.0 dlclose F
>  GLIBC_2.0 dlerror F
>  GLIBC_2.0 dlopen F
>  GLIBC_2.0 dlsym F
> +GLIBC_2.0 forkpty F
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
> +GLIBC_2.0 openpty F
>  GLIBC_2.1 dlopen F
>  GLIBC_2.1 dlvsym F
>  GLIBC_2.10 __cxa_at_quick_exit F
> @@ -2298,12 +2304,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libutil.abilist b/sysdeps/unix/sysv/linux/ia64/libutil.abilist
> index aa2d35b323..3d51141483 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.0 forkpty F
> -GLIBC_2.0 login F
> -GLIBC_2.0 login_tty F
> -GLIBC_2.0 logout F
> -GLIBC_2.0 logwtmp F
> -GLIBC_2.0 openpty F
> +GLIBC_2.0 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index dd5fb50b18..2e0f9afcc4 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -296,12 +296,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> @@ -1225,6 +1231,7 @@ GLIBC_2.4 fopen F
>  GLIBC_2.4 fopen64 F
>  GLIBC_2.4 fopencookie F
>  GLIBC_2.4 fork F
> +GLIBC_2.4 forkpty F
>  GLIBC_2.4 fpathconf F
>  GLIBC_2.4 fprintf F
>  GLIBC_2.4 fputc F
> @@ -1610,6 +1617,10 @@ GLIBC_2.4 localtime_r F
>  GLIBC_2.4 lockf F
>  GLIBC_2.4 lockf64 F
>  GLIBC_2.4 locs D 0x4
> +GLIBC_2.4 login F
> +GLIBC_2.4 login_tty F
> +GLIBC_2.4 logout F
> +GLIBC_2.4 logwtmp F
>  GLIBC_2.4 longjmp F
>  GLIBC_2.4 lrand48 F
>  GLIBC_2.4 lrand48_r F
> @@ -1719,6 +1730,7 @@ GLIBC_2.4 openat F
>  GLIBC_2.4 openat64 F
>  GLIBC_2.4 opendir F
>  GLIBC_2.4 openlog F
> +GLIBC_2.4 openpty F
>  GLIBC_2.4 optarg D 0x4
>  GLIBC_2.4 opterr D 0x4
>  GLIBC_2.4 optind D 0x4
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libutil.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libutil.abilist
> index cc1420e68c..3e4c25229d 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.4 forkpty F
> -GLIBC_2.4 login F
> -GLIBC_2.4 login_tty F
> -GLIBC_2.4 logout F
> -GLIBC_2.4 logwtmp F
> -GLIBC_2.4 openpty F
> +GLIBC_2.4 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index cb1d553361..34030b4c17 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -494,6 +494,7 @@ GLIBC_2.0 fnmatch F
>  GLIBC_2.0 fopen F
>  GLIBC_2.0 fopencookie F
>  GLIBC_2.0 fork F
> +GLIBC_2.0 forkpty F
>  GLIBC_2.0 fpathconf F
>  GLIBC_2.0 fprintf F
>  GLIBC_2.0 fputc F
> @@ -752,6 +753,10 @@ GLIBC_2.0 localtime F
>  GLIBC_2.0 localtime_r F
>  GLIBC_2.0 lockf F
>  GLIBC_2.0 locs D 0x4
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
>  GLIBC_2.0 longjmp F
>  GLIBC_2.0 lrand48 F
>  GLIBC_2.0 lrand48_r F
> @@ -832,6 +837,7 @@ GLIBC_2.0 open F
>  GLIBC_2.0 open_memstream F
>  GLIBC_2.0 opendir F
>  GLIBC_2.0 openlog F
> +GLIBC_2.0 openpty F
>  GLIBC_2.0 optarg D 0x4
>  GLIBC_2.0 opterr D 0x4
>  GLIBC_2.0 optind D 0x4
> @@ -2465,12 +2471,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libutil.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libutil.abilist
> index aa2d35b323..3d51141483 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.0 forkpty F
> -GLIBC_2.0 login F
> -GLIBC_2.0 login_tty F
> -GLIBC_2.0 logout F
> -GLIBC_2.0 logwtmp F
> -GLIBC_2.0 openpty F
> +GLIBC_2.0 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 6a20a6fdf2..c1c7e89bf0 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -864,6 +864,7 @@ GLIBC_2.18 fopen F
>  GLIBC_2.18 fopen64 F
>  GLIBC_2.18 fopencookie F
>  GLIBC_2.18 fork F
> +GLIBC_2.18 forkpty F
>  GLIBC_2.18 fpathconf F
>  GLIBC_2.18 fprintf F
>  GLIBC_2.18 fputc F
> @@ -1269,6 +1270,10 @@ GLIBC_2.18 localtime_r F
>  GLIBC_2.18 lockf F
>  GLIBC_2.18 lockf64 F
>  GLIBC_2.18 locs D 0x4
> +GLIBC_2.18 login F
> +GLIBC_2.18 login_tty F
> +GLIBC_2.18 logout F
> +GLIBC_2.18 logwtmp F
>  GLIBC_2.18 longjmp F
>  GLIBC_2.18 lrand48 F
>  GLIBC_2.18 lrand48_r F
> @@ -1389,6 +1394,7 @@ GLIBC_2.18 openat F
>  GLIBC_2.18 openat64 F
>  GLIBC_2.18 opendir F
>  GLIBC_2.18 openlog F
> +GLIBC_2.18 openpty F
>  GLIBC_2.18 optarg D 0x4
>  GLIBC_2.18 opterr D 0x4
>  GLIBC_2.18 optind D 0x4
> @@ -2435,12 +2441,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libutil.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libutil.abilist
> index 0da0a40c22..44e72d5349 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.18 forkpty F
> -GLIBC_2.18 login F
> -GLIBC_2.18 login_tty F
> -GLIBC_2.18 logout F
> -GLIBC_2.18 logwtmp F
> -GLIBC_2.18 openpty F
> +GLIBC_2.18 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index 4c21cbb64d..f53ca5c4a3 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -864,6 +864,7 @@ GLIBC_2.18 fopen F
>  GLIBC_2.18 fopen64 F
>  GLIBC_2.18 fopencookie F
>  GLIBC_2.18 fork F
> +GLIBC_2.18 forkpty F
>  GLIBC_2.18 fpathconf F
>  GLIBC_2.18 fprintf F
>  GLIBC_2.18 fputc F
> @@ -1269,6 +1270,10 @@ GLIBC_2.18 localtime_r F
>  GLIBC_2.18 lockf F
>  GLIBC_2.18 lockf64 F
>  GLIBC_2.18 locs D 0x4
> +GLIBC_2.18 login F
> +GLIBC_2.18 login_tty F
> +GLIBC_2.18 logout F
> +GLIBC_2.18 logwtmp F
>  GLIBC_2.18 longjmp F
>  GLIBC_2.18 lrand48 F
>  GLIBC_2.18 lrand48_r F
> @@ -1389,6 +1394,7 @@ GLIBC_2.18 openat F
>  GLIBC_2.18 openat64 F
>  GLIBC_2.18 opendir F
>  GLIBC_2.18 openlog F
> +GLIBC_2.18 openpty F
>  GLIBC_2.18 optarg D 0x4
>  GLIBC_2.18 opterr D 0x4
>  GLIBC_2.18 optind D 0x4
> @@ -2432,12 +2438,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libutil.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libutil.abilist
> index 0da0a40c22..44e72d5349 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.18 forkpty F
> -GLIBC_2.18 login F
> -GLIBC_2.18 login_tty F
> -GLIBC_2.18 logout F
> -GLIBC_2.18 logwtmp F
> -GLIBC_2.18 openpty F
> +GLIBC_2.18 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index f83ba2f780..9555b4a571 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -492,6 +492,7 @@ GLIBC_2.0 fnmatch F
>  GLIBC_2.0 fopen F
>  GLIBC_2.0 fopencookie F
>  GLIBC_2.0 fork F
> +GLIBC_2.0 forkpty F
>  GLIBC_2.0 fpathconf F
>  GLIBC_2.0 fprintf F
>  GLIBC_2.0 fputc F
> @@ -750,6 +751,10 @@ GLIBC_2.0 localtime F
>  GLIBC_2.0 localtime_r F
>  GLIBC_2.0 lockf F
>  GLIBC_2.0 locs D 0x4
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
>  GLIBC_2.0 longjmp F
>  GLIBC_2.0 lrand48 F
>  GLIBC_2.0 lrand48_r F
> @@ -829,6 +834,7 @@ GLIBC_2.0 open F
>  GLIBC_2.0 open_memstream F
>  GLIBC_2.0 opendir F
>  GLIBC_2.0 openlog F
> +GLIBC_2.0 openpty F
>  GLIBC_2.0 optarg D 0x4
>  GLIBC_2.0 opterr D 0x4
>  GLIBC_2.0 optind D 0x4
> @@ -2430,12 +2436,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libutil.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libutil.abilist
> index aa2d35b323..3d51141483 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.0 forkpty F
> -GLIBC_2.0 login F
> -GLIBC_2.0 login_tty F
> -GLIBC_2.0 logout F
> -GLIBC_2.0 logwtmp F
> -GLIBC_2.0 openpty F
> +GLIBC_2.0 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 347bbddb94..23e08d0b8e 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -492,6 +492,7 @@ GLIBC_2.0 fnmatch F
>  GLIBC_2.0 fopen F
>  GLIBC_2.0 fopencookie F
>  GLIBC_2.0 fork F
> +GLIBC_2.0 forkpty F
>  GLIBC_2.0 fpathconf F
>  GLIBC_2.0 fprintf F
>  GLIBC_2.0 fputc F
> @@ -750,6 +751,10 @@ GLIBC_2.0 localtime F
>  GLIBC_2.0 localtime_r F
>  GLIBC_2.0 lockf F
>  GLIBC_2.0 locs D 0x4
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
>  GLIBC_2.0 longjmp F
>  GLIBC_2.0 lrand48 F
>  GLIBC_2.0 lrand48_r F
> @@ -829,6 +834,7 @@ GLIBC_2.0 open F
>  GLIBC_2.0 open_memstream F
>  GLIBC_2.0 opendir F
>  GLIBC_2.0 openlog F
> +GLIBC_2.0 openpty F
>  GLIBC_2.0 optarg D 0x4
>  GLIBC_2.0 opterr D 0x4
>  GLIBC_2.0 optind D 0x4
> @@ -2428,12 +2434,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libutil.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libutil.abilist
> index aa2d35b323..3d51141483 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.0 forkpty F
> -GLIBC_2.0 login F
> -GLIBC_2.0 login_tty F
> -GLIBC_2.0 logout F
> -GLIBC_2.0 logwtmp F
> -GLIBC_2.0 openpty F
> +GLIBC_2.0 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 26b7ab529b..ef1ee91db5 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -492,6 +492,7 @@ GLIBC_2.0 fnmatch F
>  GLIBC_2.0 fopen F
>  GLIBC_2.0 fopencookie F
>  GLIBC_2.0 fork F
> +GLIBC_2.0 forkpty F
>  GLIBC_2.0 fpathconf F
>  GLIBC_2.0 fprintf F
>  GLIBC_2.0 fputc F
> @@ -750,6 +751,10 @@ GLIBC_2.0 localtime F
>  GLIBC_2.0 localtime_r F
>  GLIBC_2.0 lockf F
>  GLIBC_2.0 locs D 0x4
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
>  GLIBC_2.0 longjmp F
>  GLIBC_2.0 lrand48 F
>  GLIBC_2.0 lrand48_r F
> @@ -829,6 +834,7 @@ GLIBC_2.0 open F
>  GLIBC_2.0 open_memstream F
>  GLIBC_2.0 opendir F
>  GLIBC_2.0 openlog F
> +GLIBC_2.0 openpty F
>  GLIBC_2.0 optarg D 0x4
>  GLIBC_2.0 opterr D 0x4
>  GLIBC_2.0 optind D 0x4
> @@ -2436,12 +2442,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index e667b0e553..dd64a2fb1c 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -490,6 +490,7 @@ GLIBC_2.0 fnmatch F
>  GLIBC_2.0 fopen F
>  GLIBC_2.0 fopencookie F
>  GLIBC_2.0 fork F
> +GLIBC_2.0 forkpty F
>  GLIBC_2.0 fpathconf F
>  GLIBC_2.0 fprintf F
>  GLIBC_2.0 fputc F
> @@ -748,6 +749,10 @@ GLIBC_2.0 localtime F
>  GLIBC_2.0 localtime_r F
>  GLIBC_2.0 lockf F
>  GLIBC_2.0 locs D 0x8
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
>  GLIBC_2.0 longjmp F
>  GLIBC_2.0 lrand48 F
>  GLIBC_2.0 lrand48_r F
> @@ -827,6 +832,7 @@ GLIBC_2.0 open F
>  GLIBC_2.0 open_memstream F
>  GLIBC_2.0 opendir F
>  GLIBC_2.0 openlog F
> +GLIBC_2.0 openpty F
>  GLIBC_2.0 optarg D 0x8
>  GLIBC_2.0 opterr D 0x4
>  GLIBC_2.0 optind D 0x4
> @@ -2354,12 +2360,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index 89a1cc7da6..434d485900 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -907,6 +907,7 @@ GLIBC_2.21 fopen F
>  GLIBC_2.21 fopen64 F
>  GLIBC_2.21 fopencookie F
>  GLIBC_2.21 fork F
> +GLIBC_2.21 forkpty F
>  GLIBC_2.21 fpathconf F
>  GLIBC_2.21 fprintf F
>  GLIBC_2.21 fputc F
> @@ -1312,6 +1313,10 @@ GLIBC_2.21 localtime_r F
>  GLIBC_2.21 lockf F
>  GLIBC_2.21 lockf64 F
>  GLIBC_2.21 locs D 0x4
> +GLIBC_2.21 login F
> +GLIBC_2.21 login_tty F
> +GLIBC_2.21 logout F
> +GLIBC_2.21 logwtmp F
>  GLIBC_2.21 longjmp F
>  GLIBC_2.21 lrand48 F
>  GLIBC_2.21 lrand48_r F
> @@ -1432,6 +1437,7 @@ GLIBC_2.21 openat F
>  GLIBC_2.21 openat64 F
>  GLIBC_2.21 opendir F
>  GLIBC_2.21 openlog F
> +GLIBC_2.21 openpty F
>  GLIBC_2.21 optarg D 0x4
>  GLIBC_2.21 opterr D 0x4
>  GLIBC_2.21 optind D 0x4
> @@ -2474,12 +2480,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libutil.abilist b/sysdeps/unix/sysv/linux/nios2/libutil.abilist
> index 19608bd74d..742ebe67fc 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.21 forkpty F
> -GLIBC_2.21 login F
> -GLIBC_2.21 login_tty F
> -GLIBC_2.21 logout F
> -GLIBC_2.21 logwtmp F
> -GLIBC_2.21 openpty F
> +GLIBC_2.21 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index f364c5219e..8472b85f26 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -503,6 +503,7 @@ GLIBC_2.0 fnmatch F
>  GLIBC_2.0 fopen F
>  GLIBC_2.0 fopencookie F
>  GLIBC_2.0 fork F
> +GLIBC_2.0 forkpty F
>  GLIBC_2.0 fpathconf F
>  GLIBC_2.0 fprintf F
>  GLIBC_2.0 fputc F
> @@ -761,6 +762,10 @@ GLIBC_2.0 localtime F
>  GLIBC_2.0 localtime_r F
>  GLIBC_2.0 lockf F
>  GLIBC_2.0 locs D 0x4
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
>  GLIBC_2.0 longjmp F
>  GLIBC_2.0 lrand48 F
>  GLIBC_2.0 lrand48_r F
> @@ -840,6 +845,7 @@ GLIBC_2.0 open F
>  GLIBC_2.0 open_memstream F
>  GLIBC_2.0 opendir F
>  GLIBC_2.0 openlog F
> +GLIBC_2.0 openpty F
>  GLIBC_2.0 optarg D 0x4
>  GLIBC_2.0 opterr D 0x4
>  GLIBC_2.0 optind D 0x4
> @@ -2492,12 +2498,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libutil.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libutil.abilist
> index aa2d35b323..3d51141483 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.0 forkpty F
> -GLIBC_2.0 login F
> -GLIBC_2.0 login_tty F
> -GLIBC_2.0 logout F
> -GLIBC_2.0 logwtmp F
> -GLIBC_2.0 openpty F
> +GLIBC_2.0 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index f5bcc78afe..2d09ad58a7 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -503,6 +503,7 @@ GLIBC_2.0 fnmatch F
>  GLIBC_2.0 fopen F
>  GLIBC_2.0 fopencookie F
>  GLIBC_2.0 fork F
> +GLIBC_2.0 forkpty F
>  GLIBC_2.0 fpathconf F
>  GLIBC_2.0 fprintf F
>  GLIBC_2.0 fputc F
> @@ -761,6 +762,10 @@ GLIBC_2.0 localtime F
>  GLIBC_2.0 localtime_r F
>  GLIBC_2.0 lockf F
>  GLIBC_2.0 locs D 0x4
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
>  GLIBC_2.0 longjmp F
>  GLIBC_2.0 lrand48 F
>  GLIBC_2.0 lrand48_r F
> @@ -840,6 +845,7 @@ GLIBC_2.0 open F
>  GLIBC_2.0 open_memstream F
>  GLIBC_2.0 opendir F
>  GLIBC_2.0 openlog F
> +GLIBC_2.0 openpty F
>  GLIBC_2.0 optarg D 0x4
>  GLIBC_2.0 opterr D 0x4
>  GLIBC_2.0 optind D 0x4
> @@ -2525,12 +2531,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index 6032716053..6bf4c25d6c 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -877,6 +877,7 @@ GLIBC_2.3 fopen F
>  GLIBC_2.3 fopen64 F
>  GLIBC_2.3 fopencookie F
>  GLIBC_2.3 fork F
> +GLIBC_2.3 forkpty F
>  GLIBC_2.3 fpathconf F
>  GLIBC_2.3 fprintf F
>  GLIBC_2.3 fputc F
> @@ -1245,6 +1246,10 @@ GLIBC_2.3 localtime_r F
>  GLIBC_2.3 lockf F
>  GLIBC_2.3 lockf64 F
>  GLIBC_2.3 locs D 0x8
> +GLIBC_2.3 login F
> +GLIBC_2.3 login_tty F
> +GLIBC_2.3 logout F
> +GLIBC_2.3 logwtmp F
>  GLIBC_2.3 longjmp F
>  GLIBC_2.3 lrand48 F
>  GLIBC_2.3 lrand48_r F
> @@ -1348,6 +1353,7 @@ GLIBC_2.3 open64 F
>  GLIBC_2.3 open_memstream F
>  GLIBC_2.3 opendir F
>  GLIBC_2.3 openlog F
> +GLIBC_2.3 openpty F
>  GLIBC_2.3 optarg D 0x8
>  GLIBC_2.3 opterr D 0x4
>  GLIBC_2.3 optind D 0x4
> @@ -2262,12 +2268,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libutil.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libutil.abilist
> index 9cf1da7aa4..7688d9c062 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.3 forkpty F
> -GLIBC_2.3 login F
> -GLIBC_2.3 login_tty F
> -GLIBC_2.3 logout F
> -GLIBC_2.3 logwtmp F
> -GLIBC_2.3 openpty F
> +GLIBC_2.3 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index 8c5494e1dc..c5480c1e8d 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -950,6 +950,7 @@ GLIBC_2.17 fopen F
>  GLIBC_2.17 fopen64 F
>  GLIBC_2.17 fopencookie F
>  GLIBC_2.17 fork F
> +GLIBC_2.17 forkpty F
>  GLIBC_2.17 fpathconf F
>  GLIBC_2.17 fprintf F
>  GLIBC_2.17 fputc F
> @@ -1355,6 +1356,10 @@ GLIBC_2.17 localtime_r F
>  GLIBC_2.17 lockf F
>  GLIBC_2.17 lockf64 F
>  GLIBC_2.17 locs D 0x8
> +GLIBC_2.17 login F
> +GLIBC_2.17 login_tty F
> +GLIBC_2.17 logout F
> +GLIBC_2.17 logwtmp F
>  GLIBC_2.17 longjmp F
>  GLIBC_2.17 lrand48 F
>  GLIBC_2.17 lrand48_r F
> @@ -1475,6 +1480,7 @@ GLIBC_2.17 openat F
>  GLIBC_2.17 openat64 F
>  GLIBC_2.17 opendir F
>  GLIBC_2.17 openlog F
> +GLIBC_2.17 openpty F
>  GLIBC_2.17 optarg D 0x8
>  GLIBC_2.17 opterr D 0x4
>  GLIBC_2.17 optind D 0x4
> @@ -2561,12 +2567,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libutil.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libutil.abilist
> index 99889de22e..3a2da66d2c 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.17 forkpty F
> -GLIBC_2.17 login F
> -GLIBC_2.17 login_tty F
> -GLIBC_2.17 logout F
> -GLIBC_2.17 logwtmp F
> -GLIBC_2.17 openpty F
> +GLIBC_2.17 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index d7db279c1e..df236735a6 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -799,6 +799,7 @@ GLIBC_2.33 fopen F
>  GLIBC_2.33 fopen64 F
>  GLIBC_2.33 fopencookie F
>  GLIBC_2.33 fork F
> +GLIBC_2.33 forkpty F
>  GLIBC_2.33 fpathconf F
>  GLIBC_2.33 fprintf F
>  GLIBC_2.33 fputc F
> @@ -1195,6 +1196,10 @@ GLIBC_2.33 localtime F
>  GLIBC_2.33 localtime_r F
>  GLIBC_2.33 lockf F
>  GLIBC_2.33 lockf64 F
> +GLIBC_2.33 login F
> +GLIBC_2.33 login_tty F
> +GLIBC_2.33 logout F
> +GLIBC_2.33 logwtmp F
>  GLIBC_2.33 longjmp F
>  GLIBC_2.33 lrand48 F
>  GLIBC_2.33 lrand48_r F
> @@ -1323,6 +1328,7 @@ GLIBC_2.33 openat F
>  GLIBC_2.33 openat64 F
>  GLIBC_2.33 opendir F
>  GLIBC_2.33 openlog F
> +GLIBC_2.33 openpty F
>  GLIBC_2.33 optarg D 0x4
>  GLIBC_2.33 opterr D 0x4
>  GLIBC_2.33 optind D 0x4
> @@ -2126,12 +2132,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libutil.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libutil.abilist
> index 59ae944bda..d23f268a65 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.33 forkpty F
> -GLIBC_2.33 login F
> -GLIBC_2.33 login_tty F
> -GLIBC_2.33 logout F
> -GLIBC_2.33 logwtmp F
> -GLIBC_2.33 openpty F
> +GLIBC_2.33 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index ef03dc0f9e..6c60a64232 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -842,6 +842,7 @@ GLIBC_2.27 fopen F
>  GLIBC_2.27 fopen64 F
>  GLIBC_2.27 fopencookie F
>  GLIBC_2.27 fork F
> +GLIBC_2.27 forkpty F
>  GLIBC_2.27 fpathconf F
>  GLIBC_2.27 fprintf F
>  GLIBC_2.27 fputc F
> @@ -1250,6 +1251,10 @@ GLIBC_2.27 localtime F
>  GLIBC_2.27 localtime_r F
>  GLIBC_2.27 lockf F
>  GLIBC_2.27 lockf64 F
> +GLIBC_2.27 login F
> +GLIBC_2.27 login_tty F
> +GLIBC_2.27 logout F
> +GLIBC_2.27 logwtmp F
>  GLIBC_2.27 longjmp F
>  GLIBC_2.27 lrand48 F
>  GLIBC_2.27 lrand48_r F
> @@ -1370,6 +1375,7 @@ GLIBC_2.27 openat F
>  GLIBC_2.27 openat64 F
>  GLIBC_2.27 opendir F
>  GLIBC_2.27 openlog F
> +GLIBC_2.27 openpty F
>  GLIBC_2.27 optarg D 0x8
>  GLIBC_2.27 opterr D 0x4
>  GLIBC_2.27 optind D 0x4
> @@ -2326,12 +2332,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libutil.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libutil.abilist
> index cbfec8d46e..c2cbef8fce 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.27 forkpty F
> -GLIBC_2.27 login F
> -GLIBC_2.27 login_tty F
> -GLIBC_2.27 logout F
> -GLIBC_2.27 logwtmp F
> -GLIBC_2.27 openpty F
> +GLIBC_2.27 __libutil_version_placeholder F

Ok.

> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/Makefile b/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
> index fd8cf92633..6b6d59b7dd 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
> @@ -2,8 +2,7 @@
>  default-abi := 32
>  
>  ifeq ($(subdir),login)
> -sysdep_routines += utmp32 utmpx32
> -libutil-routines += login32
> +sysdep_routines += utmp32 utmpx32 login32
>  endif
>  
>  ifeq ($(subdir),misc)

Ok.

> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/Versions b/sysdeps/unix/sysv/linux/s390/s390-32/Versions
> index cc03e70015..bd1a46df88 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/Versions
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/Versions
> @@ -42,6 +42,7 @@ libc {
>      updwtmpx;
>      getutmp;
>      getutmpx;
> +    login;
>    }
>    GLIBC_2.11 {
>      fallocate64;
> @@ -53,6 +54,6 @@ libc {
>  
>  libutil {
>    GLIBC_2.9 {
> -    login;
> +    __libutil_version_placeholder;
>    }
>  }

Ok.

> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index 9118cb68ec..0686117011 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -493,6 +493,7 @@ GLIBC_2.0 fnmatch F
>  GLIBC_2.0 fopen F
>  GLIBC_2.0 fopencookie F
>  GLIBC_2.0 fork F
> +GLIBC_2.0 forkpty F
>  GLIBC_2.0 fpathconf F
>  GLIBC_2.0 fprintf F
>  GLIBC_2.0 fputc F
> @@ -751,6 +752,10 @@ GLIBC_2.0 localtime F
>  GLIBC_2.0 localtime_r F
>  GLIBC_2.0 lockf F
>  GLIBC_2.0 locs D 0x4
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
>  GLIBC_2.0 longjmp F
>  GLIBC_2.0 lrand48 F
>  GLIBC_2.0 lrand48_r F
> @@ -831,6 +836,7 @@ GLIBC_2.0 open F
>  GLIBC_2.0 open_memstream F
>  GLIBC_2.0 opendir F
>  GLIBC_2.0 openlog F
> +GLIBC_2.0 openpty F
>  GLIBC_2.0 optarg D 0x4
>  GLIBC_2.0 opterr D 0x4
>  GLIBC_2.0 optind D 0x4
> @@ -2490,12 +2496,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> @@ -2931,6 +2943,7 @@ GLIBC_2.9 getutxent F
>  GLIBC_2.9 getutxid F
>  GLIBC_2.9 getutxline F
>  GLIBC_2.9 inotify_init1 F
> +GLIBC_2.9 login F
>  GLIBC_2.9 pipe2 F
>  GLIBC_2.9 pututline F
>  GLIBC_2.9 pututxline F

Ok.

> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libutil-compat.c b/sysdeps/unix/sysv/linux/s390/s390-32/libutil-compat.c
> new file mode 100644
> index 0000000000..787b874e31
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libutil-compat.c
> @@ -0,0 +1,23 @@
> +/* Placeholder compatibility symbols for libutil.  s390 version.
> +   Copyright (C) 2021 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 "utmp-compat.h"
> +#include <login/libutil-compat.c>
> +
> +symbol_version (__libutil_version_placeholder_1,
> +                __libutil_version_placeholder, UTMP_COMPAT_BASE);

Ok.

> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libutil.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libutil.abilist
> index bf735f7c00..5c9c8a5b00 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libutil.abilist
> @@ -1,7 +1,2 @@
> -GLIBC_2.0 forkpty F
> -GLIBC_2.0 login F
> -GLIBC_2.0 login_tty F
> -GLIBC_2.0 logout F
> -GLIBC_2.0 logwtmp F
> -GLIBC_2.0 openpty F
> -GLIBC_2.9 login F
> +GLIBC_2.0 __libutil_version_placeholder F
> +GLIBC_2.9 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/login.c b/sysdeps/unix/sysv/linux/s390/s390-32/login.c
> index 5df028298a..62742a8a5f 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/login.c
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/login.c
> @@ -23,13 +23,14 @@
>  #include <unistd.h>
>  #include <stdlib.h>
>  #include <utmp.h>
> +#include <shlib-compat.h>
>  
>  #include "utmp-compat.h"
>  
> -#undef weak_alias
> -#define weak_alias(n,a)
> -#define login __login
> +#undef compat_symbol
> +#define compat_symbol(...)
>  #include "login/login.c"
> -#undef login
>  
> -default_symbol_version (__login, login, UTMP_COMPAT_BASE);
> +/* Compatibility symbol as formerly found in libutil.  login@GLIBC_2.0
> +   is supplied by login32.c.  */
> +symbol_version (__login, login, UTMP_COMPAT_BASE);

Ok.

> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/login32.c b/sysdeps/unix/sysv/linux/s390/s390-32/login32.c
> index 45419bc092..e37da4e573 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/login32.c
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/login32.c
> @@ -16,12 +16,13 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -#include <sys/types.h>
> -#include <utmp.h>
> -#include <libc-symbols.h>
> +#ifdef SHARED
> +# include <sys/types.h>
> +# include <utmp.h>
> +# include <libc-symbols.h>
>  
> -#include "utmp32.h"
> -#include "utmp-convert.h"
> +# include "utmp32.h"
> +# include "utmp-convert.h"
>  
>  /* Write the given entry into utmp and wtmp.  */
>  void
> @@ -34,3 +35,4 @@ login32 (const struct utmp32 *entry)
>  }
>  
>  symbol_version (login32, login, GLIBC_2.0);
> +#endif

Ok.

> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 66c01bd7e7..db40c539b9 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -811,6 +811,7 @@ GLIBC_2.2 fopen F
>  GLIBC_2.2 fopen64 F
>  GLIBC_2.2 fopencookie F
>  GLIBC_2.2 fork F
> +GLIBC_2.2 forkpty F
>  GLIBC_2.2 fpathconf F
>  GLIBC_2.2 fprintf F
>  GLIBC_2.2 fputc F
> @@ -1142,6 +1143,10 @@ GLIBC_2.2 localtime_r F
>  GLIBC_2.2 lockf F
>  GLIBC_2.2 lockf64 F
>  GLIBC_2.2 locs D 0x8
> +GLIBC_2.2 login F
> +GLIBC_2.2 login_tty F
> +GLIBC_2.2 logout F
> +GLIBC_2.2 logwtmp F
>  GLIBC_2.2 longjmp F
>  GLIBC_2.2 lrand48 F
>  GLIBC_2.2 lrand48_r F
> @@ -1241,6 +1246,7 @@ GLIBC_2.2 open64 F
>  GLIBC_2.2 open_memstream F
>  GLIBC_2.2 opendir F
>  GLIBC_2.2 openlog F
> +GLIBC_2.2 openpty F
>  GLIBC_2.2 optarg D 0x8
>  GLIBC_2.2 opterr D 0x4
>  GLIBC_2.2 optind D 0x4
> @@ -2299,12 +2305,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libutil.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libutil.abilist
> index 14bd135ea8..e6f3e6109f 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.2 forkpty F
> -GLIBC_2.2 login F
> -GLIBC_2.2 login_tty F
> -GLIBC_2.2 logout F
> -GLIBC_2.2 logwtmp F
> -GLIBC_2.2 openpty F
> +GLIBC_2.2 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index c40eb412c2..e373c564f1 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -7,6 +7,12 @@ GLIBC_2.0 dlclose F
>  GLIBC_2.0 dlerror F
>  GLIBC_2.0 dlopen F
>  GLIBC_2.0 dlsym F
> +GLIBC_2.0 forkpty F
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
> +GLIBC_2.0 openpty F
>  GLIBC_2.1 dlopen F
>  GLIBC_2.1 dlvsym F
>  GLIBC_2.10 __cxa_at_quick_exit F
> @@ -2345,12 +2351,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libutil.abilist b/sysdeps/unix/sysv/linux/sh/be/libutil.abilist
> index aa2d35b323..3d51141483 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.0 forkpty F
> -GLIBC_2.0 login F
> -GLIBC_2.0 login_tty F
> -GLIBC_2.0 logout F
> -GLIBC_2.0 logwtmp F
> -GLIBC_2.0 openpty F
> +GLIBC_2.0 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 1412d33835..dbb7ca712c 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -7,6 +7,12 @@ GLIBC_2.0 dlclose F
>  GLIBC_2.0 dlerror F
>  GLIBC_2.0 dlopen F
>  GLIBC_2.0 dlsym F
> +GLIBC_2.0 forkpty F
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
> +GLIBC_2.0 openpty F
>  GLIBC_2.1 dlopen F
>  GLIBC_2.1 dlvsym F
>  GLIBC_2.10 __cxa_at_quick_exit F
> @@ -2342,12 +2348,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libutil.abilist b/sysdeps/unix/sysv/linux/sh/le/libutil.abilist
> index aa2d35b323..3d51141483 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.0 forkpty F
> -GLIBC_2.0 login F
> -GLIBC_2.0 login_tty F
> -GLIBC_2.0 logout F
> -GLIBC_2.0 logwtmp F
> -GLIBC_2.0 openpty F
> +GLIBC_2.0 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 7b55d34753..661055f4fd 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -495,6 +495,7 @@ GLIBC_2.0 fnmatch F
>  GLIBC_2.0 fopen F
>  GLIBC_2.0 fopencookie F
>  GLIBC_2.0 fork F
> +GLIBC_2.0 forkpty F
>  GLIBC_2.0 fpathconf F
>  GLIBC_2.0 fprintf F
>  GLIBC_2.0 fputc F
> @@ -753,6 +754,10 @@ GLIBC_2.0 localtime F
>  GLIBC_2.0 localtime_r F
>  GLIBC_2.0 lockf F
>  GLIBC_2.0 locs D 0x4
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
>  GLIBC_2.0 longjmp F
>  GLIBC_2.0 lrand48 F
>  GLIBC_2.0 lrand48_r F
> @@ -833,6 +838,7 @@ GLIBC_2.0 open F
>  GLIBC_2.0 open_memstream F
>  GLIBC_2.0 opendir F
>  GLIBC_2.0 openlog F
> +GLIBC_2.0 openpty F
>  GLIBC_2.0 optarg D 0x4
>  GLIBC_2.0 opterr D 0x4
>  GLIBC_2.0 optind D 0x4
> @@ -2483,12 +2489,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libutil.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libutil.abilist
> index aa2d35b323..3d51141483 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.0 forkpty F
> -GLIBC_2.0 login F
> -GLIBC_2.0 login_tty F
> -GLIBC_2.0 logout F
> -GLIBC_2.0 logwtmp F
> -GLIBC_2.0 openpty F
> +GLIBC_2.0 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index cfd5f38864..b6b42a8312 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -7,6 +7,12 @@ GLIBC_2.0 dlclose F
>  GLIBC_2.0 dlerror F
>  GLIBC_2.0 dlopen F
>  GLIBC_2.0 dlsym F
> +GLIBC_2.0 forkpty F
> +GLIBC_2.0 login F
> +GLIBC_2.0 login_tty F
> +GLIBC_2.0 logout F
> +GLIBC_2.0 logwtmp F
> +GLIBC_2.0 openpty F
>  GLIBC_2.1 dlopen F
>  GLIBC_2.1 dlvsym F
>  GLIBC_2.10 __cxa_at_quick_exit F
> @@ -2319,12 +2325,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libutil.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libutil.abilist
> index aa2d35b323..3d51141483 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.0 forkpty F
> -GLIBC_2.0 login F
> -GLIBC_2.0 login_tty F
> -GLIBC_2.0 logout F
> -GLIBC_2.0 logwtmp F
> -GLIBC_2.0 openpty F
> +GLIBC_2.0 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index 17be05f14f..d5c5bf6a30 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -801,6 +801,7 @@ GLIBC_2.2.5 fopen F
>  GLIBC_2.2.5 fopen64 F
>  GLIBC_2.2.5 fopencookie F
>  GLIBC_2.2.5 fork F
> +GLIBC_2.2.5 forkpty F
>  GLIBC_2.2.5 fpathconf F
>  GLIBC_2.2.5 fprintf F
>  GLIBC_2.2.5 fputc F
> @@ -1135,6 +1136,10 @@ GLIBC_2.2.5 localtime_r F
>  GLIBC_2.2.5 lockf F
>  GLIBC_2.2.5 lockf64 F
>  GLIBC_2.2.5 locs D 0x8
> +GLIBC_2.2.5 login F
> +GLIBC_2.2.5 login_tty F
> +GLIBC_2.2.5 logout F
> +GLIBC_2.2.5 logwtmp F
>  GLIBC_2.2.5 longjmp F
>  GLIBC_2.2.5 lrand48 F
>  GLIBC_2.2.5 lrand48_r F
> @@ -1235,6 +1240,7 @@ GLIBC_2.2.5 open64 F
>  GLIBC_2.2.5 open_memstream F
>  GLIBC_2.2.5 opendir F
>  GLIBC_2.2.5 openlog F
> +GLIBC_2.2.5 openpty F
>  GLIBC_2.2.5 optarg D 0x8
>  GLIBC_2.2.5 opterr D 0x4
>  GLIBC_2.2.5 optind D 0x4
> @@ -2277,12 +2283,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libutil.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libutil.abilist
> index 1356ed4115..d2f5c42d0b 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.2.5 forkpty F
> -GLIBC_2.2.5 login F
> -GLIBC_2.2.5 login_tty F
> -GLIBC_2.2.5 logout F
> -GLIBC_2.2.5 logwtmp F
> -GLIBC_2.2.5 openpty F
> +GLIBC_2.2.5 __libutil_version_placeholder F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index a9db18906b..ae6b0049f6 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -866,6 +866,7 @@ GLIBC_2.16 fopen F
>  GLIBC_2.16 fopen64 F
>  GLIBC_2.16 fopencookie F
>  GLIBC_2.16 fork F
> +GLIBC_2.16 forkpty F
>  GLIBC_2.16 fpathconf F
>  GLIBC_2.16 fprintf F
>  GLIBC_2.16 fputc F
> @@ -1272,6 +1273,10 @@ GLIBC_2.16 localtime_r F
>  GLIBC_2.16 lockf F
>  GLIBC_2.16 lockf64 F
>  GLIBC_2.16 locs D 0x4
> +GLIBC_2.16 login F
> +GLIBC_2.16 login_tty F
> +GLIBC_2.16 logout F
> +GLIBC_2.16 logwtmp F
>  GLIBC_2.16 longjmp F
>  GLIBC_2.16 lrand48 F
>  GLIBC_2.16 lrand48_r F
> @@ -1394,6 +1399,7 @@ GLIBC_2.16 openat F
>  GLIBC_2.16 openat64 F
>  GLIBC_2.16 opendir F
>  GLIBC_2.16 openlog F
> +GLIBC_2.16 openpty F
>  GLIBC_2.16 optarg D 0x4
>  GLIBC_2.16 opterr D 0x4
>  GLIBC_2.16 optind D 0x4
> @@ -2380,12 +2386,18 @@ GLIBC_2.34 dlopen F
>  GLIBC_2.34 dlsym F
>  GLIBC_2.34 dlvsym F
>  GLIBC_2.34 execveat F
> +GLIBC_2.34 forkpty F
> +GLIBC_2.34 login F
> +GLIBC_2.34 login_tty F
> +GLIBC_2.34 logout F
> +GLIBC_2.34 logwtmp F
>  GLIBC_2.34 mtx_destroy F
>  GLIBC_2.34 mtx_init F
>  GLIBC_2.34 mtx_lock F
>  GLIBC_2.34 mtx_timedlock F
>  GLIBC_2.34 mtx_trylock F
>  GLIBC_2.34 mtx_unlock F
> +GLIBC_2.34 openpty F
>  GLIBC_2.34 pthread_attr_getaffinity_np F
>  GLIBC_2.34 pthread_attr_getguardsize F
>  GLIBC_2.34 pthread_attr_getstack F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libutil.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libutil.abilist
> index cff23106f5..b296642cbe 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libutil.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libutil.abilist
> @@ -1,6 +1 @@
> -GLIBC_2.16 forkpty F
> -GLIBC_2.16 login F
> -GLIBC_2.16 login_tty F
> -GLIBC_2.16 logout F
> -GLIBC_2.16 logwtmp F
> -GLIBC_2.16 openpty F
> +GLIBC_2.16 __libutil_version_placeholder F
> 

Ok.


More information about the Libc-alpha mailing list