]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Minimize sysdeps code involved in defining major/minor/makedev.
authorZack Weinberg <zackw@panix.com>
Thu, 28 Apr 2016 16:29:55 +0000 (12:29 -0400)
committerZack Weinberg <zackw@panix.com>
Wed, 3 Aug 2016 19:23:04 +0000 (15:23 -0400)
Presently sys/sysmacros.h is entirely defined in sysdeps.  This would
mean that the deprecation logic coming up in the next patch would have
to be written twice (in generic/ and unix/sysv/linux/).  To avoid that,
hoist all but the unavoidably system-dependent logic to misc/, leaving a
bits/ header behind.  This also promotes the Linux-specific encoding of
dev_t, which accommodates 32-bit major and minor numbers in a 64-bit dev_t,
to generic, as glibc's dev_t is always 64 bits wide.

The former Linux implementation used inline functions to avoid evaluating
arguments more than once.  After this change, all platforms use inline
functions, which means that three new symbols are added to the generic ABI.
(These symbols are in the user namespace, which is how they have always
been on Linux.  They begin with "gnu_dev_", so collisions with user code
are pretty unlikely.)

New ports henceforth need only provide a bits/sysmacros.h defining
internal macros __SYSMACROS_{DECLARE,DEFINE}_{MAJOR,MINOR,MAKEDEV}.
This is only necessary if the kernel encoding is incompatible with
the now-generic encoding (for instance, it would be necessary for
FreeBSD).

While I was at it, I added a basic round-trip test for these functions.

* sysdeps/generic/sys/sysmacros.h: Delete file.
* sysdeps/unix/sysv/linux/makedev.c: Delete file.
* sysdeps/unix/sysv/linux/sys/sysmacros.h: Move file ...
* bits/sysmacros.h: ... here; this encoding is now the generic
encoding.  Now defines only the following macros:
__SYSMACROS_DECLARE_MAJOR, __SYSMACROS_DEFINE_MAJOR,
__SYSMACROS_DECLARE_MINOR, __SYSMACROS_DEFINE_MINOR,
__SYSMACROS_DECLARE_MAKEDEV, __SYSMACROS_DEFINE_MAKEDEV.

* misc/sys/sysmacros.h, misc/makedev.c: New files that use
bits/sysmacros.h and the above new macros to generate the
public implementations of major, minor, and makedev.
* misc/tst-makedev.c: New test.
* include/sys/sysmacros.h: New wrapper.

* misc/Makefile (headers): Add sys/sysmacros.h, bits/sysmacros.h.
(routines): Add makedev.
(tests): Add tst-makedev.
* misc/Versions [GLIBC_2.25]: Add gnu_dev_major, gnu_dev_minor,
gnu_dev_makedev.
* posix/Makefile (headers): Remove sys/sysmacros.h.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove makedev.

* sysdeps/arm/nacl/libc.abilist: Add GLIBC_2.25,
gnu_dev_major, gnu_dev_makedev, gnu_dev_minor.
* sysdeps/unix/sysv/linux/aarch64/libc.abilist
* sysdeps/unix/sysv/linux/alpha/libc.abilist
* sysdeps/unix/sysv/linux/arm/libc.abilist
* sysdeps/unix/sysv/linux/hppa/libc.abilist
* sysdeps/unix/sysv/linux/i386/libc.abilist
* sysdeps/unix/sysv/linux/ia64/libc.abilist
* sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
* sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
* sysdeps/unix/sysv/linux/microblaze/libc.abilist
* sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
* sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
* sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
* sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
* sysdeps/unix/sysv/linux/nios2/libc.abilist
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist
* sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
* sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
* sysdeps/unix/sysv/linux/sh/libc.abilist
* sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
* sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist
* sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist
* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist:
Add GLIBC_2.25.

41 files changed:
ChangeLog
bits/sysmacros.h [new file with mode: 0644]
include/sys/sysmacros.h [new file with mode: 0644]
misc/Makefile
misc/Versions
misc/makedev.c [moved from sysdeps/unix/sysv/linux/makedev.c with 62% similarity]
misc/sys/sysmacros.h [new file with mode: 0644]
misc/tst-makedev.c [new file with mode: 0644]
posix/Makefile
sysdeps/arm/nacl/libc.abilist
sysdeps/generic/sys/sysmacros.h [deleted file]
sysdeps/unix/sysv/linux/Makefile
sysdeps/unix/sysv/linux/aarch64/libc.abilist
sysdeps/unix/sysv/linux/alpha/libc.abilist
sysdeps/unix/sysv/linux/arm/libc.abilist
sysdeps/unix/sysv/linux/hppa/libc.abilist
sysdeps/unix/sysv/linux/i386/libc.abilist
sysdeps/unix/sysv/linux/ia64/libc.abilist
sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
sysdeps/unix/sysv/linux/microblaze/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
sysdeps/unix/sysv/linux/nios2/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
sysdeps/unix/sysv/linux/sh/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
sysdeps/unix/sysv/linux/sys/sysmacros.h [deleted file]
sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist
sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist
sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist
sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist

index ceb28b5c7472f5300837f83a7f4a900c9bbfa084..d6a30781b4a13febcd2fb19beb823e699d8bf147 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,60 @@
 2016-08-03  Zack Weinberg  <zackw@panix.com>
 
+       * sysdeps/generic/sys/sysmacros.h: Delete file.
+       * sysdeps/unix/sysv/linux/makedev.c: Delete file.
+       * sysdeps/unix/sysv/linux/sys/sysmacros.h: Move file ...
+       * bits/sysmacros.h: ... here; this encoding is now the generic
+       encoding.  Now defines only the following macros:
+       __SYSMACROS_DECLARE_MAJOR, __SYSMACROS_DEFINE_MAJOR,
+       __SYSMACROS_DECLARE_MINOR, __SYSMACROS_DEFINE_MINOR,
+       __SYSMACROS_DECLARE_MAKEDEV, __SYSMACROS_DEFINE_MAKEDEV.
+
+       * misc/sys/sysmacros.h, misc/makedev.c: New files that use
+       bits/sysmacros.h and the above new macros to generate the
+       public implementations of major, minor, and makedev.
+       * misc/tst-makedev.c: New test.
+       * include/sys/sysmacros.h: New wrapper.
+
+       * misc/Makefile (headers): Add sys/sysmacros.h, bits/sysmacros.h.
+       (routines): Add makedev.
+       (tests): Add tst-makedev.
+       * misc/Versions [GLIBC_2.25]: Add gnu_dev_major, gnu_dev_minor,
+       gnu_dev_makedev.
+       * posix/Makefile (headers): Remove sys/sysmacros.h.
+       * sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove makedev.
+
+       * sysdeps/arm/nacl/libc.abilist: Add GLIBC_2.25,
+       gnu_dev_major, gnu_dev_makedev, gnu_dev_minor.
+       * sysdeps/unix/sysv/linux/aarch64/libc.abilist
+       * sysdeps/unix/sysv/linux/alpha/libc.abilist
+       * sysdeps/unix/sysv/linux/arm/libc.abilist
+       * sysdeps/unix/sysv/linux/hppa/libc.abilist
+       * sysdeps/unix/sysv/linux/i386/libc.abilist
+       * sysdeps/unix/sysv/linux/ia64/libc.abilist
+       * sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+       * sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+       * sysdeps/unix/sysv/linux/microblaze/libc.abilist
+       * sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+       * sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+       * sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+       * sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+       * sysdeps/unix/sysv/linux/nios2/libc.abilist
+       * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+       * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+       * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist
+       * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist
+       * sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+       * sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+       * sysdeps/unix/sysv/linux/sh/libc.abilist
+       * sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+       * sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+       * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist
+       * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist
+       * sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist
+       * sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+       * sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist:
+       Add GLIBC_2.25.
+
        * include/features.h (__glibc_clang_prereq): New macro.
        * misc/sys/cdefs.h (__glibc_clang_has_extension)
        (__attribute_deprecated_msg__): New macros.
diff --git a/bits/sysmacros.h b/bits/sysmacros.h
new file mode 100644 (file)
index 0000000..e2c0bc2
--- /dev/null
@@ -0,0 +1,74 @@
+/* Definitions of macros to access `dev_t' values.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_SYSMACROS_H
+#define _BITS_SYSMACROS_H 1
+
+#ifndef _SYS_SYSMACROS_H
+# error "Never include <bits/sysmacros.h> directly; use <sys/sysmacros.h> instead."
+#endif
+
+/* dev_t in glibc is a 64-bit quantity, with 32-bit major and minor numbers.
+   Our default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of
+   the major number and m is a hex digit of the minor number.  This is
+   downward compatible with legacy systems where dev_t is 16 bits wide,
+   encoded as MMmm.  It is also downward compatible with the Linux kernel,
+   which (as of 2016) uses 32-bit dev_t, encoded as mmmM MMmm.
+
+   Systems that use an incompatible encoding for dev_t should override this
+   file in the appropriate sysdeps subdirectory.  */
+
+#define __SYSMACROS_DECLARE_MAJOR(DECL_TEMPL)                  \
+  DECL_TEMPL(unsigned int, major, (__dev_t __dev))
+
+#define __SYSMACROS_DEFINE_MAJOR(DECL_TEMPL)                   \
+  __SYSMACROS_DECLARE_MAJOR (DECL_TEMPL)                       \
+  {                                                            \
+    unsigned int __major;                                      \
+    __major  = ((__dev & (__dev_t) 0x00000000000fff00u) >>  8); \
+    __major |= ((__dev & (__dev_t) 0xfffff00000000000u) >> 32); \
+    return __major;                                            \
+  }
+
+#define __SYSMACROS_DECLARE_MINOR(DECL_TEMPL)                  \
+  DECL_TEMPL(unsigned int, minor, (__dev_t __dev))
+
+#define __SYSMACROS_DEFINE_MINOR(DECL_TEMPL)                   \
+  __SYSMACROS_DECLARE_MINOR (DECL_TEMPL)                       \
+  {                                                            \
+    unsigned int __minor;                                      \
+    __minor  = ((__dev & (__dev_t) 0x00000000000000ffu) >>  0); \
+    __minor |= ((__dev & (__dev_t) 0x00000ffffff00000u) >> 12); \
+    return __minor;                                            \
+  }
+
+#define __SYSMACROS_DECLARE_MAKEDEV(DECL_TEMPL)                        \
+  DECL_TEMPL(__dev_t, makedev, (unsigned int __major, unsigned int __minor))
+
+#define __SYSMACROS_DEFINE_MAKEDEV(DECL_TEMPL)                 \
+  __SYSMACROS_DECLARE_MAKEDEV (DECL_TEMPL)                     \
+  {                                                            \
+    __dev_t __dev;                                             \
+    __dev  = (((__dev_t) (__major & 0x00000fffu)) <<  8);      \
+    __dev |= (((__dev_t) (__major & 0xfffff000u)) << 32);      \
+    __dev |= (((__dev_t) (__minor & 0x000000ffu)) <<  0);      \
+    __dev |= (((__dev_t) (__minor & 0xffffff00u)) << 12);      \
+    return __dev;                                              \
+  }
+
+#endif /* bits/sysmacros.h */
diff --git a/include/sys/sysmacros.h b/include/sys/sysmacros.h
new file mode 100644 (file)
index 0000000..87813c5
--- /dev/null
@@ -0,0 +1 @@
+#include <misc/sys/sysmacros.h>
index 56e20ce521d481c03da123de2daaadc9634743b8..3d2ebb8e456e4d9097bf27c8b0777651dd7bd8a2 100644 (file)
@@ -34,7 +34,8 @@ headers       := sys/uio.h bits/uio.h sys/ioctl.h bits/ioctls.h bits/ioctl-types.h \
           regexp.h bits/select.h bits/mman.h sys/xattr.h \
           syslog.h sys/syslog.h \
           bits/syslog.h bits/syslog-ldbl.h bits/syslog-path.h bits/error.h \
-          bits/select2.h bits/hwcap.h sys/auxv.h
+          bits/select2.h bits/hwcap.h sys/auxv.h \
+          sys/sysmacros.h bits/sysmacros.h
 
 routines := brk sbrk sstk ioctl \
            readv writev preadv preadv64 pwritev pwritev64 \
@@ -67,7 +68,7 @@ routines := brk sbrk sstk ioctl \
            getloadavg getclktck \
            fgetxattr flistxattr fremovexattr fsetxattr getxattr \
            listxattr lgetxattr llistxattr lremovexattr lsetxattr \
-           removexattr setxattr getauxval ifunc-impl-list
+           removexattr setxattr getauxval ifunc-impl-list makedev
 
 generated += tst-error1.mtrace tst-error1-mem.out
 
@@ -78,7 +79,7 @@ gpl2lgpl := error.c error.h
 tests := tst-dirname tst-tsearch tst-fdset tst-efgcvt tst-mntent tst-hsearch \
         tst-error1 tst-pselect tst-insremque tst-mntent2 bug-hsearch1 \
         tst-mntent-blank-corrupt tst-mntent-blank-passno bug18240 \
-        tst-preadvwritev tst-preadvwritev64
+        tst-preadvwritev tst-preadvwritev64 tst-makedev
 ifeq ($(run-built-tests),yes)
 tests-special += $(objpfx)tst-error1-mem.out
 endif
index 671f4870e93a3b5f25fec8748dbce81f97b640b4..f2c90fffda53f89a671c1fb8ef5e5358c38a9432 100644 (file)
@@ -152,6 +152,9 @@ libc {
   GLIBC_2.23 {
     # SHLIB_COMPAT(GLIBC_2_0, GLIBC_2_23) used in regexp.c
   }
+  GLIBC_2.25 {
+    gnu_dev_major; gnu_dev_minor; gnu_dev_makedev;
+  }
   GLIBC_PRIVATE {
     __madvise;
     __mktemp;
similarity index 62%
rename from sysdeps/unix/sysv/linux/makedev.c
rename to misc/makedev.c
index 68c18ca3336c135e6e24ef0fa5501b9b929bd9ea..7303fb67a2d92da20b9ebac3f8701fa3c1eb3105 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <endian.h>
-#include <sys/sysmacros.h>
+#include <features.h>
 
-unsigned int
-gnu_dev_major (unsigned long long int dev)
-{
-  return ((dev >> 8) & 0xfff) | ((unsigned int) (dev >> 32) & ~0xfff);
-}
+#undef __USE_EXTERN_INLINES
+#define __SYSMACROS_NEED_IMPLEMENTATION
+#include <sys/sysmacros.h>
 
-unsigned int
-gnu_dev_minor (unsigned long long int dev)
-{
-  return (dev & 0xff) | ((unsigned int) (dev >> 12) & ~0xff);
-}
+#define OUT_OF_LINE_IMPL_TEMPL(rtype, name, proto) \
+  rtype gnu_dev_##name proto
 
-unsigned long long int
-gnu_dev_makedev (unsigned int major, unsigned int minor)
-{
-  return ((minor & 0xff) | ((major & 0xfff) << 8)
-         | (((unsigned long long int) (minor & ~0xff)) << 12)
-         | (((unsigned long long int) (major & ~0xfff)) << 32));
-}
+__SYSMACROS_DEFINE_MAJOR(OUT_OF_LINE_IMPL_TEMPL)
+__SYSMACROS_DEFINE_MINOR(OUT_OF_LINE_IMPL_TEMPL)
+__SYSMACROS_DEFINE_MAKEDEV(OUT_OF_LINE_IMPL_TEMPL)
diff --git a/misc/sys/sysmacros.h b/misc/sys/sysmacros.h
new file mode 100644 (file)
index 0000000..dc2eb83
--- /dev/null
@@ -0,0 +1,64 @@
+/* Definitions of macros to access `dev_t' values.
+   Copyright (C) 1996-2015 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SYSMACROS_H
+#define _SYS_SYSMACROS_H 1
+
+#include <features.h>
+#include <bits/types.h>
+#include <bits/sysmacros.h>
+
+#define __SYSMACROS_DECL_TEMPL(rtype, name, proto)                          \
+  extern rtype gnu_dev_##name proto __THROW __attribute_const__;
+
+#define __SYSMACROS_IMPL_TEMPL(rtype, name, proto)                          \
+  __extension__ __extern_inline __attribute_const__ rtype                   \
+  __NTH (gnu_dev_##name proto)
+
+__BEGIN_DECLS
+
+__SYSMACROS_DECLARE_MAJOR (__SYSMACROS_DECL_TEMPL)
+__SYSMACROS_DECLARE_MINOR (__SYSMACROS_DECL_TEMPL)
+__SYSMACROS_DECLARE_MAKEDEV (__SYSMACROS_DECL_TEMPL)
+
+#ifdef __USE_EXTERN_INLINES
+
+__SYSMACROS_DEFINE_MAJOR (__SYSMACROS_IMPL_TEMPL)
+__SYSMACROS_DEFINE_MINOR (__SYSMACROS_IMPL_TEMPL)
+__SYSMACROS_DEFINE_MAKEDEV (__SYSMACROS_IMPL_TEMPL)
+
+#endif
+
+__END_DECLS
+
+#ifndef __SYSMACROS_NEED_IMPLEMENTATION
+# undef __SYSMACROS_DECL_TEMPL
+# undef __SYSMACROS_IMPL_TEMPL
+# undef __SYSMACROS_DECLARE_MAJOR
+# undef __SYSMACROS_DECLARE_MINOR
+# undef __SYSMACROS_DECLARE_MAKEDEV
+# undef __SYSMACROS_DEFINE_MAJOR
+# undef __SYSMACROS_DEFINE_MINOR
+# undef __SYSMACROS_DEFINE_MAKEDEV
+#endif
+
+#define major(dev) gnu_dev_major (dev)
+#define minor(dev) gnu_dev_minor (dev)
+#define makedev(maj, min) gnu_dev_makedev (maj, min)
+
+#endif /* sys/sysmacros.h */
diff --git a/misc/tst-makedev.c b/misc/tst-makedev.c
new file mode 100644 (file)
index 0000000..b330b5a
--- /dev/null
@@ -0,0 +1,104 @@
+/* Tests of functions to access `dev_t' values.
+   Copyright (C) 2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sys/types.h>
+#include <sys/sysmacros.h>
+#include <stdio.h>
+#include <inttypes.h>
+
+/* Confirm that makedev (major (d), minor (d)) == d.  */
+static int
+do_test_split_combine (dev_t d1)
+{
+  unsigned int maj = major (d1);
+  unsigned int min = minor (d1);
+  dev_t d2 = makedev (maj, min);
+  if (d1 != d2)
+    {
+      printf ("FAIL: %016" PRIx64 " != %016" PRIx64 " (maj %08x min %08x)\n",
+             (uint64_t)d2, (uint64_t)d1, maj, min);
+      return 1;
+    }
+  else
+    return 0;
+}
+
+/* Confirm that major (makedev (maj, min)) == maj and
+   minor (makedev (maj, min)) == min.  */
+static int
+do_test_combine_split (unsigned int maj1, unsigned int min1)
+{
+  dev_t d = makedev (maj1, min1);
+  unsigned int maj2 = major (d);
+  unsigned int min2 = minor (d);
+  if (maj1 != maj2 && min1 != min2)
+    {
+      printf ("FAIL: %08x != %08x, %08x != %08x (dev %016" PRIx64 ")\n",
+             maj2, maj1, min2, min1, (uint64_t)d);
+      return 1;
+    }
+  else if (maj1 != maj2)
+    {
+      printf ("FAIL: %08x != %08x, %08x == %08x (dev %016" PRIx64 ")\n",
+             maj2, maj1, min2, min1, (uint64_t)d);
+      return 1;
+    }
+  else if (min1 != min2)
+    {
+      printf ("FAIL: %08x == %08x, %08x != %08x (dev %016" PRIx64 ")\n",
+             maj2, maj1, min2, min1, (uint64_t)d);
+      return 1;
+    }
+  else
+    return 0;
+}
+
+static int
+do_test (void)
+{
+  dev_t d;
+  unsigned int maj, min;
+  int status = 0;
+
+  /* Test the traditional range (16-bit dev_t, 8-bit each maj/min)
+     exhaustively.  */
+  for (d = 0; d <= 0xFFFF; d++)
+    status |= do_test_split_combine (d);
+
+  for (maj = 0; maj <= 0xFF; maj++)
+    for (min = 0; min <= 0xFF; min++)
+      status |= do_test_combine_split (maj, min);
+
+  /* Test glibc's expanded range (64-bit dev_t, 32-bit each maj/min).
+     Exhaustive testing would take much too long, instead we shift a
+     pair of 1-bits over each range.  */
+  {
+    unsigned int a, b;
+    for (a = 0; a <= 63; a++)
+      do_test_split_combine (((dev_t) 0x03) << a);
+
+    for (a = 0; a < 31; a++)
+      for (b = 0; b <= 31; b++)
+       do_test_combine_split (0x03u << a, 0x03u << b);
+  }
+
+  return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
index 5b0e298f75458bd19cf3bd9917c5ec646aee7783..3a7719e8c27784f8c45a0038125b53c351a18829 100644 (file)
@@ -29,7 +29,7 @@ headers       := sys/utsname.h sys/times.h sys/wait.h sys/types.h unistd.h          \
           bits/local_lim.h tar.h bits/utsname.h bits/confname.h              \
           bits/waitflags.h bits/waitstatus.h sys/unistd.h sched.h            \
           bits/sched.h re_comp.h wait.h bits/environments.h cpio.h           \
-          sys/sysmacros.h spawn.h bits/unistd.h
+          spawn.h bits/unistd.h
 
 routines :=                                                                  \
        uname                                                                 \
index 2f7751d167d18bff01b4cdd0efe9aa38e3f5d2fe..4d3b0b9fe327da714b6b95cc91e452b8a2e041c3 100644 (file)
@@ -1840,4 +1840,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 gnu_dev_major F
+GLIBC_2.25 gnu_dev_makedev F
+GLIBC_2.25 gnu_dev_minor F
diff --git a/sysdeps/generic/sys/sysmacros.h b/sysdeps/generic/sys/sysmacros.h
deleted file mode 100644 (file)
index 4cc5961..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Definitions of macros to access `dev_t' values.
-   Copyright (C) 1996-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _SYS_SYSMACROS_H
-#define _SYS_SYSMACROS_H       1
-
-/* For compatibility we provide alternative names.
-
-   The problem here is that compilers other than GCC probably don't
-   have the `long long' type and so `dev_t' is actually an array.  */
-#define major(dev) ((int)(((unsigned int) (dev) >> 8) & 0xff))
-#define minor(dev) ((int)((dev) & 0xff))
-#define makedev(major, minor) (((major) << 8) | (minor))
-
-#endif /* sys/sysmacros.h */
index 35e1ed48d254b7e8d685028e5557a7c5059a1e68..f0b052dfe9ac8a7ade18150e6487afe7ecc758f6 100644 (file)
@@ -15,7 +15,7 @@ ifeq ($(subdir),misc)
 include $(firstword $(wildcard $(sysdirs:=/sysctl.mk)))
 
 sysdep_routines += clone llseek umount umount2 readahead \
-                  setfsuid setfsgid makedev epoll_pwait signalfd \
+                  setfsuid setfsgid epoll_pwait signalfd \
                   eventfd eventfd_read eventfd_write prlimit \
                   personality
 
index 9cdb623a5c25ae4fafeee29fed5dc59000dc713f..2c2f49e85b3d550d8b2dda43ff110586ea0fe256 100644 (file)
@@ -2089,3 +2089,4 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
index f3f3c70ca6f21550721fbeba104f8fa42410e613..8afba471f72bb78c958db72e64e92a25840815f8 100644 (file)
@@ -2000,6 +2000,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index a93803d18257c6ff40d0718bbaff7e155010dfdc..de3bdf46fc25beddde56232d5f052eb0f6c0a8e9 100644 (file)
@@ -90,6 +90,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
index 58ed1333853975ba7e63a071f4bc56b177018a3c..3261b9395d1106109704a7af466341e42bb8e745 100644 (file)
@@ -1854,6 +1854,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index 61cbae0f580cfb97c411449982e0875f9e44f84e..6465a555b1667bb91a3b6b4b86dcd4578ba1999e 100644 (file)
@@ -2012,6 +2012,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index d40d264ef227c801fff5b6597f87fa431bbb56e6..4536271b6e84689997a6d83723b2e119f458563c 100644 (file)
@@ -1876,6 +1876,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index 64432ae0e101a66a3e60d53d57b71f4ae1e34caf..287d7a5df99a7e7687e6dddab2301dd962673da3 100644 (file)
@@ -91,6 +91,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0x98
index 8086c3857eb3e66f082ea9c2b3bb6351bb8608e2..c9229fa94f5e7540cd3f875a3805859a30716e7c 100644 (file)
@@ -1968,6 +1968,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index 8c4c3bba4576ddea33ff76b11dd91691f8012671..04097919b67960fb5115aa9f8909a8a6f3d4d8aa 100644 (file)
@@ -2089,3 +2089,4 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
index db014edc5108a589fac7293aace246c4ff14b84d..f31653e5842d8d0b805d04c0e2739edf5150fcd2 100644 (file)
@@ -1943,6 +1943,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index 33ac881346b514c48aab8e679db72d6465b80c27..a56bd992f748ae99f032afb49371e7cc5b41024c 100644 (file)
@@ -1941,6 +1941,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index b8b2c0eabbc8df59b66a7d5d83aff6dcfcdd0900..44552df7b04f31f94ce9ae4d6d10cc171492978e 100644 (file)
@@ -1939,6 +1939,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index 07413015f49c38b8bb1d04eb07f5e7b2d62def84..8d2a09dc9c7b2fddbeb5cf6a633bf50d0b5411a0 100644 (file)
@@ -1934,6 +1934,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index fa04825b2b0b73152da5faf36232259b0ce22637..0443b9236113ec8a881fceb56a611213ca8b3596 100644 (file)
@@ -2130,3 +2130,4 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
index 3d633c09998ac285cc908543a56c92e28e3ce5d3..ba9a29a3bdacc8fdc6784d62bb8a0e2d8a2207a0 100644 (file)
@@ -1972,6 +1972,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index a6b164bc23f22ce69923cb0f88a1548a71e58d65..f19534c7b8a8e596edd74a3c022e2e4998032596 100644 (file)
@@ -1977,6 +1977,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index 7200b762872a87bf37e9eacc92fa0462d01dde41..f8de1ab30b1be82f9f2ecb950c94d18dcecbf51a 100644 (file)
@@ -2177,3 +2177,4 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
index de62ecb0f3633da5a61a8fe72307e5dcc79b8351..6819133256d11e87e65119122f351df670c6ab49 100644 (file)
@@ -91,6 +91,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 _Exit F
 GLIBC_2.3 _IO_2_1_stderr_ D 0xe0
index 8da0bc087fdb35a4710218d7f68dd4c43d75893f..4cd5d85e421949dfdf847cc6c6b695d687e1b87c 100644 (file)
@@ -1972,6 +1972,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index 59066a94024bbe5e8032743c36d342306492b9cf..8cdb9df0c8652a0d80e379942c0dae80b7617d76 100644 (file)
@@ -1873,6 +1873,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index 01ca9e65ba650aee02f8e5ee7413547e5e9535f1..69791b4911011988936f924f86214f96fe1154a2 100644 (file)
@@ -1858,6 +1858,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index 245c1c6d2219393fd346f74ed32f8582461f2e33..fce58a8e88347bebb8fa3051a28798a08aa74197 100644 (file)
@@ -1964,6 +1964,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index 4478d137103120110805e8e1a918bd3b782d246b..16ce7399bfd8408f56c0c87316e9cabb027b2031 100644 (file)
@@ -1902,6 +1902,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/sys/sysmacros.h b/sysdeps/unix/sysv/linux/sys/sysmacros.h
deleted file mode 100644 (file)
index 4c4a697..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Definitions of macros to access `dev_t' values.
-   Copyright (C) 1996-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _SYS_SYSMACROS_H
-#define _SYS_SYSMACROS_H       1
-
-#include <features.h>
-
-__BEGIN_DECLS
-
-__extension__
-extern unsigned int gnu_dev_major (unsigned long long int __dev)
-     __THROW __attribute_const__;
-__extension__
-extern unsigned int gnu_dev_minor (unsigned long long int __dev)
-     __THROW __attribute_const__;
-__extension__
-extern unsigned long long int gnu_dev_makedev (unsigned int __major,
-                                              unsigned int __minor)
-     __THROW __attribute_const__;
-
-#ifdef __USE_EXTERN_INLINES
-__extension__ __extern_inline __attribute_const__ unsigned int
-__NTH (gnu_dev_major (unsigned long long int __dev))
-{
-  return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
-}
-
-__extension__ __extern_inline __attribute_const__ unsigned int
-__NTH (gnu_dev_minor (unsigned long long int __dev))
-{
-  return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
-}
-
-__extension__ __extern_inline __attribute_const__ unsigned long long int
-__NTH (gnu_dev_makedev (unsigned int __major, unsigned int __minor))
-{
-  return ((__minor & 0xff) | ((__major & 0xfff) << 8)
-         | (((unsigned long long int) (__minor & ~0xff)) << 12)
-         | (((unsigned long long int) (__major & ~0xfff)) << 32));
-}
-#endif
-__END_DECLS
-
-/* Access the functions with their traditional names.  */
-#define major(dev) gnu_dev_major (dev)
-#define minor(dev) gnu_dev_minor (dev)
-#define makedev(maj, min) gnu_dev_makedev (maj, min)
-
-#endif /* sys/sysmacros.h */
index c1a261341850b6d8c39d16e5e7a9929a60567e5f..f99c2982118c09a7a62a76e6d06ad46a55457ca7 100644 (file)
@@ -2096,3 +2096,4 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
index 35fbf8a9040e858d86fa626dca4c897a3bc7e290..c601ab0ee2166c43b595fa59c1e3655934c37f9d 100644 (file)
@@ -2096,3 +2096,4 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
index c1a261341850b6d8c39d16e5e7a9929a60567e5f..f99c2982118c09a7a62a76e6d06ad46a55457ca7 100644 (file)
@@ -2096,3 +2096,4 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
index c1054ce9d26154b4d45c7ae6bdebc0ba690bc669..8e6fa579742c13d98d7e505986613bafcfa6dd06 100644 (file)
@@ -1853,6 +1853,7 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
index 2fd6d60d3887bb8776f573a422c49d60590d5a90..1e12f48ec9dd21ed76feee86258c9d3e254b074b 100644 (file)
@@ -2096,3 +2096,4 @@ GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
 GLIBC_2.24 GLIBC_2.24 A
 GLIBC_2.24 quick_exit F
+GLIBC_2.25 GLIBC_2.25 A