summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2021-06-30 07:21:14 +0200
committerFlorian Weimer <fweimer@redhat.com>2021-06-30 08:43:37 +0200
commit734c60ebb607086ad6d67b2544d6b7baba72a652 (patch)
tree3d0480b60b81da20b51df998f6585feeb85a8d14
parent98164ba55d01dfe517a71cbc5538ff1f5dc563d6 (diff)
downloadglibc-734c60ebb607086ad6d67b2544d6b7baba72a652.tar.gz
glibc-734c60ebb607086ad6d67b2544d6b7baba72a652.tar.xz
glibc-734c60ebb607086ad6d67b2544d6b7baba72a652.zip
login: Move libutil into libc
The symbols forkpty, login, login_tty, logout, logwtmp, openpty
were moved using scripts/move-symbol-to-libc.py.

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 pseudoterminal terminology on modified lines.

For 390 (31-bit), this commit follows the existing style for the
compat symbol version creation.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
-rw-r--r--include/pty.h3
-rw-r--r--include/utmp.h5
-rw-r--r--login/Makefile15
-rw-r--r--login/Versions19
-rw-r--r--login/forkpty.c29
-rw-r--r--login/libutil-compat.c33
-rw-r--r--login/login.c22
-rw-r--r--login/login_tty.c32
-rw-r--r--login/logout.c19
-rw-r--r--login/logwtmp.c12
-rw-r--r--login/openpty.c59
-rw-r--r--sysdeps/mach/hurd/i386/libc.abilist12
-rw-r--r--sysdeps/mach/hurd/i386/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/alpha/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/alpha/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/arc/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/arc/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/arm/be/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/arm/be/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/arm/le/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/arm/le/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/csky/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/csky/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/hppa/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/hppa/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/i386/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/i386/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/ia64/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/ia64/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/be/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/be/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/le/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/le/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/nios2/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/nios2/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv32/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv64/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/Makefile3
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/Versions3
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist13
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libutil-compat.c23
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libutil.abilist9
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/login.c11
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/login32.c12
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/sh/be/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/sh/be/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/sh/le/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/sh/le/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/64/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/64/libutil.abilist7
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/libutil.abilist7
79 files changed, 640 insertions, 269 deletions
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
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
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)"'
 
@@ -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
 
diff --git a/login/Versions b/login/Versions
index 475fcf063f..b1ccf86f4d 100644
--- a/login/Versions
+++ b/login/Versions
@@ -16,6 +16,14 @@ libc {
 
     # u*
     updwtmp; utmpname;
+
+    # Symbols formerly in libutil.
+    forkpty;
+    login;
+    login_tty;
+    logout;
+    logwtmp;
+    openpty;
   }
   GLIBC_2.1 {
     # e*
@@ -45,10 +53,19 @@ 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;
   }
 }
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
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);
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
@@ -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
diff --git a/login/login_tty.c b/login/login_tty.c
index a94f5cb861..a85b388482 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();
+	__setsid();
 #ifdef TIOCSCTTY
-	if (ioctl(fd, TIOCSCTTY, (char *)NULL) == -1)
+	if (__ioctl(fd, TIOCSCTTY, NULL) == -1)
 		return (-1);
 #else
 	{
@@ -53,24 +54,29 @@ login_tty (int fd)
 	  if (fdname)
 	    {
 	      if (fd != 0)
-		(void) close (0);
+		_close (0);
 	      if (fd != 1)
-		(void) close (1);
+		__close (1);
 	      if (fd != 2)
-		(void) close (2);
-	      newfd = open (fdname, O_RDWR);
-	      (void) close (newfd);
+		__close (2);
+	      newfd = __open64 (fdname, O_RDWR);
+	      __close (newfd);
 	    }
 	}
 #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);
+		__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
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
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
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);
@@ -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
diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
index 120131a768..fcfe64f26b 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
@@ -2229,6 +2235,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 4736a5966f..ea7fdabc5a 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -878,6 +878,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
@@ -1285,6 +1286,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
@@ -1415,6 +1420,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
@@ -2415,8 +2421,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2433,6 +2444,7 @@ 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 89257e39c1..8b1adc918b 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
@@ -2514,8 +2520,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2532,6 +2543,7 @@ 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 e1eef24877..740f39add4 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -822,6 +822,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
@@ -1216,6 +1217,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
@@ -1349,6 +1354,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
@@ -2174,8 +2180,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2192,6 +2203,7 @@ 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 19d609e058..6f41d2c0fa 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -317,8 +317,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -335,6 +340,7 @@ 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
@@ -1290,6 +1296,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
@@ -1682,6 +1689,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
@@ -1801,6 +1812,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 371274917a..695f809fce 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -314,8 +314,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -332,6 +337,7 @@ 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
@@ -1287,6 +1293,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
@@ -1679,6 +1686,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
@@ -1798,6 +1809,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 ee2ffbabc4..cc017b487f 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -861,6 +861,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
@@ -1271,6 +1272,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
@@ -1406,6 +1411,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
@@ -2439,8 +2445,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2457,6 +2468,7 @@ 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 c6d4d2478e..b6b087d6ac 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 aio_cancel F
 GLIBC_2.1 aio_cancel64 F
 GLIBC_2.1 aio_error F
@@ -2392,8 +2398,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2410,6 +2421,7 @@ 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 f4e3082784..40f740253b 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
@@ -2576,8 +2582,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2594,6 +2605,7 @@ 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 8c13d88052..157f244ea0 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 aio_cancel F
 GLIBC_2.1 aio_cancel64 F
 GLIBC_2.1 aio_error F
@@ -2352,8 +2358,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2370,6 +2381,7 @@ 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 43a692714f..bbc40bb608 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -318,8 +318,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -336,6 +341,7 @@ 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
@@ -1279,6 +1285,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
@@ -1666,6 +1673,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
@@ -1785,6 +1796,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 901f086bfa..5aba59e956 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
@@ -2519,8 +2525,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2537,6 +2548,7 @@ 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 d14576eb2e..bfa665f086 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -880,6 +880,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
@@ -1287,6 +1288,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
@@ -1417,6 +1422,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
@@ -2490,8 +2496,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2508,6 +2519,7 @@ 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 b01add6f6c..cf93327b44 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -880,6 +880,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
@@ -1287,6 +1288,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
@@ -1417,6 +1422,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
@@ -2487,8 +2493,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2505,6 +2516,7 @@ 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 ea5fee313d..1ff01ce150 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
@@ -2484,8 +2490,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2502,6 +2513,7 @@ 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 5f20e5f3fc..104d8cbc02 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
@@ -2482,8 +2488,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2500,6 +2511,7 @@ 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 f3c9081242..6285d3c8f8 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
@@ -2490,8 +2496,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2508,6 +2519,7 @@ 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 2e10c747a2..6a4c1816d4 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
@@ -2403,8 +2409,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2421,6 +2432,7 @@ 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 36563055a8..4cc199dbdb 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -923,6 +923,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
@@ -1330,6 +1331,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
@@ -1460,6 +1465,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
@@ -2529,8 +2535,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2547,6 +2558,7 @@ 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 229731b575..46a5759c0a 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
@@ -2546,8 +2552,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2564,6 +2575,7 @@ 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 8b3bdc0909..10ac038d7c 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
@@ -2579,8 +2585,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2597,6 +2608,7 @@ 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 5797cc29c1..eaa36b3fc7 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -892,6 +892,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
@@ -1262,6 +1263,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
@@ -1365,6 +1370,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
@@ -2316,8 +2322,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2334,6 +2345,7 @@ 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 a60d9b5d12..9d7c55a4b5 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -966,6 +966,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
@@ -1373,6 +1374,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
@@ -1503,6 +1508,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
@@ -2611,8 +2617,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2629,6 +2640,7 @@ 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 0c32c81af0..b902197ee9 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -815,6 +815,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
@@ -1213,6 +1214,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
@@ -1351,6 +1356,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
@@ -2176,8 +2182,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2194,6 +2205,7 @@ 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 df65b69374..9609912bd5 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -858,6 +858,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
@@ -1268,6 +1269,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
@@ -1398,6 +1403,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
@@ -2376,8 +2382,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2394,6 +2405,7 @@ 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
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)
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;
   }
 }
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 5497df2f61..8f11602d61 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
@@ -2544,8 +2550,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2562,6 +2573,7 @@ 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
@@ -3005,6 +3017,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
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);
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);
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
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 8a050a9374..876aa5ea80 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -826,6 +826,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
@@ -1159,6 +1160,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
@@ -1258,6 +1263,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
@@ -2353,8 +2359,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2371,6 +2382,7 @@ 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 8de0cd37f3..c4b037321b 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 aio_cancel F
 GLIBC_2.1 aio_cancel64 F
 GLIBC_2.1 aio_error F
@@ -2399,8 +2405,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2417,6 +2428,7 @@ 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 ef67585b2a..fbceadac42 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 aio_cancel F
 GLIBC_2.1 aio_cancel64 F
 GLIBC_2.1 aio_error F
@@ -2396,8 +2402,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2414,6 +2425,7 @@ 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 ee2aa17bca..12f050136c 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
@@ -2539,8 +2545,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2557,6 +2568,7 @@ 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 8a0cd15b42..bc99f6f6d7 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 aio_cancel F
 GLIBC_2.1 aio_cancel64 F
 GLIBC_2.1 aio_error F
@@ -2375,8 +2381,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2393,6 +2404,7 @@ 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 63a7bc8388..0d98e85292 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -816,6 +816,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
@@ -1152,6 +1153,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
@@ -1252,6 +1257,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
@@ -2331,8 +2337,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2349,6 +2360,7 @@ 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 cc128a6b9b..b6d917c71e 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -882,6 +882,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
@@ -1290,6 +1291,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
@@ -1422,6 +1427,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
@@ -2430,8 +2436,13 @@ 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 lio_listio F
 GLIBC_2.34 lio_listio64 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 mq_close F
 GLIBC_2.34 mq_getattr F
 GLIBC_2.34 mq_notify F
@@ -2448,6 +2459,7 @@ 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