[10/16] Remove mknod wrapper functions, move them to symbols

Message ID 20200723194641.1949404-11-adhemerval.zanella@linaro.org
State Committed
Headers
Series Add y2038 support for stat functions |

Commit Message

Adhemerval Zanella July 23, 2020, 7:46 p.m. UTC
  This patch removes the mknod and mknodat static wrapper and add the
symbols on the libc with the expected names.

Both the prototypes of the internal symbol linked by the static
wrappers and the inline redirectors are also removed from the installed
sys/stat.h header file.  The wrapper implementation license is also
change from LGPL to GPL.

Internally the _STAT_VER* definitions are moved to the arch-specific
xstatver.h file.

Checked with a build for all affected Linux ABIs and Hurd.  I checked
also on x86_64-linux-gnu and i686-linux-gnu.
---
 include/sys/stat.h                            | 13 ++++---
 io/Makefile                                   |  5 ---
 io/Versions                                   |  1 +
 io/mknod.c                                    | 35 +++----------------
 io/mknodat.c                                  | 35 +++----------------
 io/sys/stat.h                                 | 30 ----------------
 sysdeps/generic/xstatver.h                    |  1 +
 sysdeps/mach/hurd/i386/libc.abilist           |  2 ++
 sysdeps/posix/mkfifo.c                        |  3 +-
 sysdeps/posix/mkfifoat.c                      |  3 +-
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  2 ++
 sysdeps/unix/sysv/linux/alpha/bits/stat.h     |  4 ---
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  2 ++
 sysdeps/unix/sysv/linux/alpha/xstatver.h      |  5 +++
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  2 ++
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  2 ++
 sysdeps/unix/sysv/linux/bits/stat.h           |  7 ----
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  2 ++
 sysdeps/unix/sysv/linux/generic/bits/stat.h   |  3 --
 sysdeps/unix/sysv/linux/generic/xstatver.h    |  5 +++
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  2 ++
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  2 ++
 sysdeps/unix/sysv/linux/ia64/bits/stat.h      |  3 --
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  2 ++
 sysdeps/unix/sysv/linux/ia64/xstatver.h       |  5 +++
 sysdeps/unix/sysv/linux/m68k/bits/stat.h      |  6 ----
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  2 ++
 sysdeps/unix/sysv/linux/m68k/xstatver.h       |  6 ++++
 .../sysv/linux/microblaze/be/libc.abilist     |  2 ++
 .../unix/sysv/linux/microblaze/bits/stat.h    |  5 ---
 sysdeps/unix/sysv/linux/microblaze/xstatver.h |  6 ++++
 sysdeps/unix/sysv/linux/mips/bits/stat.h      |  5 ---
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  2 ++
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  2 ++
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  2 ++
 sysdeps/unix/sysv/linux/mips/xstatver.h       |  6 ++++
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  2 ++
 sysdeps/unix/sysv/linux/powerpc/bits/stat.h   |  5 ---
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  2 ++
 .../linux/powerpc/powerpc64/be/libc.abilist   |  2 ++
 .../linux/powerpc/powerpc64/le/libc.abilist   |  2 ++
 sysdeps/unix/sysv/linux/powerpc/xstatver.h    |  6 ++++
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  2 ++
 sysdeps/unix/sysv/linux/s390/bits/stat.h      | 10 ------
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  2 ++
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  2 ++
 sysdeps/unix/sysv/linux/s390/xstatver.h       |  6 +++-
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  2 ++
 sysdeps/unix/sysv/linux/sparc/bits/stat.h     |  6 ----
 .../sysv/linux/sparc/sparc32/libc.abilist     |  2 ++
 .../sysv/linux/sparc/sparc64/libc.abilist     |  2 ++
 sysdeps/unix/sysv/linux/sparc/xstatver.h      |  6 ++++
 sysdeps/unix/sysv/linux/x86/bits/stat.h       | 11 ------
 sysdeps/unix/sysv/linux/x86/xstatver.h        |  5 ++-
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  2 ++
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  2 ++
 sysdeps/unix/sysv/linux/xstatver.h            |  6 ++++
 57 files changed, 133 insertions(+), 172 deletions(-)
  

Comments

Joseph Myers July 23, 2020, 8:53 p.m. UTC | #1
On Thu, 23 Jul 2020, Adhemerval Zanella via Libc-alpha wrote:

> Both the prototypes of the internal symbol linked by the static
> wrappers and the inline redirectors are also removed from the installed
> sys/stat.h header file.  The wrapper implementation license is also
> change from LGPL to GPL.

That's not an accurate description.  The license remains LGPL with the 
exception for objects that get statically linked in when dynamically 
linking with libc (*_nonshared.a and crt*.o) removed.  Likewise for other 
patches with a similar description.
  
Adhemerval Zanella July 23, 2020, 8:58 p.m. UTC | #2
On 23/07/2020 17:53, Joseph Myers wrote:
> On Thu, 23 Jul 2020, Adhemerval Zanella via Libc-alpha wrote:
> 
>> Both the prototypes of the internal symbol linked by the static
>> wrappers and the inline redirectors are also removed from the installed
>> sys/stat.h header file.  The wrapper implementation license is also
>> change from LGPL to GPL.
> 
> That's not an accurate description.  The license remains LGPL with the 
> exception for objects that get statically linked in when dynamically 
> linking with libc (*_nonshared.a and crt*.o) removed.  Likewise for other 
> patches with a similar description.
> 

So should we revert the License change or just rewrite the description?
  
Joseph Myers July 23, 2020, 9:01 p.m. UTC | #3
On Thu, 23 Jul 2020, Adhemerval Zanella via Libc-alpha wrote:

> On 23/07/2020 17:53, Joseph Myers wrote:
> > On Thu, 23 Jul 2020, Adhemerval Zanella via Libc-alpha wrote:
> > 
> >> Both the prototypes of the internal symbol linked by the static
> >> wrappers and the inline redirectors are also removed from the installed
> >> sys/stat.h header file.  The wrapper implementation license is also
> >> change from LGPL to GPL.
> > 
> > That's not an accurate description.  The license remains LGPL with the 
> > exception for objects that get statically linked in when dynamically 
> > linking with libc (*_nonshared.a and crt*.o) removed.  Likewise for other 
> > patches with a similar description.
> > 
> 
> So should we revert the License change or just rewrite the description?

Rewrite the description.  Once an object is no longer in *_nonshared.a (or 
crt*.o, or sources shared with libgcc in the case of soft-fp), there is no 
need for the LGPL exception and the file should be plain LGPL with no 
exception.
  
Lukasz Majewski July 24, 2020, 9:25 a.m. UTC | #4
On Thu, 23 Jul 2020 16:46:35 -0300
Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote:

> This patch removes the mknod and mknodat static wrapper and add the
> symbols on the libc with the expected names.
> 
> Both the prototypes of the internal symbol linked by the static
> wrappers and the inline redirectors are also removed from the
> installed sys/stat.h header file.  The wrapper implementation license
> is also change from LGPL to GPL.
> 
> Internally the _STAT_VER* definitions are moved to the arch-specific
> xstatver.h file.
> 
> Checked with a build for all affected Linux ABIs and Hurd.  I checked
> also on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Lukasz Majewski <lukma@denx.de>

> ---
>  include/sys/stat.h                            | 13 ++++---
>  io/Makefile                                   |  5 ---
>  io/Versions                                   |  1 +
>  io/mknod.c                                    | 35
> +++---------------- io/mknodat.c                                  |
> 35 +++---------------- io/sys/stat.h
> | 30 ---------------- sysdeps/generic/xstatver.h                    |
>  1 + sysdeps/mach/hurd/i386/libc.abilist           |  2 ++
>  sysdeps/posix/mkfifo.c                        |  3 +-
>  sysdeps/posix/mkfifoat.c                      |  3 +-
>  sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  2 ++
>  sysdeps/unix/sysv/linux/alpha/bits/stat.h     |  4 ---
>  sysdeps/unix/sysv/linux/alpha/libc.abilist    |  2 ++
>  sysdeps/unix/sysv/linux/alpha/xstatver.h      |  5 +++
>  sysdeps/unix/sysv/linux/arc/libc.abilist      |  2 ++
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  2 ++
>  sysdeps/unix/sysv/linux/bits/stat.h           |  7 ----
>  sysdeps/unix/sysv/linux/csky/libc.abilist     |  2 ++
>  sysdeps/unix/sysv/linux/generic/bits/stat.h   |  3 --
>  sysdeps/unix/sysv/linux/generic/xstatver.h    |  5 +++
>  sysdeps/unix/sysv/linux/hppa/libc.abilist     |  2 ++
>  sysdeps/unix/sysv/linux/i386/libc.abilist     |  2 ++
>  sysdeps/unix/sysv/linux/ia64/bits/stat.h      |  3 --
>  sysdeps/unix/sysv/linux/ia64/libc.abilist     |  2 ++
>  sysdeps/unix/sysv/linux/ia64/xstatver.h       |  5 +++
>  sysdeps/unix/sysv/linux/m68k/bits/stat.h      |  6 ----
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  2 ++
>  sysdeps/unix/sysv/linux/m68k/xstatver.h       |  6 ++++
>  .../sysv/linux/microblaze/be/libc.abilist     |  2 ++
>  .../unix/sysv/linux/microblaze/bits/stat.h    |  5 ---
>  sysdeps/unix/sysv/linux/microblaze/xstatver.h |  6 ++++
>  sysdeps/unix/sysv/linux/mips/bits/stat.h      |  5 ---
>  .../sysv/linux/mips/mips32/fpu/libc.abilist   |  2 ++
>  .../sysv/linux/mips/mips64/n32/libc.abilist   |  2 ++
>  .../sysv/linux/mips/mips64/n64/libc.abilist   |  2 ++
>  sysdeps/unix/sysv/linux/mips/xstatver.h       |  6 ++++
>  sysdeps/unix/sysv/linux/nios2/libc.abilist    |  2 ++
>  sysdeps/unix/sysv/linux/powerpc/bits/stat.h   |  5 ---
>  .../linux/powerpc/powerpc32/fpu/libc.abilist  |  2 ++
>  .../linux/powerpc/powerpc64/be/libc.abilist   |  2 ++
>  .../linux/powerpc/powerpc64/le/libc.abilist   |  2 ++
>  sysdeps/unix/sysv/linux/powerpc/xstatver.h    |  6 ++++
>  .../unix/sysv/linux/riscv/rv64/libc.abilist   |  2 ++
>  sysdeps/unix/sysv/linux/s390/bits/stat.h      | 10 ------
>  .../unix/sysv/linux/s390/s390-32/libc.abilist |  2 ++
>  .../unix/sysv/linux/s390/s390-64/libc.abilist |  2 ++
>  sysdeps/unix/sysv/linux/s390/xstatver.h       |  6 +++-
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  2 ++
>  sysdeps/unix/sysv/linux/sparc/bits/stat.h     |  6 ----
>  .../sysv/linux/sparc/sparc32/libc.abilist     |  2 ++
>  .../sysv/linux/sparc/sparc64/libc.abilist     |  2 ++
>  sysdeps/unix/sysv/linux/sparc/xstatver.h      |  6 ++++
>  sysdeps/unix/sysv/linux/x86/bits/stat.h       | 11 ------
>  sysdeps/unix/sysv/linux/x86/xstatver.h        |  5 ++-
>  .../unix/sysv/linux/x86_64/64/libc.abilist    |  2 ++
>  .../unix/sysv/linux/x86_64/x32/libc.abilist   |  2 ++
>  sysdeps/unix/sysv/linux/xstatver.h            |  6 ++++
>  57 files changed, 133 insertions(+), 172 deletions(-)
> 
> diff --git a/include/sys/stat.h b/include/sys/stat.h
> index 0be918a7a7..04b825df4a 100644
> --- a/include/sys/stat.h
> +++ b/include/sys/stat.h
> @@ -30,14 +30,17 @@ extern __mode_t __umask (__mode_t __mask);
>  extern int __mkdir (const char *__path, __mode_t __mode);
>  libc_hidden_proto (__mkdir)
>  
> +extern int __mknodat (int fd, const char *path, mode_t mode, dev_t
> dev); +libc_hidden_proto (__mknodat);
>  extern int __mknod (const char *__path,
>  		    __mode_t __mode, __dev_t __dev);
> +libc_hidden_proto (__mknod);
> +
> +extern int __xmknod (int __ver, const char *__path, __mode_t __mode,
> +		     __dev_t *__dev);
>  libc_hidden_proto (__xmknod)
> -extern __inline__ int __mknod (const char *__path, __mode_t __mode,
> -			       __dev_t __dev)
> -{
> -  return __xmknod (_MKNOD_VER, __path, __mode, &__dev);
> -}
> +extern int __xmknodat (int __ver, int __fd, const char *__path,
> +		       __mode_t __mode, __dev_t *__dev);
>  libc_hidden_proto (__xmknodat)
>  
>  int __fxstat (int __ver, int __fildes, struct stat *__stat_buf);
> diff --git a/io/Makefile b/io/Makefile
> index cee356b666..2ed86c530e 100644
> --- a/io/Makefile
> +++ b/io/Makefile
> @@ -57,11 +57,6 @@ routines :=
> 			\ sendfile sendfile64 copy_file_range
> 			\ utimensat futimens file_change_detection
>  
> -# These routines will be omitted from the libc shared object.
> -# Instead the static object files will be included in a special
> archive -# linked against when the shared library will be used.
> -static-only-routines = mknod mknodat
> -
>  others		:= pwd
>  test-srcs	:= ftwtest
>  tests		:= test-utime test-stat test-stat2 test-lfs
> tst-getcwd \ diff --git a/io/Versions b/io/Versions
> index f6db0e84ad..49c4d2d40a 100644
> --- a/io/Versions
> +++ b/io/Versions
> @@ -134,6 +134,7 @@ libc {
>    }
>    GLIBC_2.33 {
>      stat; stat64; fstat; fstat64; lstat; lstat64; fstatat; fstatat64;
> +    mknod; mknodat;
>    }
>    GLIBC_PRIVATE {
>      __libc_fcntl64;
> diff --git a/io/mknod.c b/io/mknod.c
> index ac96829230..7f88633198 100644
> --- a/io/mknod.c
> +++ b/io/mknod.c
> @@ -1,4 +1,5 @@
> -/* Copyright (C) 1995-2020 Free Software Foundation, Inc.
> +/* Create a special or ordinary file.
> +   Copyright (C) 1995-2020 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
>     The GNU C Library is free software; you can redistribute it and/or
> @@ -6,23 +7,6 @@
>     License as published by the Free Software Foundation; either
>     version 2.1 of the License, or (at your option) any later version.
>  
> -   In addition to the permissions in the GNU Lesser General Public
> -   License, the Free Software Foundation gives you unlimited
> -   permission to link the compiled version of this file with other
> -   programs, and to distribute those programs without any restriction
> -   coming from the use of this file. (The GNU Lesser General Public
> -   License restrictions do apply in other respects; for example, they
> -   cover modification of the file, and distribution when not linked
> -   into another program.)
> -
> -   Note that people who make modified versions of this file are not
> -   obligated to grant this special exception for their modified
> -   versions; it is their choice whether to do so. The GNU Lesser
> -   General Public License gives permission to release a modified
> -   version without this exception; this exception also makes it
> -   possible to release a modified version which carries forward this
> -   exception.
> -
>     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
> @@ -32,24 +16,13 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -
>  #include <sys/types.h>
>  #include <sys/stat.h>
>  
> -/* This definition is only used if inlining fails for this function;
> see
> -   the last page of <sys/stat.h>.  The real work is done by the `x'
> -   function which is passed a version number argument.  We arrange
> in the
> -   makefile that when not inlined this function is always statically
> -   linked; that way a dynamically-linked executable always encodes
> the
> -   version number corresponding to the data structures it uses, so
> the `x'
> -   functions in the shared library can adapt without needing to
> recompile
> -   all callers.  */
> -
>  int
> -attribute_hidden
>  __mknod (const char *path, mode_t mode, dev_t dev)
>  {
>    return __xmknod (_MKNOD_VER, path, mode, &dev);
>  }
> -
> -weak_hidden_alias (__mknod, mknod)
> +libc_hidden_def (__mknod)
> +weak_alias (__mknod, mknod)
> diff --git a/io/mknodat.c b/io/mknodat.c
> index 65c9f1aa9c..6ec1c1648c 100644
> --- a/io/mknodat.c
> +++ b/io/mknodat.c
> @@ -1,4 +1,5 @@
> -/* Copyright (C) 1995-2020 Free Software Foundation, Inc.
> +/* Create a special or ordinary file.
> +   Copyright (C) 1995-2020 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
>     The GNU C Library is free software; you can redistribute it and/or
> @@ -6,23 +7,6 @@
>     License as published by the Free Software Foundation; either
>     version 2.1 of the License, or (at your option) any later version.
>  
> -   In addition to the permissions in the GNU Lesser General Public
> -   License, the Free Software Foundation gives you unlimited
> -   permission to link the compiled version of this file with other
> -   programs, and to distribute those programs without any restriction
> -   coming from the use of this file. (The GNU Lesser General Public
> -   License restrictions do apply in other respects; for example, they
> -   cover modification of the file, and distribution when not linked
> -   into another program.)
> -
> -   Note that people who make modified versions of this file are not
> -   obligated to grant this special exception for their modified
> -   versions; it is their choice whether to do so. The GNU Lesser
> -   General Public License gives permission to release a modified
> -   version without this exception; this exception also makes it
> -   possible to release a modified version which carries forward this
> -   exception.
> -
>     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
> @@ -32,22 +16,13 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -
>  #include <sys/types.h>
>  #include <sys/stat.h>
>  
> -/* This definition is only used if inlining fails for this function;
> see
> -   the last page of <sys/stat.h>.  The real work is done by the `x'
> -   function which is passed a version number argument.  We arrange
> in the
> -   makefile that when not inlined this function is always statically
> -   linked; that way a dynamically-linked executable always encodes
> the
> -   version number corresponding to the data structures it uses, so
> the `x'
> -   functions in the shared library can adapt without needing to
> recompile
> -   all callers.  */
> -
>  int
> -attribute_hidden
> -mknodat (int fd, const char *path, mode_t mode, dev_t dev)
> +__mknodat (int fd, const char *path, mode_t mode, dev_t dev)
>  {
>    return __xmknodat (_MKNOD_VER, fd, path, mode, &dev);
>  }
> +libc_hidden_def (__mknodat)
> +weak_alias (__mknodat, mknodat)
> diff --git a/io/sys/stat.h b/io/sys/stat.h
> index 83cf253c72..58c3770622 100644
> --- a/io/sys/stat.h
> +++ b/io/sys/stat.h
> @@ -367,41 +367,11 @@ extern int utimensat (int __fd, const char
> *__path, /* Set file access and modification times of the file
> associated with FD.  */ extern int futimens (int __fd, const struct
> timespec __times[2]) __THROW; #endif
> -
> -#ifndef _MKNOD_VER
> -# define _MKNOD_VER	0
> -#endif
> -
> -extern int __xmknod (int __ver, const char *__path, __mode_t __mode,
> -		     __dev_t *__dev) __THROW __nonnull ((2, 4));
> -
> -extern int __xmknodat (int __ver, int __fd, const char *__path,
> -		       __mode_t __mode, __dev_t *__dev)
> -     __THROW __nonnull ((3, 5));
>  
>  #ifdef __USE_GNU
>  # include <bits/statx.h>
>  #endif
>  
> -#ifdef __USE_EXTERN_INLINES
> -# ifdef __USE_MISC
> -__extern_inline int
> -__NTH (mknod (const char *__path, __mode_t __mode, __dev_t __dev))
> -{
> -  return __xmknod (_MKNOD_VER, __path, __mode, &__dev);
> -}
> -# endif
> -
> -# ifdef __USE_ATFILE
> -__extern_inline int
> -__NTH (mknodat (int __fd, const char *__path, __mode_t __mode,
> -		__dev_t __dev))
> -{
> -  return __xmknodat (_MKNOD_VER, __fd, __path, __mode, &__dev);
> -}
> -# endif
> -#endif
> -
>  __END_DECLS
>  
>  
> diff --git a/sysdeps/generic/xstatver.h b/sysdeps/generic/xstatver.h
> index d727c98a16..281013b2f1 100644
> --- a/sysdeps/generic/xstatver.h
> +++ b/sysdeps/generic/xstatver.h
> @@ -1,3 +1,4 @@
>  /* Versions of the 'struct stat' data structure used in
> compatibility xstat functions.  */
>  #define _STAT_VER 0
> +#define _MKNOD_VER 0
> diff --git a/sysdeps/mach/hurd/i386/libc.abilist
> b/sysdeps/mach/hurd/i386/libc.abilist index 74a4ed5c1d..b4e39285d0
> 100644 --- a/sysdeps/mach/hurd/i386/libc.abilist
> +++ b/sysdeps/mach/hurd/i386/libc.abilist
> @@ -2198,6 +2198,8 @@ GLIBC_2.33 fstatat F
>  GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 __confstr_chk F
> diff --git a/sysdeps/posix/mkfifo.c b/sysdeps/posix/mkfifo.c
> index 61f62e2e96..0b89f6c291 100644
> --- a/sysdeps/posix/mkfifo.c
> +++ b/sysdeps/posix/mkfifo.c
> @@ -24,6 +24,5 @@
>  int
>  mkfifo (const char *path, mode_t mode)
>  {
> -  dev_t dev = 0;
> -  return __xmknod (_MKNOD_VER, path, mode | S_IFIFO, &dev);
> +  return __mknod (path, mode | S_IFIFO, 0);
>  }
> diff --git a/sysdeps/posix/mkfifoat.c b/sysdeps/posix/mkfifoat.c
> index 5287fe8782..d1e0977ba1 100644
> --- a/sysdeps/posix/mkfifoat.c
> +++ b/sysdeps/posix/mkfifoat.c
> @@ -23,6 +23,5 @@
>  int
>  mkfifoat (int fd, const char *file, mode_t mode)
>  {
> -  dev_t dev = 0;
> -  return __xmknodat (_MKNOD_VER, fd, file, mode | S_IFIFO, &dev);
> +  return __mknodat (fd, file, mode | S_IFIFO, 0);
>  }
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> b/sysdeps/unix/sysv/linux/aarch64/libc.abilist index
> 03e4ae9296..54b707b9cc 100644 ---
> a/sysdeps/unix/sysv/linux/aarch64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/aarch64/libc.abilist @@ -2166,5 +2166,7 @@
> GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/alpha/bits/stat.h
> b/sysdeps/unix/sysv/linux/alpha/bits/stat.h index
> 1fc27936b9..d20fb5a4b0 100644 ---
> a/sysdeps/unix/sysv/linux/alpha/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/alpha/bits/stat.h @@ -22,10 +22,6 @@
>  #ifndef _BITS_STAT_H
>  #define _BITS_STAT_H	1
>  
> -/* Versions of the `xmknod' interface.  */
> -#define _MKNOD_VER_LINUX	0
> -
> -
>  /* Nanosecond resolution timestamps are stored in a format
> equivalent to 'struct timespec'.  This is the type used whenever
> possible but the Unix namespace rules do not allow the identifier
> 'timespec' to appear diff --git
> a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> b/sysdeps/unix/sysv/linux/alpha/libc.abilist index
> 5b752ef4a8..9b429fd28f 100644 ---
> a/sysdeps/unix/sysv/linux/alpha/libc.abilist +++
> b/sysdeps/unix/sysv/linux/alpha/libc.abilist @@ -2248,6 +2248,8 @@
> GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 _IO_fprintf F
> diff --git a/sysdeps/unix/sysv/linux/alpha/xstatver.h
> b/sysdeps/unix/sysv/linux/alpha/xstatver.h index
> bbb9469617..1cb5d26bb1 100644 ---
> a/sysdeps/unix/sysv/linux/alpha/xstatver.h +++
> b/sysdeps/unix/sysv/linux/alpha/xstatver.h @@ -7,3 +7,8 @@
>  #define _STAT_VER_GLIBC2_3_4	3
>  #define _STAT_VER_LINUX		3
>  #define _STAT_VER		_STAT_VER_LINUX
> +
> +/* Versions of the 'xmknod' interface used in compatibility xmknod
> +   functions.  */
> +#define _MKNOD_VER_LINUX	0
> +#define _MKNOD_VER		_MKNOD_VER_LINUX
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist
> b/sysdeps/unix/sysv/linux/arc/libc.abilist index
> 925b532383..7ed5340364 100644 ---
> a/sysdeps/unix/sysv/linux/arc/libc.abilist +++
> b/sysdeps/unix/sysv/linux/arc/libc.abilist @@ -1926,5 +1926,7 @@
> GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> b/sysdeps/unix/sysv/linux/arm/le/libc.abilist index
> a4c1a7c03c..3ec1cbdfbc 100644 ---
> a/sysdeps/unix/sysv/linux/arm/le/libc.abilist +++
> b/sysdeps/unix/sysv/linux/arm/le/libc.abilist @@ -147,6 +147,8 @@
> GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 _Exit F
> diff --git a/sysdeps/unix/sysv/linux/bits/stat.h
> b/sysdeps/unix/sysv/linux/bits/stat.h index b542623208..0669451f69
> 100644 --- a/sysdeps/unix/sysv/linux/bits/stat.h
> +++ b/sysdeps/unix/sysv/linux/bits/stat.h
> @@ -22,13 +22,6 @@
>  #ifndef _BITS_STAT_H
>  #define _BITS_STAT_H	1
>  
> -/* Versions of the `struct stat' data structure.  */
> -/* Versions of the `xmknod' interface.  */
> -#define _MKNOD_VER_LINUX	1
> -#define _MKNOD_VER_SVR4		2
> -#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits
> defined below.  */ -
> -
>  struct stat
>    {
>      __dev_t st_dev;			/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist
> b/sysdeps/unix/sysv/linux/csky/libc.abilist index
> 799873e189..301fd728d7 100644 ---
> a/sysdeps/unix/sysv/linux/csky/libc.abilist +++
> b/sysdeps/unix/sysv/linux/csky/libc.abilist @@ -2110,5 +2110,7 @@
> GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/generic/bits/stat.h
> b/sysdeps/unix/sysv/linux/generic/bits/stat.h index
> 35e14a47c6..1b586d72fa 100644 ---
> a/sysdeps/unix/sysv/linux/generic/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/generic/bits/stat.h @@ -26,9 +26,6 @@
>  #include <bits/endian.h>
>  #include <bits/wordsize.h>
>  
> -/* Versions of the `xmknod' interface.  */
> -#define _MKNOD_VER_LINUX	0
> -
>  #if defined __USE_FILE_OFFSET64
>  # define __field64(type, type64, name) type64 name
>  #elif __WORDSIZE == 64 || defined __INO_T_MATCHES_INO64_T
> diff --git a/sysdeps/unix/sysv/linux/generic/xstatver.h
> b/sysdeps/unix/sysv/linux/generic/xstatver.h index
> 8675db494c..d8fd35beb6 100644 ---
> a/sysdeps/unix/sysv/linux/generic/xstatver.h +++
> b/sysdeps/unix/sysv/linux/generic/xstatver.h @@ -3,3 +3,8 @@
>  #define _STAT_VER_KERNEL	0
>  #define _STAT_VER_LINUX		0
>  #define _STAT_VER		_STAT_VER_KERNEL
> +
> +/* Versions of the 'xmknod' interface used in compatibility xmknod
> +   functions.  */
> +#define _MKNOD_VER_LINUX	0
> +#define _MKNOD_VER		_MKNOD_VER_LINUX
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> b/sysdeps/unix/sysv/linux/hppa/libc.abilist index
> 95c7bf4f06..84834052e1 100644 ---
> a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++
> b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -2069,6 +2069,8 @@
> GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 __confstr_chk F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist
> b/sysdeps/unix/sysv/linux/i386/libc.abilist index
> e7cf5cdb98..b82debaba4 100644 ---
> a/sysdeps/unix/sysv/linux/i386/libc.abilist +++
> b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -2235,6 +2235,8 @@
> GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 __confstr_chk F
> diff --git a/sysdeps/unix/sysv/linux/ia64/bits/stat.h
> b/sysdeps/unix/sysv/linux/ia64/bits/stat.h index
> 8ec2e4c81f..6937f3227a 100644 ---
> a/sysdeps/unix/sysv/linux/ia64/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/ia64/bits/stat.h @@ -22,9 +22,6 @@
>  #ifndef _BITS_STAT_H
>  #define _BITS_STAT_H	1
>  
> -/* Versions of the `xmknod' interface.  */
> -#define _MKNOD_VER_LINUX	0
> -
>  struct stat
>    {
>      __dev_t st_dev;		/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> b/sysdeps/unix/sysv/linux/ia64/libc.abilist index
> beeb905efd..475b7af1a5 100644 ---
> a/sysdeps/unix/sysv/linux/ia64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/ia64/libc.abilist @@ -2101,6 +2101,8 @@
> GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 __confstr_chk F
> diff --git a/sysdeps/unix/sysv/linux/ia64/xstatver.h
> b/sysdeps/unix/sysv/linux/ia64/xstatver.h index
> 4f02f697ad..f24ab4a9ee 100644 ---
> a/sysdeps/unix/sysv/linux/ia64/xstatver.h +++
> b/sysdeps/unix/sysv/linux/ia64/xstatver.h @@ -3,3 +3,8 @@
>  #define _STAT_VER_KERNEL	0
>  #define _STAT_VER_LINUX		1
>  #define _STAT_VER		_STAT_VER_LINUX
> +
> +/* Versions of the 'xmknod' interface used in compatibility xmknod
> +   functions.  */
> +#define _MKNOD_VER_LINUX	0
> +#define _MKNOD_VER		_MKNOD_VER_LINUX
> diff --git a/sysdeps/unix/sysv/linux/m68k/bits/stat.h
> b/sysdeps/unix/sysv/linux/m68k/bits/stat.h index
> bf41776e6c..c6f761fcc0 100644 ---
> a/sysdeps/unix/sysv/linux/m68k/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/m68k/bits/stat.h @@ -22,12 +22,6 @@
>  #ifndef _BITS_STAT_H
>  #define _BITS_STAT_H	1
>  
> -/* Versions of the `xmknod' interface.  */
> -#define _MKNOD_VER_LINUX	1
> -#define _MKNOD_VER_SVR4		2
> -#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits
> defined below.  */ -
> -
>  struct stat
>    {
>      __dev_t st_dev;			/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist index
> ed34e1fc82..29127e1341 100644 ---
> a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++
> b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -2181,6 +2181,8
> @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 __confstr_chk F
> diff --git a/sysdeps/unix/sysv/linux/m68k/xstatver.h
> b/sysdeps/unix/sysv/linux/m68k/xstatver.h index
> 59dba71dd1..8e1801b603 100644 ---
> a/sysdeps/unix/sysv/linux/m68k/xstatver.h +++
> b/sysdeps/unix/sysv/linux/m68k/xstatver.h @@ -5,3 +5,9 @@
>  #define _STAT_VER_SVR4		2
>  #define _STAT_VER_LINUX		3
>  #define _STAT_VER		_STAT_VER_LINUX
> +
> +/* Versions of the 'xmknod' interface used in compatibility xmknod
> +   functions.  */
> +#define _MKNOD_VER_LINUX	1
> +#define _MKNOD_VER_SVR4		2
> +#define _MKNOD_VER		_MKNOD_VER_LINUX
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist index
> e00f5115b2..e5b4cecacd 100644 ---
> a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist +++
> b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist @@ -2161,5
> +2161,7 @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
> b/sysdeps/unix/sysv/linux/microblaze/bits/stat.h index
> 51316a8c1b..b3068e5c98 100644 ---
> a/sysdeps/unix/sysv/linux/microblaze/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/microblaze/bits/stat.h @@ -23,11 +23,6 @@
>  #ifndef _BITS_STAT_H
>  #define _BITS_STAT_H	1
>  
> -/* Versions of the `xmknod' interface.  */
> -#define _MKNOD_VER_LINUX       1
> -#define _MKNOD_VER_SVR4        2
> -#define _MKNOD_VER             _MKNOD_VER_LINUX  /* The bits defined
> below.  */ -
>  #ifndef __USE_FILE_OFFSET64
>  struct stat
>  {
> diff --git a/sysdeps/unix/sysv/linux/microblaze/xstatver.h
> b/sysdeps/unix/sysv/linux/microblaze/xstatver.h index
> bddaa0d5ec..790cc834d2 100644 ---
> a/sysdeps/unix/sysv/linux/microblaze/xstatver.h +++
> b/sysdeps/unix/sysv/linux/microblaze/xstatver.h @@ -5,3 +5,9 @@
>  #define _STAT_VER_SVR4         2
>  #define _STAT_VER_LINUX        3
>  #define _STAT_VER              _STAT_VER_LINUX  /* The one defined
> below.  */ +
> +/* Versions of the 'xmknod' interface used in compatibility xmknod
> +   functions.  */
> +#define _MKNOD_VER_LINUX       1
> +#define _MKNOD_VER_SVR4        2
> +#define _MKNOD_VER             _MKNOD_VER_LINUX
> diff --git a/sysdeps/unix/sysv/linux/mips/bits/stat.h
> b/sysdeps/unix/sysv/linux/mips/bits/stat.h index
> cfeb4ce6a4..f229c58013 100644 ---
> a/sysdeps/unix/sysv/linux/mips/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/mips/bits/stat.h @@ -24,11 +24,6 @@
>  
>  #include <sgidefs.h>
>  
> -/* Versions of the `xmknod' interface.  */
> -#define _MKNOD_VER_LINUX	1
> -#define _MKNOD_VER_SVR4		2
> -#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits
> defined below.  */ -
>  
>  #if _MIPS_SIM == _ABIO32
>  /* Structure describing file characteristics.  */
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist index
> fe9ba4e982..b9f56007a2 100644 ---
> a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++
> b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -2152,6
> +2152,8 @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 __confstr_chk F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist index
> e67591e710..c161ef11b5 100644 ---
> a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -2158,6
> +2158,8 @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 __confstr_chk F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist index
> e4eb9e6bbf..d4b1528e7a 100644 ---
> a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist @@ -2152,6
> +2152,8 @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 __confstr_chk F
> diff --git a/sysdeps/unix/sysv/linux/mips/xstatver.h
> b/sysdeps/unix/sysv/linux/mips/xstatver.h index
> 59dba71dd1..8e1801b603 100644 ---
> a/sysdeps/unix/sysv/linux/mips/xstatver.h +++
> b/sysdeps/unix/sysv/linux/mips/xstatver.h @@ -5,3 +5,9 @@
>  #define _STAT_VER_SVR4		2
>  #define _STAT_VER_LINUX		3
>  #define _STAT_VER		_STAT_VER_LINUX
> +
> +/* Versions of the 'xmknod' interface used in compatibility xmknod
> +   functions.  */
> +#define _MKNOD_VER_LINUX	1
> +#define _MKNOD_VER_SVR4		2
> +#define _MKNOD_VER		_MKNOD_VER_LINUX
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> b/sysdeps/unix/sysv/linux/nios2/libc.abilist index
> 0878998441..68fca4e650 100644 ---
> a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++
> b/sysdeps/unix/sysv/linux/nios2/libc.abilist @@ -2199,5 +2199,7 @@
> GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/stat.h
> b/sysdeps/unix/sysv/linux/powerpc/bits/stat.h index
> 40ea9a96d4..80c9dc23ac 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/powerpc/bits/stat.h @@ -24,11 +24,6 @@
>  
>  #include <bits/wordsize.h>
>  
> -/* Versions of the `xmknod' interface.  */
> -#define _MKNOD_VER_LINUX	1
> -#define _MKNOD_VER_SVR4		2
> -#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits
> defined below.  */ -
>  
>  #if __WORDSIZE == 32
>  
> diff --git
> a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist index
> 993c957e8e..bec34b2128 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++
> b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@
> -2208,6 +2208,8 @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
> GLIBC_2.33 lstat F GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 _IO_fprintf F
> diff --git
> a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist index
> 25a8e828e9..35bd161c79 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist +++
> b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist @@
> -2071,6 +2071,8 @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
> GLIBC_2.33 lstat F GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 _IO_fprintf F
> diff --git
> a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist index
> 46ae28e552..f1c8ad9cc5 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist +++
> b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist @@
> -2361,5 +2361,7 @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
> GLIBC_2.33 lstat F GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/xstatver.h
> b/sysdeps/unix/sysv/linux/powerpc/xstatver.h index
> 1656e2f7e4..aa61dfd678 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/xstatver.h +++
> b/sysdeps/unix/sysv/linux/powerpc/xstatver.h @@ -9,3 +9,9 @@
>  #else
>  # define _STAT_VER		_STAT_VER_KERNEL
>  #endif
> +
> +/* Versions of the 'xmknod' interface used in compatibility xmknod
> +   functions.  */
> +#define _MKNOD_VER_LINUX	1
> +#define _MKNOD_VER_SVR4		2
> +#define _MKNOD_VER		_MKNOD_VER_LINUX
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist index
> 1044aa6be2..fdfc373871 100644 ---
> a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist @@ -2128,5 +2128,7
> @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/stat.h
> b/sysdeps/unix/sysv/linux/s390/bits/stat.h index
> d12055529a..75fa871a1d 100644 ---
> a/sysdeps/unix/sysv/linux/s390/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/s390/bits/stat.h @@ -24,16 +24,6 @@
>  
>  #include <bits/wordsize.h>
>  
> -#if __WORDSIZE == 64
> -/* Versions of the `xmknod' interface.	*/
> -#define _MKNOD_VER_LINUX	0
> -#else
> -/* Versions of the `xmknod' interface.  */
> -# define _MKNOD_VER_LINUX	1
> -# define _MKNOD_VER_SVR4	2
> -# define _MKNOD_VER		_MKNOD_VER_LINUX
> -#endif
> -
>  #if __WORDSIZE == 64
>  struct stat
>    {
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index
> 6b1fa7e67f..47591dc5b5 100644 ---
> a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -2206,6
> +2206,8 @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 _IO_fprintf F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist index
> 0aec094e7b..bd96aeaff7 100644 ---
> a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist @@ -2107,6
> +2107,8 @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 _IO_fprintf F
> diff --git a/sysdeps/unix/sysv/linux/s390/xstatver.h
> b/sysdeps/unix/sysv/linux/s390/xstatver.h index
> 5ad0db2797..aeaf852ee5 100644 ---
> a/sysdeps/unix/sysv/linux/s390/xstatver.h +++
> b/sysdeps/unix/sysv/linux/s390/xstatver.h @@ -7,10 +7,14 @@
>  # define _STAT_VER_KERNEL	0
>  # define _STAT_VER_LINUX	1
>  # define _STAT_VER		_STAT_VER_LINUX
> +# define _MKNOD_VER_LINUX	0
>  #else
>  # define _STAT_VER_LINUX_OLD	1
>  # define _STAT_VER_KERNEL	1
>  # define _STAT_VER_SVR4		2
>  # define _STAT_VER_LINUX	3
> -# define _STAT_VER		_STAT_VER_LINUX
> +# define _MKNOD_VER_LINUX	1
> +# define _MKNOD_VER_SVR4	2
>  #endif
> +#define _STAT_VER		_STAT_VER_LINUX
> +#define _MKNOD_VER		_MKNOD_VER_LINUX
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> b/sysdeps/unix/sysv/linux/sh/le/libc.abilist index
> e2ae13d4fa..b4cebb11dd 100644 ---
> a/sysdeps/unix/sysv/linux/sh/le/libc.abilist +++
> b/sysdeps/unix/sysv/linux/sh/le/libc.abilist @@ -2073,6 +2073,8 @@
> GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 __confstr_chk F
> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/stat.h
> b/sysdeps/unix/sysv/linux/sparc/bits/stat.h index
> 7af17b5c40..d10ebb1a9a 100644 ---
> a/sysdeps/unix/sysv/linux/sparc/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/sparc/bits/stat.h @@ -22,12 +22,6 @@
>  #ifndef _BITS_STAT_H
>  #define _BITS_STAT_H	1
>  
> -/* Versions of the `xmknod' interface.  */
> -#define _MKNOD_VER_LINUX	1
> -#define _MKNOD_VER_SVR4		2
> -#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits
> defined below.  */ -
> -
>  struct stat
>    {
>      __dev_t st_dev;			/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index
> 886e01960f..f208405859 100644 ---
> a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -2197,6
> +2197,8 @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 _IO_fprintf F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist index
> 33b068201a..44e68aded2 100644 ---
> a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist @@ -2124,6
> +2124,8 @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 __confstr_chk F
> diff --git a/sysdeps/unix/sysv/linux/sparc/xstatver.h
> b/sysdeps/unix/sysv/linux/sparc/xstatver.h index
> ae92b530e7..693b41c3ac 100644 ---
> a/sysdeps/unix/sysv/linux/sparc/xstatver.h +++
> b/sysdeps/unix/sysv/linux/sparc/xstatver.h @@ -5,3 +5,9 @@
>  #define _STAT_VER_SVR4		2
>  #define _STAT_VER_LINUX		3
>  #define _STAT_VER		_STAT_VER_LINUX	/* The one
> defined below.  */ +
> +/* Versions of the 'xmknod' interface used in compatibility xmknod
> +   functions.  */
> +#define _MKNOD_VER_LINUX	1
> +#define _MKNOD_VER_SVR4		2
> +#define _MKNOD_VER		_MKNOD_VER_LINUX
> diff --git a/sysdeps/unix/sysv/linux/x86/bits/stat.h
> b/sysdeps/unix/sysv/linux/x86/bits/stat.h index
> f132569e9d..2c0a3f120b 100644 ---
> a/sysdeps/unix/sysv/linux/x86/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/x86/bits/stat.h @@ -22,17 +22,6 @@
>  #ifndef _BITS_STAT_H
>  #define _BITS_STAT_H	1
>  
> -/* Versions of the `struct stat' data structure.  */
> -#ifndef __x86_64__
> -/* i386 versions of the `xmknod' interface.  */
> -# define _MKNOD_VER_LINUX	1
> -# define _MKNOD_VER_SVR4	2
> -# define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits
> defined below.  */ -#else
> -/* x86-64 versions of the `xmknod' interface.  */
> -# define _MKNOD_VER_LINUX	0
> -#endif
> -
>  struct stat
>    {
>      __dev_t st_dev;		/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/x86/xstatver.h
> b/sysdeps/unix/sysv/linux/x86/xstatver.h index 6f047a346d..678d5bc022
> 100644 --- a/sysdeps/unix/sysv/linux/x86/xstatver.h
> +++ b/sysdeps/unix/sysv/linux/x86/xstatver.h
> @@ -5,9 +5,12 @@
>  # define _STAT_VER_KERNEL	1
>  # define _STAT_VER_SVR4		2
>  # define _STAT_VER_LINUX	3
> +# define _MKNOD_VER_LINUX	1
> +# define _MKNOD_VER_SVR4	2
>  #else
>  # define _STAT_VER_KERNEL	0
>  # define _STAT_VER_LINUX	1
> +# define _MKNOD_VER_LINUX	0
>  #endif
>  #define _STAT_VER		_STAT_VER_LINUX
> -
> +#define _MKNOD_VER		_MKNOD_VER_LINUX
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist index
> f767bdde24..51e76861f6 100644 ---
> a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist @@ -2082,6 +2082,8
> @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
>  GLIBC_2.4 __confstr_chk F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist index
> 535862a51e..f83473c11f 100644 ---
> a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist @@ -2179,5 +2179,7
> @@ GLIBC_2.33 fstatat F GLIBC_2.33 fstatat64 F
>  GLIBC_2.33 lstat F
>  GLIBC_2.33 lstat64 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
>  GLIBC_2.33 stat F
>  GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/xstatver.h
> b/sysdeps/unix/sysv/linux/xstatver.h index 59dba71dd1..8e1801b603
> 100644 --- a/sysdeps/unix/sysv/linux/xstatver.h
> +++ b/sysdeps/unix/sysv/linux/xstatver.h
> @@ -5,3 +5,9 @@
>  #define _STAT_VER_SVR4		2
>  #define _STAT_VER_LINUX		3
>  #define _STAT_VER		_STAT_VER_LINUX
> +
> +/* Versions of the 'xmknod' interface used in compatibility xmknod
> +   functions.  */
> +#define _MKNOD_VER_LINUX	1
> +#define _MKNOD_VER_SVR4		2
> +#define _MKNOD_VER		_MKNOD_VER_LINUX




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
  
Joseph Myers Oct. 12, 2020, 10:27 p.m. UTC | #5
It appears this and related changes have recently been committed and 
introduced ABI test regressions.

FAIL: glibcs-armeb-linux-gnueabi check
FAIL: glibcs-armeb-linux-gnueabi-be8 check
FAIL: glibcs-armeb-linux-gnueabihf check
FAIL: glibcs-armeb-linux-gnueabihf-be8 check
FAIL: glibcs-m68k-linux-gnu-coldfire check
FAIL: glibcs-m68k-linux-gnu-coldfire-soft check
FAIL: glibcs-microblazeel-linux-gnu check
FAIL: glibcs-mips-linux-gnu-nan2008-soft check
FAIL: glibcs-mips-linux-gnu-soft check
FAIL: glibcs-mipsel-linux-gnu-nan2008-soft check
FAIL: glibcs-mipsel-linux-gnu-soft check
FAIL: glibcs-powerpc-linux-gnu-soft check
FAIL: glibcs-sh3eb-linux-gnu check
FAIL: glibcs-sh4eb-linux-gnu check
FAIL: glibcs-sh4eb-linux-gnu-soft check

https://sourceware.org/pipermail/libc-testresults/2020q4/006880.html

Sample test output (check-abi-libc fails, for armeb-linux-gnueabi):

@@ -146,0 +147,6 @@ GLIBC_2.32 strerrorname_np F
+GLIBC_2.33 fstat F
+GLIBC_2.33 fstat64 F
+GLIBC_2.33 fstatat F
+GLIBC_2.33 fstatat64 F
+GLIBC_2.33 lstat F
+GLIBC_2.33 lstat64 F
@@ -147,0 +154,4 @@ GLIBC_2.33 mallinfo2 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
+GLIBC_2.33 stat F
+GLIBC_2.33 stat64 F
  
Adhemerval Zanella Oct. 13, 2020, 12:58 a.m. UTC | #6
On 12/10/2020 19:27, Joseph Myers wrote:
> It appears this and related changes have recently been committed and 
> introduced ABI test regressions.
> 
> FAIL: glibcs-armeb-linux-gnueabi check
> FAIL: glibcs-armeb-linux-gnueabi-be8 check
> FAIL: glibcs-armeb-linux-gnueabihf check
> FAIL: glibcs-armeb-linux-gnueabihf-be8 check
> FAIL: glibcs-m68k-linux-gnu-coldfire check
> FAIL: glibcs-m68k-linux-gnu-coldfire-soft check
> FAIL: glibcs-microblazeel-linux-gnu check
> FAIL: glibcs-mips-linux-gnu-nan2008-soft check
> FAIL: glibcs-mips-linux-gnu-soft check
> FAIL: glibcs-mipsel-linux-gnu-nan2008-soft check
> FAIL: glibcs-mipsel-linux-gnu-soft check
> FAIL: glibcs-powerpc-linux-gnu-soft check
> FAIL: glibcs-sh3eb-linux-gnu check
> FAIL: glibcs-sh4eb-linux-gnu check
> FAIL: glibcs-sh4eb-linux-gnu-soft check
> 
> https://sourceware.org/pipermail/libc-testresults/2020q4/006880.html
> 
> Sample test output (check-abi-libc fails, for armeb-linux-gnueabi):
> 
> @@ -146,0 +147,6 @@ GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> @@ -147,0 +154,4 @@ GLIBC_2.33 mallinfo2 F
> +GLIBC_2.33 mknod F
> +GLIBC_2.33 mknodat F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> 

I will sort this out, thanks (I need to update my own script to
handle these abi variants as well).
  

Patch

diff --git a/include/sys/stat.h b/include/sys/stat.h
index 0be918a7a7..04b825df4a 100644
--- a/include/sys/stat.h
+++ b/include/sys/stat.h
@@ -30,14 +30,17 @@  extern __mode_t __umask (__mode_t __mask);
 extern int __mkdir (const char *__path, __mode_t __mode);
 libc_hidden_proto (__mkdir)
 
+extern int __mknodat (int fd, const char *path, mode_t mode, dev_t dev);
+libc_hidden_proto (__mknodat);
 extern int __mknod (const char *__path,
 		    __mode_t __mode, __dev_t __dev);
+libc_hidden_proto (__mknod);
+
+extern int __xmknod (int __ver, const char *__path, __mode_t __mode,
+		     __dev_t *__dev);
 libc_hidden_proto (__xmknod)
-extern __inline__ int __mknod (const char *__path, __mode_t __mode,
-			       __dev_t __dev)
-{
-  return __xmknod (_MKNOD_VER, __path, __mode, &__dev);
-}
+extern int __xmknodat (int __ver, int __fd, const char *__path,
+		       __mode_t __mode, __dev_t *__dev);
 libc_hidden_proto (__xmknodat)
 
 int __fxstat (int __ver, int __fildes, struct stat *__stat_buf);
diff --git a/io/Makefile b/io/Makefile
index cee356b666..2ed86c530e 100644
--- a/io/Makefile
+++ b/io/Makefile
@@ -57,11 +57,6 @@  routines :=								\
 	sendfile sendfile64 copy_file_range 				\
 	utimensat futimens file_change_detection
 
-# These routines will be omitted from the libc shared object.
-# Instead the static object files will be included in a special archive
-# linked against when the shared library will be used.
-static-only-routines = mknod mknodat
-
 others		:= pwd
 test-srcs	:= ftwtest
 tests		:= test-utime test-stat test-stat2 test-lfs tst-getcwd \
diff --git a/io/Versions b/io/Versions
index f6db0e84ad..49c4d2d40a 100644
--- a/io/Versions
+++ b/io/Versions
@@ -134,6 +134,7 @@  libc {
   }
   GLIBC_2.33 {
     stat; stat64; fstat; fstat64; lstat; lstat64; fstatat; fstatat64;
+    mknod; mknodat;
   }
   GLIBC_PRIVATE {
     __libc_fcntl64;
diff --git a/io/mknod.c b/io/mknod.c
index ac96829230..7f88633198 100644
--- a/io/mknod.c
+++ b/io/mknod.c
@@ -1,4 +1,5 @@ 
-/* Copyright (C) 1995-2020 Free Software Foundation, Inc.
+/* Create a special or ordinary file.
+   Copyright (C) 1995-2020 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -6,23 +7,6 @@ 
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.
 
-   In addition to the permissions in the GNU Lesser General Public
-   License, the Free Software Foundation gives you unlimited
-   permission to link the compiled version of this file with other
-   programs, and to distribute those programs without any restriction
-   coming from the use of this file. (The GNU Lesser General Public
-   License restrictions do apply in other respects; for example, they
-   cover modification of the file, and distribution when not linked
-   into another program.)
-
-   Note that people who make modified versions of this file are not
-   obligated to grant this special exception for their modified
-   versions; it is their choice whether to do so. The GNU Lesser
-   General Public License gives permission to release a modified
-   version without this exception; this exception also makes it
-   possible to release a modified version which carries forward this
-   exception.
-
    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
@@ -32,24 +16,13 @@ 
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-
 #include <sys/types.h>
 #include <sys/stat.h>
 
-/* This definition is only used if inlining fails for this function; see
-   the last page of <sys/stat.h>.  The real work is done by the `x'
-   function which is passed a version number argument.  We arrange in the
-   makefile that when not inlined this function is always statically
-   linked; that way a dynamically-linked executable always encodes the
-   version number corresponding to the data structures it uses, so the `x'
-   functions in the shared library can adapt without needing to recompile
-   all callers.  */
-
 int
-attribute_hidden
 __mknod (const char *path, mode_t mode, dev_t dev)
 {
   return __xmknod (_MKNOD_VER, path, mode, &dev);
 }
-
-weak_hidden_alias (__mknod, mknod)
+libc_hidden_def (__mknod)
+weak_alias (__mknod, mknod)
diff --git a/io/mknodat.c b/io/mknodat.c
index 65c9f1aa9c..6ec1c1648c 100644
--- a/io/mknodat.c
+++ b/io/mknodat.c
@@ -1,4 +1,5 @@ 
-/* Copyright (C) 1995-2020 Free Software Foundation, Inc.
+/* Create a special or ordinary file.
+   Copyright (C) 1995-2020 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -6,23 +7,6 @@ 
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.
 
-   In addition to the permissions in the GNU Lesser General Public
-   License, the Free Software Foundation gives you unlimited
-   permission to link the compiled version of this file with other
-   programs, and to distribute those programs without any restriction
-   coming from the use of this file. (The GNU Lesser General Public
-   License restrictions do apply in other respects; for example, they
-   cover modification of the file, and distribution when not linked
-   into another program.)
-
-   Note that people who make modified versions of this file are not
-   obligated to grant this special exception for their modified
-   versions; it is their choice whether to do so. The GNU Lesser
-   General Public License gives permission to release a modified
-   version without this exception; this exception also makes it
-   possible to release a modified version which carries forward this
-   exception.
-
    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
@@ -32,22 +16,13 @@ 
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-
 #include <sys/types.h>
 #include <sys/stat.h>
 
-/* This definition is only used if inlining fails for this function; see
-   the last page of <sys/stat.h>.  The real work is done by the `x'
-   function which is passed a version number argument.  We arrange in the
-   makefile that when not inlined this function is always statically
-   linked; that way a dynamically-linked executable always encodes the
-   version number corresponding to the data structures it uses, so the `x'
-   functions in the shared library can adapt without needing to recompile
-   all callers.  */
-
 int
-attribute_hidden
-mknodat (int fd, const char *path, mode_t mode, dev_t dev)
+__mknodat (int fd, const char *path, mode_t mode, dev_t dev)
 {
   return __xmknodat (_MKNOD_VER, fd, path, mode, &dev);
 }
+libc_hidden_def (__mknodat)
+weak_alias (__mknodat, mknodat)
diff --git a/io/sys/stat.h b/io/sys/stat.h
index 83cf253c72..58c3770622 100644
--- a/io/sys/stat.h
+++ b/io/sys/stat.h
@@ -367,41 +367,11 @@  extern int utimensat (int __fd, const char *__path,
 /* Set file access and modification times of the file associated with FD.  */
 extern int futimens (int __fd, const struct timespec __times[2]) __THROW;
 #endif
-
-#ifndef _MKNOD_VER
-# define _MKNOD_VER	0
-#endif
-
-extern int __xmknod (int __ver, const char *__path, __mode_t __mode,
-		     __dev_t *__dev) __THROW __nonnull ((2, 4));
-
-extern int __xmknodat (int __ver, int __fd, const char *__path,
-		       __mode_t __mode, __dev_t *__dev)
-     __THROW __nonnull ((3, 5));
 
 #ifdef __USE_GNU
 # include <bits/statx.h>
 #endif
 
-#ifdef __USE_EXTERN_INLINES
-# ifdef __USE_MISC
-__extern_inline int
-__NTH (mknod (const char *__path, __mode_t __mode, __dev_t __dev))
-{
-  return __xmknod (_MKNOD_VER, __path, __mode, &__dev);
-}
-# endif
-
-# ifdef __USE_ATFILE
-__extern_inline int
-__NTH (mknodat (int __fd, const char *__path, __mode_t __mode,
-		__dev_t __dev))
-{
-  return __xmknodat (_MKNOD_VER, __fd, __path, __mode, &__dev);
-}
-# endif
-#endif
-
 __END_DECLS
 
 
diff --git a/sysdeps/generic/xstatver.h b/sysdeps/generic/xstatver.h
index d727c98a16..281013b2f1 100644
--- a/sysdeps/generic/xstatver.h
+++ b/sysdeps/generic/xstatver.h
@@ -1,3 +1,4 @@ 
 /* Versions of the 'struct stat' data structure used in compatibility xstat
    functions.  */
 #define _STAT_VER 0
+#define _MKNOD_VER 0
diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
index 74a4ed5c1d..b4e39285d0 100644
--- a/sysdeps/mach/hurd/i386/libc.abilist
+++ b/sysdeps/mach/hurd/i386/libc.abilist
@@ -2198,6 +2198,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/posix/mkfifo.c b/sysdeps/posix/mkfifo.c
index 61f62e2e96..0b89f6c291 100644
--- a/sysdeps/posix/mkfifo.c
+++ b/sysdeps/posix/mkfifo.c
@@ -24,6 +24,5 @@ 
 int
 mkfifo (const char *path, mode_t mode)
 {
-  dev_t dev = 0;
-  return __xmknod (_MKNOD_VER, path, mode | S_IFIFO, &dev);
+  return __mknod (path, mode | S_IFIFO, 0);
 }
diff --git a/sysdeps/posix/mkfifoat.c b/sysdeps/posix/mkfifoat.c
index 5287fe8782..d1e0977ba1 100644
--- a/sysdeps/posix/mkfifoat.c
+++ b/sysdeps/posix/mkfifoat.c
@@ -23,6 +23,5 @@ 
 int
 mkfifoat (int fd, const char *file, mode_t mode)
 {
-  dev_t dev = 0;
-  return __xmknodat (_MKNOD_VER, fd, file, mode | S_IFIFO, &dev);
+  return __mknodat (fd, file, mode | S_IFIFO, 0);
 }
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 03e4ae9296..54b707b9cc 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2166,5 +2166,7 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/stat.h b/sysdeps/unix/sysv/linux/alpha/bits/stat.h
index 1fc27936b9..d20fb5a4b0 100644
--- a/sysdeps/unix/sysv/linux/alpha/bits/stat.h
+++ b/sysdeps/unix/sysv/linux/alpha/bits/stat.h
@@ -22,10 +22,6 @@ 
 #ifndef _BITS_STAT_H
 #define _BITS_STAT_H	1
 
-/* Versions of the `xmknod' interface.  */
-#define _MKNOD_VER_LINUX	0
-
-
 /* Nanosecond resolution timestamps are stored in a format equivalent to
    'struct timespec'.  This is the type used whenever possible but the
    Unix namespace rules do not allow the identifier 'timespec' to appear
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 5b752ef4a8..9b429fd28f 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2248,6 +2248,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 _IO_fprintf F
diff --git a/sysdeps/unix/sysv/linux/alpha/xstatver.h b/sysdeps/unix/sysv/linux/alpha/xstatver.h
index bbb9469617..1cb5d26bb1 100644
--- a/sysdeps/unix/sysv/linux/alpha/xstatver.h
+++ b/sysdeps/unix/sysv/linux/alpha/xstatver.h
@@ -7,3 +7,8 @@ 
 #define _STAT_VER_GLIBC2_3_4	3
 #define _STAT_VER_LINUX		3
 #define _STAT_VER		_STAT_VER_LINUX
+
+/* Versions of the 'xmknod' interface used in compatibility xmknod
+   functions.  */
+#define _MKNOD_VER_LINUX	0
+#define _MKNOD_VER		_MKNOD_VER_LINUX
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 925b532383..7ed5340364 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -1926,5 +1926,7 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index a4c1a7c03c..3ec1cbdfbc 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -147,6 +147,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 _Exit F
diff --git a/sysdeps/unix/sysv/linux/bits/stat.h b/sysdeps/unix/sysv/linux/bits/stat.h
index b542623208..0669451f69 100644
--- a/sysdeps/unix/sysv/linux/bits/stat.h
+++ b/sysdeps/unix/sysv/linux/bits/stat.h
@@ -22,13 +22,6 @@ 
 #ifndef _BITS_STAT_H
 #define _BITS_STAT_H	1
 
-/* Versions of the `struct stat' data structure.  */
-/* Versions of the `xmknod' interface.  */
-#define _MKNOD_VER_LINUX	1
-#define _MKNOD_VER_SVR4		2
-#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits defined below.  */
-
-
 struct stat
   {
     __dev_t st_dev;			/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 799873e189..301fd728d7 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2110,5 +2110,7 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
diff --git a/sysdeps/unix/sysv/linux/generic/bits/stat.h b/sysdeps/unix/sysv/linux/generic/bits/stat.h
index 35e14a47c6..1b586d72fa 100644
--- a/sysdeps/unix/sysv/linux/generic/bits/stat.h
+++ b/sysdeps/unix/sysv/linux/generic/bits/stat.h
@@ -26,9 +26,6 @@ 
 #include <bits/endian.h>
 #include <bits/wordsize.h>
 
-/* Versions of the `xmknod' interface.  */
-#define _MKNOD_VER_LINUX	0
-
 #if defined __USE_FILE_OFFSET64
 # define __field64(type, type64, name) type64 name
 #elif __WORDSIZE == 64 || defined __INO_T_MATCHES_INO64_T
diff --git a/sysdeps/unix/sysv/linux/generic/xstatver.h b/sysdeps/unix/sysv/linux/generic/xstatver.h
index 8675db494c..d8fd35beb6 100644
--- a/sysdeps/unix/sysv/linux/generic/xstatver.h
+++ b/sysdeps/unix/sysv/linux/generic/xstatver.h
@@ -3,3 +3,8 @@ 
 #define _STAT_VER_KERNEL	0
 #define _STAT_VER_LINUX		0
 #define _STAT_VER		_STAT_VER_KERNEL
+
+/* Versions of the 'xmknod' interface used in compatibility xmknod
+   functions.  */
+#define _MKNOD_VER_LINUX	0
+#define _MKNOD_VER		_MKNOD_VER_LINUX
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 95c7bf4f06..84834052e1 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2069,6 +2069,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index e7cf5cdb98..b82debaba4 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2235,6 +2235,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/stat.h b/sysdeps/unix/sysv/linux/ia64/bits/stat.h
index 8ec2e4c81f..6937f3227a 100644
--- a/sysdeps/unix/sysv/linux/ia64/bits/stat.h
+++ b/sysdeps/unix/sysv/linux/ia64/bits/stat.h
@@ -22,9 +22,6 @@ 
 #ifndef _BITS_STAT_H
 #define _BITS_STAT_H	1
 
-/* Versions of the `xmknod' interface.  */
-#define _MKNOD_VER_LINUX	0
-
 struct stat
   {
     __dev_t st_dev;		/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index beeb905efd..475b7af1a5 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -2101,6 +2101,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/ia64/xstatver.h b/sysdeps/unix/sysv/linux/ia64/xstatver.h
index 4f02f697ad..f24ab4a9ee 100644
--- a/sysdeps/unix/sysv/linux/ia64/xstatver.h
+++ b/sysdeps/unix/sysv/linux/ia64/xstatver.h
@@ -3,3 +3,8 @@ 
 #define _STAT_VER_KERNEL	0
 #define _STAT_VER_LINUX		1
 #define _STAT_VER		_STAT_VER_LINUX
+
+/* Versions of the 'xmknod' interface used in compatibility xmknod
+   functions.  */
+#define _MKNOD_VER_LINUX	0
+#define _MKNOD_VER		_MKNOD_VER_LINUX
diff --git a/sysdeps/unix/sysv/linux/m68k/bits/stat.h b/sysdeps/unix/sysv/linux/m68k/bits/stat.h
index bf41776e6c..c6f761fcc0 100644
--- a/sysdeps/unix/sysv/linux/m68k/bits/stat.h
+++ b/sysdeps/unix/sysv/linux/m68k/bits/stat.h
@@ -22,12 +22,6 @@ 
 #ifndef _BITS_STAT_H
 #define _BITS_STAT_H	1
 
-/* Versions of the `xmknod' interface.  */
-#define _MKNOD_VER_LINUX	1
-#define _MKNOD_VER_SVR4		2
-#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits defined below.  */
-
-
 struct stat
   {
     __dev_t st_dev;			/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index ed34e1fc82..29127e1341 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2181,6 +2181,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/m68k/xstatver.h b/sysdeps/unix/sysv/linux/m68k/xstatver.h
index 59dba71dd1..8e1801b603 100644
--- a/sysdeps/unix/sysv/linux/m68k/xstatver.h
+++ b/sysdeps/unix/sysv/linux/m68k/xstatver.h
@@ -5,3 +5,9 @@ 
 #define _STAT_VER_SVR4		2
 #define _STAT_VER_LINUX		3
 #define _STAT_VER		_STAT_VER_LINUX
+
+/* Versions of the 'xmknod' interface used in compatibility xmknod
+   functions.  */
+#define _MKNOD_VER_LINUX	1
+#define _MKNOD_VER_SVR4		2
+#define _MKNOD_VER		_MKNOD_VER_LINUX
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index e00f5115b2..e5b4cecacd 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2161,5 +2161,7 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
diff --git a/sysdeps/unix/sysv/linux/microblaze/bits/stat.h b/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
index 51316a8c1b..b3068e5c98 100644
--- a/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
+++ b/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
@@ -23,11 +23,6 @@ 
 #ifndef _BITS_STAT_H
 #define _BITS_STAT_H	1
 
-/* Versions of the `xmknod' interface.  */
-#define _MKNOD_VER_LINUX       1
-#define _MKNOD_VER_SVR4        2
-#define _MKNOD_VER             _MKNOD_VER_LINUX  /* The bits defined below.  */
-
 #ifndef __USE_FILE_OFFSET64
 struct stat
 {
diff --git a/sysdeps/unix/sysv/linux/microblaze/xstatver.h b/sysdeps/unix/sysv/linux/microblaze/xstatver.h
index bddaa0d5ec..790cc834d2 100644
--- a/sysdeps/unix/sysv/linux/microblaze/xstatver.h
+++ b/sysdeps/unix/sysv/linux/microblaze/xstatver.h
@@ -5,3 +5,9 @@ 
 #define _STAT_VER_SVR4         2
 #define _STAT_VER_LINUX        3
 #define _STAT_VER              _STAT_VER_LINUX  /* The one defined below.  */
+
+/* Versions of the 'xmknod' interface used in compatibility xmknod
+   functions.  */
+#define _MKNOD_VER_LINUX       1
+#define _MKNOD_VER_SVR4        2
+#define _MKNOD_VER             _MKNOD_VER_LINUX
diff --git a/sysdeps/unix/sysv/linux/mips/bits/stat.h b/sysdeps/unix/sysv/linux/mips/bits/stat.h
index cfeb4ce6a4..f229c58013 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/stat.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/stat.h
@@ -24,11 +24,6 @@ 
 
 #include <sgidefs.h>
 
-/* Versions of the `xmknod' interface.  */
-#define _MKNOD_VER_LINUX	1
-#define _MKNOD_VER_SVR4		2
-#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits defined below.  */
-
 
 #if _MIPS_SIM == _ABIO32
 /* Structure describing file characteristics.  */
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index fe9ba4e982..b9f56007a2 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2152,6 +2152,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index e67591e710..c161ef11b5 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2158,6 +2158,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index e4eb9e6bbf..d4b1528e7a 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2152,6 +2152,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/xstatver.h b/sysdeps/unix/sysv/linux/mips/xstatver.h
index 59dba71dd1..8e1801b603 100644
--- a/sysdeps/unix/sysv/linux/mips/xstatver.h
+++ b/sysdeps/unix/sysv/linux/mips/xstatver.h
@@ -5,3 +5,9 @@ 
 #define _STAT_VER_SVR4		2
 #define _STAT_VER_LINUX		3
 #define _STAT_VER		_STAT_VER_LINUX
+
+/* Versions of the 'xmknod' interface used in compatibility xmknod
+   functions.  */
+#define _MKNOD_VER_LINUX	1
+#define _MKNOD_VER_SVR4		2
+#define _MKNOD_VER		_MKNOD_VER_LINUX
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 0878998441..68fca4e650 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -2199,5 +2199,7 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/stat.h b/sysdeps/unix/sysv/linux/powerpc/bits/stat.h
index 40ea9a96d4..80c9dc23ac 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/stat.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/stat.h
@@ -24,11 +24,6 @@ 
 
 #include <bits/wordsize.h>
 
-/* Versions of the `xmknod' interface.  */
-#define _MKNOD_VER_LINUX	1
-#define _MKNOD_VER_SVR4		2
-#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits defined below.  */
-
 
 #if __WORDSIZE == 32
 
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 993c957e8e..bec34b2128 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2208,6 +2208,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 _IO_fprintf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 25a8e828e9..35bd161c79 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2071,6 +2071,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 _IO_fprintf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 46ae28e552..f1c8ad9cc5 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2361,5 +2361,7 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/xstatver.h b/sysdeps/unix/sysv/linux/powerpc/xstatver.h
index 1656e2f7e4..aa61dfd678 100644
--- a/sysdeps/unix/sysv/linux/powerpc/xstatver.h
+++ b/sysdeps/unix/sysv/linux/powerpc/xstatver.h
@@ -9,3 +9,9 @@ 
 #else
 # define _STAT_VER		_STAT_VER_KERNEL
 #endif
+
+/* Versions of the 'xmknod' interface used in compatibility xmknod
+   functions.  */
+#define _MKNOD_VER_LINUX	1
+#define _MKNOD_VER_SVR4		2
+#define _MKNOD_VER		_MKNOD_VER_LINUX
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 1044aa6be2..fdfc373871 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2128,5 +2128,7 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
diff --git a/sysdeps/unix/sysv/linux/s390/bits/stat.h b/sysdeps/unix/sysv/linux/s390/bits/stat.h
index d12055529a..75fa871a1d 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/stat.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/stat.h
@@ -24,16 +24,6 @@ 
 
 #include <bits/wordsize.h>
 
-#if __WORDSIZE == 64
-/* Versions of the `xmknod' interface.	*/
-#define _MKNOD_VER_LINUX	0
-#else
-/* Versions of the `xmknod' interface.  */
-# define _MKNOD_VER_LINUX	1
-# define _MKNOD_VER_SVR4	2
-# define _MKNOD_VER		_MKNOD_VER_LINUX
-#endif
-
 #if __WORDSIZE == 64
 struct stat
   {
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 6b1fa7e67f..47591dc5b5 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2206,6 +2206,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 _IO_fprintf F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 0aec094e7b..bd96aeaff7 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2107,6 +2107,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 _IO_fprintf F
diff --git a/sysdeps/unix/sysv/linux/s390/xstatver.h b/sysdeps/unix/sysv/linux/s390/xstatver.h
index 5ad0db2797..aeaf852ee5 100644
--- a/sysdeps/unix/sysv/linux/s390/xstatver.h
+++ b/sysdeps/unix/sysv/linux/s390/xstatver.h
@@ -7,10 +7,14 @@ 
 # define _STAT_VER_KERNEL	0
 # define _STAT_VER_LINUX	1
 # define _STAT_VER		_STAT_VER_LINUX
+# define _MKNOD_VER_LINUX	0
 #else
 # define _STAT_VER_LINUX_OLD	1
 # define _STAT_VER_KERNEL	1
 # define _STAT_VER_SVR4		2
 # define _STAT_VER_LINUX	3
-# define _STAT_VER		_STAT_VER_LINUX
+# define _MKNOD_VER_LINUX	1
+# define _MKNOD_VER_SVR4	2
 #endif
+#define _STAT_VER		_STAT_VER_LINUX
+#define _MKNOD_VER		_MKNOD_VER_LINUX
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index e2ae13d4fa..b4cebb11dd 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2073,6 +2073,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/stat.h b/sysdeps/unix/sysv/linux/sparc/bits/stat.h
index 7af17b5c40..d10ebb1a9a 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/stat.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/stat.h
@@ -22,12 +22,6 @@ 
 #ifndef _BITS_STAT_H
 #define _BITS_STAT_H	1
 
-/* Versions of the `xmknod' interface.  */
-#define _MKNOD_VER_LINUX	1
-#define _MKNOD_VER_SVR4		2
-#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits defined below.  */
-
-
 struct stat
   {
     __dev_t st_dev;			/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 886e01960f..f208405859 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2197,6 +2197,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 _IO_fprintf F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 33b068201a..44e68aded2 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2124,6 +2124,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/sparc/xstatver.h b/sysdeps/unix/sysv/linux/sparc/xstatver.h
index ae92b530e7..693b41c3ac 100644
--- a/sysdeps/unix/sysv/linux/sparc/xstatver.h
+++ b/sysdeps/unix/sysv/linux/sparc/xstatver.h
@@ -5,3 +5,9 @@ 
 #define _STAT_VER_SVR4		2
 #define _STAT_VER_LINUX		3
 #define _STAT_VER		_STAT_VER_LINUX	/* The one defined below.  */
+
+/* Versions of the 'xmknod' interface used in compatibility xmknod
+   functions.  */
+#define _MKNOD_VER_LINUX	1
+#define _MKNOD_VER_SVR4		2
+#define _MKNOD_VER		_MKNOD_VER_LINUX
diff --git a/sysdeps/unix/sysv/linux/x86/bits/stat.h b/sysdeps/unix/sysv/linux/x86/bits/stat.h
index f132569e9d..2c0a3f120b 100644
--- a/sysdeps/unix/sysv/linux/x86/bits/stat.h
+++ b/sysdeps/unix/sysv/linux/x86/bits/stat.h
@@ -22,17 +22,6 @@ 
 #ifndef _BITS_STAT_H
 #define _BITS_STAT_H	1
 
-/* Versions of the `struct stat' data structure.  */
-#ifndef __x86_64__
-/* i386 versions of the `xmknod' interface.  */
-# define _MKNOD_VER_LINUX	1
-# define _MKNOD_VER_SVR4	2
-# define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits defined below.  */
-#else
-/* x86-64 versions of the `xmknod' interface.  */
-# define _MKNOD_VER_LINUX	0
-#endif
-
 struct stat
   {
     __dev_t st_dev;		/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/x86/xstatver.h b/sysdeps/unix/sysv/linux/x86/xstatver.h
index 6f047a346d..678d5bc022 100644
--- a/sysdeps/unix/sysv/linux/x86/xstatver.h
+++ b/sysdeps/unix/sysv/linux/x86/xstatver.h
@@ -5,9 +5,12 @@ 
 # define _STAT_VER_KERNEL	1
 # define _STAT_VER_SVR4		2
 # define _STAT_VER_LINUX	3
+# define _MKNOD_VER_LINUX	1
+# define _MKNOD_VER_SVR4	2
 #else
 # define _STAT_VER_KERNEL	0
 # define _STAT_VER_LINUX	1
+# define _MKNOD_VER_LINUX	0
 #endif
 #define _STAT_VER		_STAT_VER_LINUX
-
+#define _MKNOD_VER		_MKNOD_VER_LINUX
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index f767bdde24..51e76861f6 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2082,6 +2082,8 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
 GLIBC_2.4 __confstr_chk F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 535862a51e..f83473c11f 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2179,5 +2179,7 @@  GLIBC_2.33 fstatat F
 GLIBC_2.33 fstatat64 F
 GLIBC_2.33 lstat F
 GLIBC_2.33 lstat64 F
+GLIBC_2.33 mknod F
+GLIBC_2.33 mknodat F
 GLIBC_2.33 stat F
 GLIBC_2.33 stat64 F
diff --git a/sysdeps/unix/sysv/linux/xstatver.h b/sysdeps/unix/sysv/linux/xstatver.h
index 59dba71dd1..8e1801b603 100644
--- a/sysdeps/unix/sysv/linux/xstatver.h
+++ b/sysdeps/unix/sysv/linux/xstatver.h
@@ -5,3 +5,9 @@ 
 #define _STAT_VER_SVR4		2
 #define _STAT_VER_LINUX		3
 #define _STAT_VER		_STAT_VER_LINUX
+
+/* Versions of the 'xmknod' interface used in compatibility xmknod
+   functions.  */
+#define _MKNOD_VER_LINUX	1
+#define _MKNOD_VER_SVR4		2
+#define _MKNOD_VER		_MKNOD_VER_LINUX