[00/16] Add y2038 support for stat functions

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

Message

Adhemerval Zanella Netto July 23, 2020, 7:46 p.m. UTC
  As discussed in a previous thread [1], the {f,l}stat{at}{64} functions
use an old mechanism prior symbol versioning to provide a compatibility
layer.  As described in the thread, this approach has some drawbacks so
I decided to use the anoother strategy which requires a lot of plumbing.

So the first 6 patches consolidate the various {f,l}xstat{64} linux
implementations.  I tried to keep as less arch-specific implementations
as possible (there are still outliers such as alpha and mips).  The
xstat implementation is mainly responsible to issue the correct syscall,
the heavy lifting of handling the _STAT_VER versions are done on the
xstat_conv functions (which is not changed on this patchset).

The next patch removes all internal usage of xstat function by replacing
with the stat one.  It would allow to move the xstat function later to
compat symbols.

Some Linux consolidation is also done to avoid need to replicate the new
y2038 stat struct on multiple architectures or add syscall support on
multiple symbols.  First the struct stat is moved to its own header and
stat/lstat/fstat is implemented on top on fstatat.

Finally fstatat is implemented without calling fxstatat and xstat symbols
are moved to compat ones.

The y2038 stat struct is added as as generic definition for all Linux
ABIs and it is disentangled from kernel ABI.

The patchset also removes the mknod{at} static wrapper and move them
to libc symbols.  I decided to send it along this patchset because its
defintion are entangled on platform specific header and moving them to
compat symbols allow to simplify the stat code as well.

[1] https://sourceware.org/pipermail/libc-alpha/2020-July/116342.html

Adhemerval Zanella (16):
  linux: Always define STAT_IS_KERNEL_STAT
  linux: Define STAT64_IS_KERNEL_STAT64
  linux: Consolidate xstat{64}
  linux: Consolidate lxstat{64}
  linux: Consolidate fxstat{64}
  linux: Consolidate fxstatat{64}
  Linux: Consolidate xmknod
  Remove internal usage of extensible stat functions
  Remove stat wrapper functions, move them to exported symbols
  Remove mknod wrapper functions, move them to symbols
  linux: Move the struct stat{64} to struct_stat.h
  linux: Implement {l}fstat{at} in terms of fstatat
  linux: Disentangle fstatat from fxstatat
  linux: Move {f}xstat{at} to compat symbols
  linux: Add {f}stat{at} y2038 support
  linux: Move xmknoda{at} to compat symbols

 catgets/open_catalog.c                        |   2 +-
 csu/check_fds.c                               |   2 +-
 elf/cache.c                                   |   4 +-
 elf/dl-load.c                                 |   4 +-
 elf/dl-misc.c                                 |   2 +-
 elf/dl-profile.c                              |   2 +-
 iconv/gconv_cache.c                           |   2 +-
 include/sys/stat.h                            | 166 +++++++++++++-----
 inet/rcmd.c                                   |   4 +-
 inet/ruserpass.c                              |   2 +-
 intl/loadmsgcat.c                             |   2 +-
 io/Makefile                                   |   7 +-
 io/Versions                                   |   5 +
 io/file_change_detection.c                    |   4 +-
 io/fstat.c                                    |  33 +---
 io/fstat64.c                                  |  36 +---
 io/fstatat.c                                  |  36 +---
 io/fstatat64.c                                |  36 +---
 io/fts.c                                      |  15 +-
 io/fts64.c                                    |   5 +-
 io/ftw.c                                      |  46 ++---
 io/ftw64.c                                    |   8 +-
 io/getdirname.c                               |   4 +-
 io/lstat.c                                    |  33 +---
 io/lstat64.c                                  |  36 +---
 io/mkdirat.c                                  |   2 +-
 io/mkfifoat.c                                 |   2 +-
 io/mknod.c                                    |  35 +---
 io/mknodat.c                                  |  35 +---
 io/openat.c                                   |   2 +-
 io/openat64.c                                 |   2 +-
 io/stat.c                                     |  34 +---
 io/stat64.c                                   |  36 +---
 io/sys/stat.h                                 | 159 -----------------
 io/xmknodat.c                                 |   2 +-
 libio/fileops.c                               |   2 +-
 locale/loadarchive.c                          |   4 +-
 locale/loadlocale.c                           |   4 +-
 misc/daemon.c                                 |   2 +-
 misc/getusershell.c                           |   2 +-
 nptl/sem_open.c                               |   2 +-
 nscd/gai.c                                    |   5 +
 nscd/nscd_helper.c                            |   2 +-
 posix/glob.c                                  |   7 -
 stdlib/canonicalize.c                         |   2 +-
 sysdeps/generic/struct_stat_time64.h          |   7 +
 sysdeps/generic/xstatver.h                    |   4 +
 sysdeps/gnu/glob64-lstat-compat.c             |   2 +-
 sysdeps/gnu/glob64.c                          |   2 +-
 sysdeps/mach/hurd/i386/libc.abilist           |  10 ++
 sysdeps/mach/hurd/ptsname.c                   |   2 +-
 sysdeps/mach/hurd/xmknod.c                    |   1 -
 sysdeps/mach/hurd/xmknodat.c                  |   2 -
 sysdeps/posix/dl-fileid.h                     |   2 +-
 sysdeps/posix/euidaccess.c                    |   2 +-
 sysdeps/posix/fdopendir.c                     |   2 +-
 sysdeps/posix/fpathconf.c                     |   2 +-
 sysdeps/posix/getaddrinfo.c                   |   4 +-
 sysdeps/posix/isfdtype.c                      |   2 +-
 sysdeps/posix/mkfifo.c                        |   3 +-
 sysdeps/posix/mkfifoat.c                      |   3 +-
 sysdeps/posix/opendir.c                       |   2 +-
 sysdeps/posix/pathconf.c                      |   2 +-
 sysdeps/posix/posix_fallocate.c               |   2 +-
 sysdeps/posix/posix_fallocate64.c             |   2 +-
 sysdeps/posix/sysconf.c                       |   2 +-
 sysdeps/posix/tempname.c                      |   5 +-
 sysdeps/unix/sysv/linux/Makefile              |   8 +-
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  10 ++
 .../alpha/bits/{stat.h => struct_stat.h}      |  56 +-----
 sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c |   1 -
 .../sysv/linux/alpha/{fxstat.c => fxstat64.c} |  56 +++---
 sysdeps/unix/sysv/linux/alpha/fxstatat.c      |  52 ------
 .../{generic/xstat.c => alpha/fxstatat64.c}   |  35 ++--
 sysdeps/unix/sysv/linux/alpha/kernel_stat.h   |   2 +
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  10 ++
 .../sysv/linux/alpha/{lxstat.c => lxstat64.c} |  55 +++---
 .../sysv/linux/alpha/{xstat.c => xstat64.c}   |  55 +++---
 sysdeps/unix/sysv/linux/alpha/xstatver.h      |  14 ++
 sysdeps/unix/sysv/linux/arc/kernel_stat.h     |   1 +
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  10 ++
 sysdeps/unix/sysv/linux/arm/fxstat.c          |   1 -
 sysdeps/unix/sysv/linux/arm/fxstatat.c        |   1 -
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  10 ++
 sysdeps/unix/sysv/linux/arm/lxstat.c          |   1 -
 sysdeps/unix/sysv/linux/arm/xstat.c           |   1 -
 sysdeps/unix/sysv/linux/bits/stat.h           | 114 +-----------
 sysdeps/unix/sysv/linux/bits/struct_stat.h    | 131 ++++++++++++++
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  10 ++
 sysdeps/unix/sysv/linux/faccessat.c           |   2 +-
 sysdeps/unix/sysv/linux/fexecve.c             |   4 +-
 sysdeps/unix/sysv/linux/fstat.c               |  42 +++++
 sysdeps/unix/sysv/linux/fstat64.c             |  52 ++++++
 sysdeps/unix/sysv/linux/fstatat.c             |  92 ++++++++++
 sysdeps/unix/sysv/linux/fstatat64.c           | 125 +++++++++++++
 sysdeps/unix/sysv/linux/fxstat.c              |  67 +++----
 sysdeps/unix/sysv/linux/fxstat64.c            |  56 +++---
 sysdeps/unix/sysv/linux/fxstatat.c            |  63 +++----
 sysdeps/unix/sysv/linux/fxstatat64.c          |  75 +++++---
 .../generic/bits/{stat.h => struct_stat.h}    |  59 +------
 sysdeps/unix/sysv/linux/generic/lxstat.c      |  48 -----
 .../sysv/linux/generic/wordsize-32/fxstat.c   |  57 ------
 .../sysv/linux/generic/wordsize-32/fxstat64.c |  36 ----
 .../sysv/linux/generic/wordsize-32/fxstatat.c |  56 ------
 .../sysv/linux/generic/wordsize-32/lxstat.c   |  55 ------
 .../sysv/linux/generic/wordsize-32/lxstat64.c |  66 -------
 .../sysv/linux/generic/wordsize-32/xstat.c    |  54 ------
 .../sysv/linux/generic/wordsize-32/xstat64.c  |  63 -------
 sysdeps/unix/sysv/linux/generic/xmknod.c      |  54 ------
 sysdeps/unix/sysv/linux/generic/xstatver.h    |  10 ++
 sysdeps/unix/sysv/linux/hppa/fxstat.c         |   1 -
 sysdeps/unix/sysv/linux/hppa/fxstatat.c       |   1 -
 sysdeps/unix/sysv/linux/hppa/kernel_stat.h    |   2 +
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  10 ++
 sysdeps/unix/sysv/linux/hppa/lxstat.c         |   1 -
 sysdeps/unix/sysv/linux/hppa/xstat.c          |   1 -
 sysdeps/unix/sysv/linux/i386/fxstat.c         |  59 -------
 sysdeps/unix/sysv/linux/i386/fxstatat.c       |  54 ------
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  10 ++
 sysdeps/unix/sysv/linux/i386/lxstat.c         |  60 -------
 sysdeps/unix/sysv/linux/i386/xstat.c          |  59 -------
 .../linux/ia64/bits/{stat.h => struct_stat.h} |  53 +-----
 sysdeps/unix/sysv/linux/ia64/kernel_stat.h    |   1 +
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  10 ++
 sysdeps/unix/sysv/linux/ia64/xstatver.h       |  10 ++
 sysdeps/unix/sysv/linux/kernel_stat.h         |   2 +
 sysdeps/unix/sysv/linux/kstat_cp.h            |   2 +
 sysdeps/unix/sysv/linux/lstat.c               |  42 +++++
 sysdeps/unix/sysv/linux/lstat64.c             |  51 ++++++
 sysdeps/unix/sysv/linux/lxstat.c              |  69 ++++----
 sysdeps/unix/sysv/linux/lxstat64.c            |  71 ++++++--
 .../linux/m68k/bits/{stat.h => struct_stat.h} |  57 +-----
 sysdeps/unix/sysv/linux/m68k/fxstat.c         |   1 -
 sysdeps/unix/sysv/linux/m68k/fxstatat.c       |   1 -
 sysdeps/unix/sysv/linux/m68k/lxstat.c         |   1 -
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  10 ++
 sysdeps/unix/sysv/linux/m68k/xstat.c          |   1 -
 sysdeps/unix/sysv/linux/m68k/xstatver.h       |  13 ++
 .../sysv/linux/microblaze/be/libc.abilist     |  10 ++
 .../microblaze/bits/{stat.h => struct_stat.h} |  65 ++-----
 sysdeps/unix/sysv/linux/microblaze/fxstat.c   |   1 -
 sysdeps/unix/sysv/linux/microblaze/fxstatat.c |   1 -
 .../unix/sysv/linux/microblaze/kernel_stat.h  |   2 +
 sysdeps/unix/sysv/linux/microblaze/lxstat.c   |   1 -
 sysdeps/unix/sysv/linux/microblaze/xstat.c    |   1 -
 sysdeps/unix/sysv/linux/microblaze/xstatver.h |  13 ++
 .../linux/mips/bits/{stat.h => struct_stat.h} |  57 +-----
 sysdeps/unix/sysv/linux/mips/fxstat.c         |  49 ++++++
 sysdeps/unix/sysv/linux/mips/kernel_stat.h    |   7 +
 .../sysv/linux/{wordsize-64 => mips}/lxstat.c |  44 ++---
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  10 ++
 .../unix/sysv/linux/mips/mips32/fxstatat.c    |   1 -
 .../unix/sysv/linux/mips/mips64/fxstat64.c    |  21 +--
 .../fxstat.c => mips/mips64/fxstatat.c}       |  33 ++--
 .../unix/sysv/linux/mips/mips64/fxstatat64.c  |  35 ++--
 .../unix/sysv/linux/mips/mips64/kstat_cp.h    |  71 ++++++++
 .../unix/sysv/linux/mips/mips64/lxstat64.c    |  22 +--
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  10 ++
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  10 ++
 .../unix/sysv/linux/mips/mips64/statx_cp.c    |   3 -
 sysdeps/unix/sysv/linux/mips/mips64/xstat64.c |  25 ++-
 .../sysv/linux/{wordsize-64 => mips}/xstat.c  |  41 +++--
 sysdeps/unix/sysv/linux/mips/xstatver.h       |  13 ++
 sysdeps/unix/sysv/linux/mknod.c               |  28 +++
 sysdeps/unix/sysv/linux/mknodat.c             |  41 +++++
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  10 ++
 sysdeps/unix/sysv/linux/oldglob.c             |   2 +-
 sysdeps/unix/sysv/linux/pathconf.c            |   4 +-
 .../powerpc/bits/{stat.h => struct_stat.h}    |  64 +------
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  10 ++
 .../sysv/linux/powerpc/powerpc32/fxstat.c     |   1 -
 .../sysv/linux/powerpc/powerpc32/fxstatat.c   |   1 -
 .../linux/powerpc/powerpc32/kernel_stat.h     |   2 +
 .../sysv/linux/powerpc/powerpc32/lxstat.c     |   2 -
 .../unix/sysv/linux/powerpc/powerpc32/xstat.c |   1 -
 .../linux/powerpc/powerpc64/be/libc.abilist   |  10 ++
 .../linux/powerpc/powerpc64/kernel_stat.h     |   1 +
 .../linux/powerpc/powerpc64/le/libc.abilist   |  10 ++
 sysdeps/unix/sysv/linux/powerpc/xstatver.h    |  17 ++
 sysdeps/unix/sysv/linux/ptsname.c             |   4 +-
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  10 ++
 .../linux/s390/bits/{stat.h => struct_stat.h} |  68 +------
 sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c |   1 -
 .../unix/sysv/linux/s390/s390-32/fxstatat.c   |   1 -
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  10 ++
 sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c |   1 -
 sysdeps/unix/sysv/linux/s390/s390-32/xstat.c  |   1 -
 .../sysv/linux/s390/s390-64/kernel_stat.h     |   1 +
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  10 ++
 sysdeps/unix/sysv/linux/s390/xstatver.h       |  20 +++
 sysdeps/unix/sysv/linux/sh/fxstat.c           |   1 -
 sysdeps/unix/sysv/linux/sh/fxstatat.c         |   1 -
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  10 ++
 sysdeps/unix/sysv/linux/sh/lxstat.c           |   2 -
 sysdeps/unix/sysv/linux/sh/xstat.c            |   1 -
 .../sparc/bits/{stat.h => struct_stat.h}      |  60 +------
 .../unix/sysv/linux/sparc/sparc32/fxstat.c    |   1 -
 .../unix/sysv/linux/sparc/sparc32/fxstatat.c  |   1 -
 .../sysv/linux/sparc/sparc32/kernel_stat.h    |   2 +
 .../sysv/linux/sparc/sparc32/libc.abilist     |  10 ++
 .../unix/sysv/linux/sparc/sparc32/lxstat.c    |   2 -
 sysdeps/unix/sysv/linux/sparc/sparc32/xstat.c |   1 -
 .../sysv/linux/sparc/sparc64/dl-fxstatat64.c  |   1 -
 .../unix/sysv/linux/sparc/sparc64/fxstat.c    |   1 -
 .../unix/sysv/linux/sparc/sparc64/fxstatat.c  |   1 -
 .../sysv/linux/sparc/sparc64/kernel_stat.h    |   7 +
 .../unix/sysv/linux/sparc/sparc64/kstat_cp.h  |  46 +++++
 .../sysv/linux/sparc/sparc64/libc.abilist     |  10 ++
 .../unix/sysv/linux/sparc/sparc64/lxstat.c    |   1 -
 sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c |   1 -
 sysdeps/unix/sysv/linux/sparc/xstatver.h      |  13 ++
 sysdeps/unix/sysv/linux/stat.c                |  42 +++++
 sysdeps/unix/sysv/linux/stat64.c              |  52 ++++++
 sysdeps/unix/sysv/linux/stat_t64_cp.c         |  92 ++++++++++
 .../fxstatat64.c => stat_t64_cp.h}            |  27 +--
 sysdeps/unix/sysv/linux/statx_cp.c            |  54 ++++++
 sysdeps/unix/sysv/linux/statx_cp.h            |   6 +
 sysdeps/unix/sysv/linux/struct_stat_time64.h  | 122 +++++++++++++
 sysdeps/unix/sysv/linux/ttyname.c             |   8 +-
 sysdeps/unix/sysv/linux/ttyname_r.c           |   8 +-
 .../sysv/linux/wordsize-64/dl-fxstatat64.c    |   1 -
 .../unix/sysv/linux/wordsize-64/fxstat64.c    |   1 -
 .../unix/sysv/linux/wordsize-64/fxstatat.c    |  48 -----
 .../unix/sysv/linux/wordsize-64/fxstatat64.c  |   1 -
 .../unix/sysv/linux/wordsize-64/lxstat64.c    |   1 -
 sysdeps/unix/sysv/linux/wordsize-64/xstat64.c |   1 -
 .../linux/x86/bits/{stat.h => struct_stat.h}  |  67 +------
 sysdeps/unix/sysv/linux/x86/xstatver.h        |  16 ++
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  10 ++
 sysdeps/unix/sysv/linux/x86_64/kernel_stat.h  |   1 +
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  10 ++
 sysdeps/unix/sysv/linux/xmknod.c              |  24 +--
 sysdeps/unix/sysv/linux/xmknodat.c            |  23 +--
 sysdeps/unix/sysv/linux/xstat.c               |  68 ++++---
 sysdeps/unix/sysv/linux/xstat64.c             |  64 +++++--
 sysdeps/unix/sysv/linux/xstatconv.c           |   2 +-
 sysdeps/unix/sysv/linux/xstatconv.h           |   2 +-
 sysdeps/unix/sysv/linux/xstatover.h           |  67 +++++++
 sysdeps/unix/sysv/linux/xstatver.h            |  13 ++
 sysvipc/ftok.c                                |   2 +-
 time/getdate.c                                |   2 +-
 time/tzfile.c                                 |   4 +-
 242 files changed, 2587 insertions(+), 2627 deletions(-)
 create mode 100644 sysdeps/generic/struct_stat_time64.h
 create mode 100644 sysdeps/generic/xstatver.h
 rename sysdeps/unix/sysv/linux/alpha/bits/{stat.h => struct_stat.h} (68%)
 delete mode 100644 sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c
 rename sysdeps/unix/sysv/linux/alpha/{fxstat.c => fxstat64.c} (53%)
 delete mode 100644 sysdeps/unix/sysv/linux/alpha/fxstatat.c
 rename sysdeps/unix/sysv/linux/{generic/xstat.c => alpha/fxstatat64.c} (56%)
 rename sysdeps/unix/sysv/linux/alpha/{lxstat.c => lxstat64.c} (55%)
 rename sysdeps/unix/sysv/linux/alpha/{xstat.c => xstat64.c} (55%)
 create mode 100644 sysdeps/unix/sysv/linux/alpha/xstatver.h
 delete mode 100644 sysdeps/unix/sysv/linux/arm/fxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/arm/fxstatat.c
 delete mode 100644 sysdeps/unix/sysv/linux/arm/lxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/arm/xstat.c
 create mode 100644 sysdeps/unix/sysv/linux/bits/struct_stat.h
 create mode 100644 sysdeps/unix/sysv/linux/fstat.c
 create mode 100644 sysdeps/unix/sysv/linux/fstat64.c
 create mode 100644 sysdeps/unix/sysv/linux/fstatat.c
 create mode 100644 sysdeps/unix/sysv/linux/fstatat64.c
 rename sysdeps/unix/sysv/linux/generic/bits/{stat.h => struct_stat.h} (70%)
 delete mode 100644 sysdeps/unix/sysv/linux/generic/lxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat64.c
 delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c
 delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c
 delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c
 delete mode 100644 sysdeps/unix/sysv/linux/generic/xmknod.c
 create mode 100644 sysdeps/unix/sysv/linux/generic/xstatver.h
 delete mode 100644 sysdeps/unix/sysv/linux/hppa/fxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/hppa/fxstatat.c
 delete mode 100644 sysdeps/unix/sysv/linux/hppa/lxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/hppa/xstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/i386/fxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/i386/fxstatat.c
 delete mode 100644 sysdeps/unix/sysv/linux/i386/lxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/i386/xstat.c
 rename sysdeps/unix/sysv/linux/ia64/bits/{stat.h => struct_stat.h} (72%)
 create mode 100644 sysdeps/unix/sysv/linux/ia64/xstatver.h
 create mode 100644 sysdeps/unix/sysv/linux/kstat_cp.h
 create mode 100644 sysdeps/unix/sysv/linux/lstat.c
 create mode 100644 sysdeps/unix/sysv/linux/lstat64.c
 rename sysdeps/unix/sysv/linux/m68k/bits/{stat.h => struct_stat.h} (72%)
 delete mode 100644 sysdeps/unix/sysv/linux/m68k/fxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/m68k/fxstatat.c
 delete mode 100644 sysdeps/unix/sysv/linux/m68k/lxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/m68k/xstat.c
 create mode 100644 sysdeps/unix/sysv/linux/m68k/xstatver.h
 rename sysdeps/unix/sysv/linux/microblaze/bits/{stat.h => struct_stat.h} (77%)
 delete mode 100644 sysdeps/unix/sysv/linux/microblaze/fxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/microblaze/fxstatat.c
 delete mode 100644 sysdeps/unix/sysv/linux/microblaze/lxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/microblaze/xstat.c
 create mode 100644 sysdeps/unix/sysv/linux/microblaze/xstatver.h
 rename sysdeps/unix/sysv/linux/mips/bits/{stat.h => struct_stat.h} (81%)
 create mode 100644 sysdeps/unix/sysv/linux/mips/fxstat.c
 rename sysdeps/unix/sysv/linux/{wordsize-64 => mips}/lxstat.c (59%)
 delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/fxstatat.c
 rename sysdeps/unix/sysv/linux/{wordsize-64/fxstat.c => mips/mips64/fxstatat.c} (62%)
 create mode 100644 sysdeps/unix/sysv/linux/mips/mips64/kstat_cp.h
 delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/statx_cp.c
 rename sysdeps/unix/sysv/linux/{wordsize-64 => mips}/xstat.c (66%)
 create mode 100644 sysdeps/unix/sysv/linux/mips/xstatver.h
 create mode 100644 sysdeps/unix/sysv/linux/mknod.c
 create mode 100644 sysdeps/unix/sysv/linux/mknodat.c
 rename sysdeps/unix/sysv/linux/powerpc/bits/{stat.h => struct_stat.h} (82%)
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fxstatat.c
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/lxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/xstat.c
 create mode 100644 sysdeps/unix/sysv/linux/powerpc/xstatver.h
 rename sysdeps/unix/sysv/linux/s390/bits/{stat.h => struct_stat.h} (80%)
 delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/fxstatat.c
 delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/xstat.c
 create mode 100644 sysdeps/unix/sysv/linux/s390/xstatver.h
 delete mode 100644 sysdeps/unix/sysv/linux/sh/fxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/sh/fxstatat.c
 delete mode 100644 sysdeps/unix/sysv/linux/sh/lxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/sh/xstat.c
 rename sysdeps/unix/sysv/linux/sparc/bits/{stat.h => struct_stat.h} (72%)
 delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/fxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/fxstatat.c
 delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/lxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/xstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/dl-fxstatat64.c
 delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/fxstatat.c
 create mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/kstat_cp.h
 delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/lxstat.c
 delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c
 create mode 100644 sysdeps/unix/sysv/linux/sparc/xstatver.h
 create mode 100644 sysdeps/unix/sysv/linux/stat.c
 create mode 100644 sysdeps/unix/sysv/linux/stat64.c
 create mode 100644 sysdeps/unix/sysv/linux/stat_t64_cp.c
 rename sysdeps/unix/sysv/linux/{generic/wordsize-32/fxstatat64.c => stat_t64_cp.h} (51%)
 create mode 100644 sysdeps/unix/sysv/linux/struct_stat_time64.h
 delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/dl-fxstatat64.c
 delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/fxstat64.c
 delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c
 delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/fxstatat64.c
 delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/lxstat64.c
 delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/xstat64.c
 rename sysdeps/unix/sysv/linux/x86/bits/{stat.h => struct_stat.h} (73%)
 create mode 100644 sysdeps/unix/sysv/linux/x86/xstatver.h
 create mode 100644 sysdeps/unix/sysv/linux/xstatover.h
 create mode 100644 sysdeps/unix/sysv/linux/xstatver.h