public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 0/3] Move libutil into libc
@ 2021-06-21 11:46 Florian Weimer
  2021-06-21 11:46 ` [PATCH 1/3] login: Hidden prototypes for _getpt, __ptsname_r, grantpt, unlockpt Florian Weimer
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Florian Weimer @ 2021-06-21 11:46 UTC (permalink / raw)
  To: libc-alpha

There is no pthread dependency, so this move applies to both Linux and
Hurd.  Some preparations for PLT avoidance are needed.

The symbols are quite intertwined, so this is not split up into separate
commits.

On s390 (31-bit), some tweaks are needed due to the login@@GLIBC_2.9
symbol version.

Thanks,
Florian

Florian Weimer (3):
  login: Hidden prototypes for _getpt, __ptsname_r, grantpt, unlockpt
  login: Rework hidden prototypes for __setutent, __utmpname, __endutent
  login: Move libutil into libc

 include/pty.h                                 |  3 +-
 include/stdlib.h                              |  6 ++
 include/utmp.h                                | 14 +++--
 login/Makefile                                | 15 +++--
 login/Versions                                |  9 ++-
 login/forkpty.c                               | 29 +++++----
 login/getpt.c                                 |  1 +
 login/getutent_r.c                            |  2 +
 login/grantpt.c                               |  2 +-
 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 ++++++++++---------
 login/ptsname.c                               |  1 +
 login/utmpname.c                              |  1 +
 sysdeps/mach/hurd/i386/libc.abilist           | 12 ++++
 sysdeps/mach/hurd/i386/libutil.abilist        |  7 +--
 sysdeps/mach/hurd/ptsname.c                   |  1 +
 sysdeps/unix/bsd/getpt.c                      |  3 +-
 sysdeps/unix/bsd/unlockpt.c                   |  1 +
 sysdeps/unix/grantpt.c                        |  1 +
 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/getpt.c               |  2 +
 sysdeps/unix/sysv/linux/grantpt.c             |  1 +
 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 +--
 sysdeps/unix/sysv/linux/ptsname.c             |  1 +
 .../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 +--
 sysdeps/unix/sysv/linux/unlockpt.c            |  1 +
 .../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 +--
 93 files changed, 658 insertions(+), 274 deletions(-)
 create mode 100644 login/libutil-compat.c
 create mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/libutil-compat.c

-- 
2.31.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] login: Hidden prototypes for _getpt, __ptsname_r, grantpt, unlockpt
  2021-06-21 11:46 [PATCH 0/3] Move libutil into libc Florian Weimer
@ 2021-06-21 11:46 ` Florian Weimer
  2021-06-29 13:21   ` Adhemerval Zanella
  2021-06-21 11:46 ` [PATCH 2/3] login: Rework hidden prototypes for __setutent, __utmpname, __endutent Florian Weimer
  2021-06-21 11:47 ` [PATCH 3/3] login: Move libutil into libc Florian Weimer
  2 siblings, 1 reply; 7+ messages in thread
From: Florian Weimer @ 2021-06-21 11:46 UTC (permalink / raw)
  To: libc-alpha

---
 include/stdlib.h                   | 6 ++++++
 login/getpt.c                      | 1 +
 login/grantpt.c                    | 2 +-
 login/ptsname.c                    | 1 +
 sysdeps/mach/hurd/ptsname.c        | 1 +
 sysdeps/unix/bsd/getpt.c           | 3 ++-
 sysdeps/unix/bsd/unlockpt.c        | 1 +
 sysdeps/unix/grantpt.c             | 1 +
 sysdeps/unix/sysv/linux/getpt.c    | 2 ++
 sysdeps/unix/sysv/linux/grantpt.c  | 1 +
 sysdeps/unix/sysv/linux/ptsname.c  | 1 +
 sysdeps/unix/sysv/linux/unlockpt.c | 1 +
 12 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/include/stdlib.h b/include/stdlib.h
index e2453c1896..1f6e1508e4 100644
--- a/include/stdlib.h
+++ b/include/stdlib.h
@@ -137,6 +137,12 @@ libc_hidden_proto (__libc_reallocarray)
 
 extern int __libc_system (const char *line);
 
+extern __typeof (getpt) __getpt;
+extern __typeof (ptsname_r) __ptsname_r;
+libc_hidden_proto (__getpt)
+libc_hidden_proto (__ptsname_r)
+libc_hidden_proto (grantpt)
+libc_hidden_proto (unlockpt)
 
 extern double __strtod_internal (const char *__restrict __nptr,
 				 char **__restrict __endptr, int __group)
diff --git a/login/getpt.c b/login/getpt.c
index 585bc3bffd..9b71765705 100644
--- a/login/getpt.c
+++ b/login/getpt.c
@@ -27,6 +27,7 @@ __getpt (void)
   __set_errno (ENOSYS);
   return -1;
 }
+libc_hidden_def (__getpt)
 weak_alias (__getpt, getpt)
 
 /* We cannot define posix_openpt in general for BSD systems.  */
diff --git a/login/grantpt.c b/login/grantpt.c
index 7dc5db3fb7..939096682a 100644
--- a/login/grantpt.c
+++ b/login/grantpt.c
@@ -28,5 +28,5 @@ grantpt (int fd __attribute__ ((unused)))
   __set_errno (ENOSYS);
   return -1;
 }
-
+libc_hidden_def (grantpt)
 stub_warning (grantpt)
diff --git a/login/ptsname.c b/login/ptsname.c
index c42f27d07b..ae94fbddf4 100644
--- a/login/ptsname.c
+++ b/login/ptsname.c
@@ -38,6 +38,7 @@ __ptsname_r (int fd __attribute__ ((unused)),
   __set_errno (ENOSYS);
   return ENOSYS;
 }
+libc_hidden_def (__ptsname_r)
 weak_alias (__ptsname_r, ptsname_r)
 
 stub_warning(ptsname)
diff --git a/sysdeps/mach/hurd/ptsname.c b/sysdeps/mach/hurd/ptsname.c
index d5f21a766f..5405b8f981 100644
--- a/sysdeps/mach/hurd/ptsname.c
+++ b/sysdeps/mach/hurd/ptsname.c
@@ -88,4 +88,5 @@ __ptsname_r (int fd, char *buf, size_t buflen)
 {
   return __ptsname_internal (fd, buf, buflen, NULL);
 }
+libc_hidden_def (__ptsname_r)
 weak_alias (__ptsname_r, ptsname_r)
diff --git a/sysdeps/unix/bsd/getpt.c b/sysdeps/unix/bsd/getpt.c
index 1dde0cc4f1..2fa6632327 100644
--- a/sysdeps/unix/bsd/getpt.c
+++ b/sysdeps/unix/bsd/getpt.c
@@ -20,7 +20,7 @@
 #include <fcntl.h>
 #include <string.h>
 #include <unistd.h>
-
+#include <stdlib.h>
 
 /* Prefix for master pseudo terminal nodes.  */
 #define _PATH_PTY "/dev/pty"
@@ -79,6 +79,7 @@ __getpt (void)
 {
   return __bsd_openpt (O_RDWR);
 }
+libc_hidden_def (__getpt)
 weak_alias (__getpt, getpt)
 
 int
diff --git a/sysdeps/unix/bsd/unlockpt.c b/sysdeps/unix/bsd/unlockpt.c
index 6cfdb93d36..181e615cc6 100644
--- a/sysdeps/unix/bsd/unlockpt.c
+++ b/sysdeps/unix/bsd/unlockpt.c
@@ -39,3 +39,4 @@ unlockpt (int fd)
     }
   return __revoke (buf);
 }
+libc_hidden_def (unlockpt)
diff --git a/sysdeps/unix/grantpt.c b/sysdeps/unix/grantpt.c
index 46b6f56629..6269ee2bd6 100644
--- a/sysdeps/unix/grantpt.c
+++ b/sysdeps/unix/grantpt.c
@@ -258,3 +258,4 @@ grantpt (int fd)
 
   return retval;
 }
+libc_hidden_def (grantpt)
diff --git a/sysdeps/unix/sysv/linux/getpt.c b/sysdeps/unix/sysv/linux/getpt.c
index 784110abbf..52532f7190 100644
--- a/sysdeps/unix/sysv/linux/getpt.c
+++ b/sysdeps/unix/sysv/linux/getpt.c
@@ -19,6 +19,7 @@
 #include <fcntl.h>
 #include <unistd.h>
 #include <paths.h>
+#include <stdlib.h>
 
 /* Path to the master pseudo terminal cloning device.  */
 #define _PATH_DEVPTMX _PATH_DEV "ptmx"
@@ -37,4 +38,5 @@ __getpt (void)
 {
   return __posix_openpt (O_RDWR);
 }
+libc_hidden_def (__getpt)
 weak_alias (__getpt, getpt)
diff --git a/sysdeps/unix/sysv/linux/grantpt.c b/sysdeps/unix/sysv/linux/grantpt.c
index b4addfded9..57e988fe36 100644
--- a/sysdeps/unix/sysv/linux/grantpt.c
+++ b/sysdeps/unix/sysv/linux/grantpt.c
@@ -39,3 +39,4 @@ grantpt (int fd)
     __set_errno (EINVAL);
   return ret;
 }
+libc_hidden_def (grantpt)
diff --git a/sysdeps/unix/sysv/linux/ptsname.c b/sysdeps/unix/sysv/linux/ptsname.c
index b9701da514..9f78ef42d8 100644
--- a/sysdeps/unix/sysv/linux/ptsname.c
+++ b/sysdeps/unix/sysv/linux/ptsname.c
@@ -79,4 +79,5 @@ __ptsname_r (int fd, char *buf, size_t buflen)
   __set_errno (save_errno);
   return 0;
 }
+libc_hidden_def (__ptsname_r)
 weak_alias (__ptsname_r, ptsname_r)
diff --git a/sysdeps/unix/sysv/linux/unlockpt.c b/sysdeps/unix/sysv/linux/unlockpt.c
index 57d08d8e96..ae5148afe7 100644
--- a/sysdeps/unix/sysv/linux/unlockpt.c
+++ b/sysdeps/unix/sysv/linux/unlockpt.c
@@ -35,3 +35,4 @@ unlockpt (int fd)
     __set_errno (EINVAL);
   return ret;
 }
+libc_hidden_def (unlockpt)
-- 
2.31.1



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 2/3] login: Rework hidden prototypes for __setutent, __utmpname, __endutent
  2021-06-21 11:46 [PATCH 0/3] Move libutil into libc Florian Weimer
  2021-06-21 11:46 ` [PATCH 1/3] login: Hidden prototypes for _getpt, __ptsname_r, grantpt, unlockpt Florian Weimer
@ 2021-06-21 11:46 ` Florian Weimer
  2021-06-29 13:22   ` Adhemerval Zanella
  2021-06-21 11:47 ` [PATCH 3/3] login: Move libutil into libc Florian Weimer
  2 siblings, 1 reply; 7+ messages in thread
From: Florian Weimer @ 2021-06-21 11:46 UTC (permalink / raw)
  To: libc-alpha

Replace attribute_hidden with a regular combination of
libc_hidden_proto and libc_hidden_def.
---
 include/utmp.h     | 9 ++++++---
 login/getutent_r.c | 2 ++
 login/utmpname.c   | 1 +
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/include/utmp.h b/include/utmp.h
index 374184e9b2..e8162bd08d 100644
--- a/include/utmp.h
+++ b/include/utmp.h
@@ -6,11 +6,14 @@
 /* Now define the internal interfaces.  */
 extern void __updwtmp (const char *__wtmp_file, const struct utmp *__utmp);
 libc_hidden_proto (__updwtmp)
-extern int __utmpname (const char *__file) attribute_hidden;
+extern int __utmpname (const char *__file);
+libc_hidden_proto (__utmpname)
 extern struct utmp *__getutent (void);
 libc_hidden_proto (__getutent)
-extern void __setutent (void) attribute_hidden;
-extern void __endutent (void) attribute_hidden;
+extern void __setutent (void);
+libc_hidden_proto (__setutent)
+extern void __endutent (void);
+libc_hidden_proto (__endutent)
 extern struct utmp *__getutid (const struct utmp *__id);
 libc_hidden_proto (__getutid)
 extern struct utmp *__getutline (const struct utmp *__line);
diff --git a/login/getutent_r.c b/login/getutent_r.c
index 0af48acec8..58d3d5fd0c 100644
--- a/login/getutent_r.c
+++ b/login/getutent_r.c
@@ -36,6 +36,7 @@ __setutent (void)
 
   __libc_lock_unlock (__libc_utmp_lock);
 }
+libc_hidden_def (__setutent)
 weak_alias (__setutent, setutent)
 
 
@@ -82,4 +83,5 @@ __endutent (void)
 
   __libc_lock_unlock (__libc_utmp_lock);
 }
+libc_hidden_def (__endutent)
 weak_alias (__endutent, endutent)
diff --git a/login/utmpname.c b/login/utmpname.c
index c85c27fe68..a645445e8a 100644
--- a/login/utmpname.c
+++ b/login/utmpname.c
@@ -72,4 +72,5 @@ done:
   __libc_lock_unlock (__libc_utmp_lock);
   return result;
 }
+libc_hidden_def (__utmpname)
 weak_alias (__utmpname, utmpname)
-- 
2.31.1



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 3/3] login: Move libutil into libc
  2021-06-21 11:46 [PATCH 0/3] Move libutil into libc Florian Weimer
  2021-06-21 11:46 ` [PATCH 1/3] login: Hidden prototypes for _getpt, __ptsname_r, grantpt, unlockpt Florian Weimer
  2021-06-21 11:46 ` [PATCH 2/3] login: Rework hidden prototypes for __setutent, __utmpname, __endutent Florian Weimer
@ 2021-06-21 11:47 ` Florian Weimer
  2021-06-29 14:09   ` Adhemerval Zanella
  2 siblings, 1 reply; 7+ messages in thread
From: Florian Weimer @ 2021-06-21 11:47 UTC (permalink / raw)
  To: libc-alpha

The symbols forkpty, login, login_tty, logout, logwtmp, openpty
werem oved 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 terminology on modified lines.

For 390 (31-bit), this commit follows the existing style for the
compat symbol version creation.
---
 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
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..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;
   }
 }
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)
 }
 \f
 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..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);
 #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);
 	    }
 	}
 #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
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 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
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 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
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 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
-- 
2.31.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/3] login: Hidden prototypes for _getpt, __ptsname_r, grantpt, unlockpt
  2021-06-21 11:46 ` [PATCH 1/3] login: Hidden prototypes for _getpt, __ptsname_r, grantpt, unlockpt Florian Weimer
@ 2021-06-29 13:21   ` Adhemerval Zanella
  0 siblings, 0 replies; 7+ messages in thread
From: Adhemerval Zanella @ 2021-06-29 13:21 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer

LGTM, thanks.

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

On 21/06/2021 08:46, Florian Weimer via Libc-alpha wrote:
> ---
>  include/stdlib.h                   | 6 ++++++
>  login/getpt.c                      | 1 +
>  login/grantpt.c                    | 2 +-
>  login/ptsname.c                    | 1 +
>  sysdeps/mach/hurd/ptsname.c        | 1 +
>  sysdeps/unix/bsd/getpt.c           | 3 ++-
>  sysdeps/unix/bsd/unlockpt.c        | 1 +
>  sysdeps/unix/grantpt.c             | 1 +
>  sysdeps/unix/sysv/linux/getpt.c    | 2 ++
>  sysdeps/unix/sysv/linux/grantpt.c  | 1 +
>  sysdeps/unix/sysv/linux/ptsname.c  | 1 +
>  sysdeps/unix/sysv/linux/unlockpt.c | 1 +
>  12 files changed, 19 insertions(+), 2 deletions(-)
> 
> diff --git a/include/stdlib.h b/include/stdlib.h
> index e2453c1896..1f6e1508e4 100644
> --- a/include/stdlib.h
> +++ b/include/stdlib.h
> @@ -137,6 +137,12 @@ libc_hidden_proto (__libc_reallocarray)
>  
>  extern int __libc_system (const char *line);
>  
> +extern __typeof (getpt) __getpt;
> +extern __typeof (ptsname_r) __ptsname_r;
> +libc_hidden_proto (__getpt)
> +libc_hidden_proto (__ptsname_r)
> +libc_hidden_proto (grantpt)
> +libc_hidden_proto (unlockpt)
>  
>  extern double __strtod_internal (const char *__restrict __nptr,
>  				 char **__restrict __endptr, int __group)
> diff --git a/login/getpt.c b/login/getpt.c
> index 585bc3bffd..9b71765705 100644
> --- a/login/getpt.c
> +++ b/login/getpt.c
> @@ -27,6 +27,7 @@ __getpt (void)
>    __set_errno (ENOSYS);
>    return -1;
>  }
> +libc_hidden_def (__getpt)
>  weak_alias (__getpt, getpt)
>  
>  /* We cannot define posix_openpt in general for BSD systems.  */
> diff --git a/login/grantpt.c b/login/grantpt.c
> index 7dc5db3fb7..939096682a 100644
> --- a/login/grantpt.c
> +++ b/login/grantpt.c
> @@ -28,5 +28,5 @@ grantpt (int fd __attribute__ ((unused)))
>    __set_errno (ENOSYS);
>    return -1;
>  }
> -
> +libc_hidden_def (grantpt)
>  stub_warning (grantpt)
> diff --git a/login/ptsname.c b/login/ptsname.c
> index c42f27d07b..ae94fbddf4 100644
> --- a/login/ptsname.c
> +++ b/login/ptsname.c
> @@ -38,6 +38,7 @@ __ptsname_r (int fd __attribute__ ((unused)),
>    __set_errno (ENOSYS);
>    return ENOSYS;
>  }
> +libc_hidden_def (__ptsname_r)
>  weak_alias (__ptsname_r, ptsname_r)
>  
>  stub_warning(ptsname)
> diff --git a/sysdeps/mach/hurd/ptsname.c b/sysdeps/mach/hurd/ptsname.c
> index d5f21a766f..5405b8f981 100644
> --- a/sysdeps/mach/hurd/ptsname.c
> +++ b/sysdeps/mach/hurd/ptsname.c
> @@ -88,4 +88,5 @@ __ptsname_r (int fd, char *buf, size_t buflen)
>  {
>    return __ptsname_internal (fd, buf, buflen, NULL);
>  }
> +libc_hidden_def (__ptsname_r)
>  weak_alias (__ptsname_r, ptsname_r)
> diff --git a/sysdeps/unix/bsd/getpt.c b/sysdeps/unix/bsd/getpt.c
> index 1dde0cc4f1..2fa6632327 100644
> --- a/sysdeps/unix/bsd/getpt.c
> +++ b/sysdeps/unix/bsd/getpt.c
> @@ -20,7 +20,7 @@
>  #include <fcntl.h>
>  #include <string.h>
>  #include <unistd.h>
> -
> +#include <stdlib.h>
>  
>  /* Prefix for master pseudo terminal nodes.  */
>  #define _PATH_PTY "/dev/pty"
> @@ -79,6 +79,7 @@ __getpt (void)
>  {
>    return __bsd_openpt (O_RDWR);
>  }
> +libc_hidden_def (__getpt)
>  weak_alias (__getpt, getpt)
>  
>  int
> diff --git a/sysdeps/unix/bsd/unlockpt.c b/sysdeps/unix/bsd/unlockpt.c
> index 6cfdb93d36..181e615cc6 100644
> --- a/sysdeps/unix/bsd/unlockpt.c
> +++ b/sysdeps/unix/bsd/unlockpt.c
> @@ -39,3 +39,4 @@ unlockpt (int fd)
>      }
>    return __revoke (buf);
>  }
> +libc_hidden_def (unlockpt)
> diff --git a/sysdeps/unix/grantpt.c b/sysdeps/unix/grantpt.c
> index 46b6f56629..6269ee2bd6 100644
> --- a/sysdeps/unix/grantpt.c
> +++ b/sysdeps/unix/grantpt.c
> @@ -258,3 +258,4 @@ grantpt (int fd)
>  
>    return retval;
>  }
> +libc_hidden_def (grantpt)
> diff --git a/sysdeps/unix/sysv/linux/getpt.c b/sysdeps/unix/sysv/linux/getpt.c
> index 784110abbf..52532f7190 100644
> --- a/sysdeps/unix/sysv/linux/getpt.c
> +++ b/sysdeps/unix/sysv/linux/getpt.c
> @@ -19,6 +19,7 @@
>  #include <fcntl.h>
>  #include <unistd.h>
>  #include <paths.h>
> +#include <stdlib.h>
>  
>  /* Path to the master pseudo terminal cloning device.  */
>  #define _PATH_DEVPTMX _PATH_DEV "ptmx"
> @@ -37,4 +38,5 @@ __getpt (void)
>  {
>    return __posix_openpt (O_RDWR);
>  }
> +libc_hidden_def (__getpt)
>  weak_alias (__getpt, getpt)
> diff --git a/sysdeps/unix/sysv/linux/grantpt.c b/sysdeps/unix/sysv/linux/grantpt.c
> index b4addfded9..57e988fe36 100644
> --- a/sysdeps/unix/sysv/linux/grantpt.c
> +++ b/sysdeps/unix/sysv/linux/grantpt.c
> @@ -39,3 +39,4 @@ grantpt (int fd)
>      __set_errno (EINVAL);
>    return ret;
>  }
> +libc_hidden_def (grantpt)
> diff --git a/sysdeps/unix/sysv/linux/ptsname.c b/sysdeps/unix/sysv/linux/ptsname.c
> index b9701da514..9f78ef42d8 100644
> --- a/sysdeps/unix/sysv/linux/ptsname.c
> +++ b/sysdeps/unix/sysv/linux/ptsname.c
> @@ -79,4 +79,5 @@ __ptsname_r (int fd, char *buf, size_t buflen)
>    __set_errno (save_errno);
>    return 0;
>  }
> +libc_hidden_def (__ptsname_r)
>  weak_alias (__ptsname_r, ptsname_r)
> diff --git a/sysdeps/unix/sysv/linux/unlockpt.c b/sysdeps/unix/sysv/linux/unlockpt.c
> index 57d08d8e96..ae5148afe7 100644
> --- a/sysdeps/unix/sysv/linux/unlockpt.c
> +++ b/sysdeps/unix/sysv/linux/unlockpt.c
> @@ -35,3 +35,4 @@ unlockpt (int fd)
>      __set_errno (EINVAL);
>    return ret;
>  }
> +libc_hidden_def (unlockpt)
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/3] login: Rework hidden prototypes for __setutent, __utmpname, __endutent
  2021-06-21 11:46 ` [PATCH 2/3] login: Rework hidden prototypes for __setutent, __utmpname, __endutent Florian Weimer
@ 2021-06-29 13:22   ` Adhemerval Zanella
  0 siblings, 0 replies; 7+ messages in thread
From: Adhemerval Zanella @ 2021-06-29 13:22 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer

LGTM, thanks.

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

On 21/06/2021 08:46, Florian Weimer via Libc-alpha wrote:
> Replace attribute_hidden with a regular combination of
> libc_hidden_proto and libc_hidden_def.
> ---
>  include/utmp.h     | 9 ++++++---
>  login/getutent_r.c | 2 ++
>  login/utmpname.c   | 1 +
>  3 files changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/include/utmp.h b/include/utmp.h
> index 374184e9b2..e8162bd08d 100644
> --- a/include/utmp.h
> +++ b/include/utmp.h
> @@ -6,11 +6,14 @@
>  /* Now define the internal interfaces.  */
>  extern void __updwtmp (const char *__wtmp_file, const struct utmp *__utmp);
>  libc_hidden_proto (__updwtmp)
> -extern int __utmpname (const char *__file) attribute_hidden;
> +extern int __utmpname (const char *__file);
> +libc_hidden_proto (__utmpname)
>  extern struct utmp *__getutent (void);
>  libc_hidden_proto (__getutent)
> -extern void __setutent (void) attribute_hidden;
> -extern void __endutent (void) attribute_hidden;
> +extern void __setutent (void);
> +libc_hidden_proto (__setutent)
> +extern void __endutent (void);
> +libc_hidden_proto (__endutent)
>  extern struct utmp *__getutid (const struct utmp *__id);
>  libc_hidden_proto (__getutid)
>  extern struct utmp *__getutline (const struct utmp *__line);
> diff --git a/login/getutent_r.c b/login/getutent_r.c
> index 0af48acec8..58d3d5fd0c 100644
> --- a/login/getutent_r.c
> +++ b/login/getutent_r.c
> @@ -36,6 +36,7 @@ __setutent (void)
>  
>    __libc_lock_unlock (__libc_utmp_lock);
>  }
> +libc_hidden_def (__setutent)
>  weak_alias (__setutent, setutent)
>  
>  
> @@ -82,4 +83,5 @@ __endutent (void)
>  
>    __libc_lock_unlock (__libc_utmp_lock);
>  }
> +libc_hidden_def (__endutent)
>  weak_alias (__endutent, endutent)
> diff --git a/login/utmpname.c b/login/utmpname.c
> index c85c27fe68..a645445e8a 100644
> --- a/login/utmpname.c
> +++ b/login/utmpname.c
> @@ -72,4 +72,5 @@ done:
>    __libc_lock_unlock (__libc_utmp_lock);
>    return result;
>  }
> +libc_hidden_def (__utmpname)
>  weak_alias (__utmpname, utmpname)
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 3/3] login: Move libutil into libc
  2021-06-21 11:47 ` [PATCH 3/3] login: Move libutil into libc Florian Weimer
@ 2021-06-29 14:09   ` Adhemerval Zanella
  0 siblings, 0 replies; 7+ messages in thread
From: Adhemerval Zanella @ 2021-06-29 14:09 UTC (permalink / raw)
  To: libc-alpha, Florian Weimer



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)
>  }
>  \f
>  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.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-06-29 14:09 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-21 11:46 [PATCH 0/3] Move libutil into libc Florian Weimer
2021-06-21 11:46 ` [PATCH 1/3] login: Hidden prototypes for _getpt, __ptsname_r, grantpt, unlockpt Florian Weimer
2021-06-29 13:21   ` Adhemerval Zanella
2021-06-21 11:46 ` [PATCH 2/3] login: Rework hidden prototypes for __setutent, __utmpname, __endutent Florian Weimer
2021-06-29 13:22   ` Adhemerval Zanella
2021-06-21 11:47 ` [PATCH 3/3] login: Move libutil into libc Florian Weimer
2021-06-29 14:09   ` Adhemerval Zanella

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).