From patchwork Fri Apr 29 01:39:34 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zack Weinberg X-Patchwork-Id: 11947 Received: (qmail 65019 invoked by alias); 29 Apr 2016 01:39:50 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 64997 invoked by uid 89); 29 Apr 2016 01:39:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.8 required=5.0 tests=BAYES_05, FREEMAIL_FROM, RCVD_IN_BL_SPAMCOP_NET, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=no version=3.3.2 spammy=34, 7, 887, __linux__, 88, 7 X-HELO: mail-yw0-f171.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version; bh=owgFqakcgFQjJzclbUfQl7r2JBJH9ElUdpbSti1UqyM=; b=MnTzdFd9+ql89xrPJZG9hTgv0g9yJF53LT1HRI4p0Z8KLJDFc9m8G7LWDN7XiqYFrT mRsq0p8IGqd70cJkIUm2S2l0UhE/PIpJdUo/jwESizmSJNcTjswKSx7k34NJnU38Md5C zSHsdQvgtrxlSCwTCCZocyg5qSRp3Xr9CZXN6sy8WFbA+6gyEBct1cKdD7F5D/ytmeLL HyFRji+ea4MugeHuK0tzNYaYPjNQitlZeQpnblVDJoBpcr/F1XYSFc6hVYniSAU101en 6PmYX58nc7WaovR1G3U4h/AXPalRCLtlILyNO8twT5ZpwufzR+lT5egF/nax0KqCJXdb qa/Q== X-Gm-Message-State: AOPr4FUDKB/oi5W16ZCw7HQknsAzBKlmdNzvR/t1TCjz2l6JfgAYiw4hP+vp1SwQRHEbeg== X-Received: by 10.37.230.149 with SMTP id d143mr9172355ybh.128.1461893976827; Thu, 28 Apr 2016 18:39:36 -0700 (PDT) To: GNU C Library From: Zack Weinberg Subject: [PATCH] Minimize sysdeps code involved in defining major/minor/makedev. Message-ID: <5722BB56.3010700@panix.com> Date: Thu, 28 Apr 2016 21:39:34 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Icedove/38.7.2 MIME-Version: 1.0 In my previous round of patches to deprecate sys/types.h including sys/sysmacros.h, there was some confusion about which parts were new and which parts were moving code around, so I decided to separate out the moving code around. I was going to post this when I'd revised the whole thing, but Roland's request for more generally useful __has_extension means I have to think about that some more, and this bit is done, independently applicable, hopefully uncontroversial, and much bigger than everything else. So here it is as its own thing. Presently sys/sysmacros.h is entirely defined in sysdeps. If I left that alone, the deprecation logic would have to be written twice (in generic/ and unix/sysv/linux/). To avoid that, I hoist all but the unavoidably system-dependent logic to misc/, leaving a bits/ header behind. The generic implementation was done entirely with macros, whereas the 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. New ports henceforth need only provide bits/sysmacros.h defining macros __dev_makedev, __dev_major, and __dev_minor, and it's OK if these macros evaluate their arguments more than once. While I was at it, I added a basic round-trip test for these functions. Questions for the peanut gallery: 1) There seem to be generic "bits" headers in a top-level directory named bits/, as well as sysdeps/generic/bits/ which is where I would expect them to be. What's up with that? 2) On all supported platforms except Hurd, dev_t is either __UQUAD_TYPE or __U64_TYPE; these are both 64-bit unsigned integer types (I don't fully understand the distinction; the comments in bits/types.h are inconsistent with the code). The generic sysmacros.h, however, only supports what I'll call the "traditional" dev_t encoding, with 8 bits each for major and minor number. Does it maybe make sense to promote the extended dev_t encoding glibc uses on all Linux-based configurations, which supports 32-bit major and minor numbers, to generic? Hurd would of course need an override, but that's not difficult provided someone tells me what Hurd's dev_t encoding actually is (also, it's probably wrong as is). (Note that Linux-the-kernel honors only 12-bit major and 20-bit minor numbers; glibc's encoding is an upward compatible extension of *that*.) ChangeLog: * misc/sys/sysmacros.h: New file with generic inline-function-based implementation of major, minor, and makedev, derived from the old sysdeps/unix/sysv/linux/sys/sysmacros.h. * include/sys/sysmacros.h: New wrapper. * sysdeps/generic/sys/sysmacros.h: Move ... * sysdeps/generic/bits/sysmacros.h: ... here; only define __dev_makedev, __dev_major, __dev_minor. * sysdeps/unix/sysv/linux/sys/sysmacros.h: Move ... * sysdeps/unix/sysv/linux/bits/sysmacros.h: ... here; only define __dev_makedev, __dev_major, __dev_minor. * sysdeps/unix/sysv/linux/makedev.c: Move ... * misc/makedev.c: ... here; make generic. * misc/tst-makedev.c: New test. * misc/Makefile (headers): Add sys/sysmacros.h, bits/sysmacros.h. (routines): Add makedev. (tests): Add tst-makedev. * misc/Versions [GLIBC_2.24]: 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.24, 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/x86_64/64/libc.abilist * sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Add GLIBC_2.24. diff --git a/include/sys/sysmacros.h b/include/sys/sysmacros.h new file mode 100644 index 0000000..87813c5 --- /dev/null +++ b/include/sys/sysmacros.h @@ -0,0 +1 @@ +#include diff --git a/misc/Makefile b/misc/Makefile index d7bbc85..7a45d2c 100644 --- a/misc/Makefile +++ b/misc/Makefile @@ -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 @@ -77,7 +78,8 @@ 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-mntent-blank-corrupt tst-mntent-blank-passno bug18240 \ + tst-makedev ifeq ($(run-built-tests),yes) tests-special += $(objpfx)tst-error1-mem.out endif diff --git a/misc/Versions b/misc/Versions index 671f487..afa22bd 100644 --- a/misc/Versions +++ b/misc/Versions @@ -152,6 +152,9 @@ libc { GLIBC_2.23 { # SHLIB_COMPAT(GLIBC_2_0, GLIBC_2_23) used in regexp.c } + GLIBC_2.24 { + gnu_dev_major; gnu_dev_minor; gnu_dev_makedev; + } GLIBC_PRIVATE { __madvise; __mktemp; diff --git a/misc/makedev.c b/misc/makedev.c new file mode 100644 index 0000000..6ade663 --- /dev/null +++ b/misc/makedev.c @@ -0,0 +1,40 @@ +/* Definitions of functions to access `dev_t' values. + Copyright (C) 2003-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 + . */ + +#include +#undef __USE_EXTERN_INLINES +#include +#include + +unsigned int +gnu_dev_major (dev_t dev) +{ + return __dev_major (dev); +} + +unsigned int +gnu_dev_minor (dev_t dev) +{ + return __dev_minor (dev); +} + +dev_t +gnu_dev_makedev (unsigned int major, unsigned int minor) +{ + return __dev_makedev (major, minor); +} diff --git a/misc/sys/sysmacros.h b/misc/sys/sysmacros.h new file mode 100644 index 0000000..052d8ff --- /dev/null +++ b/misc/sys/sysmacros.h @@ -0,0 +1,56 @@ +/* 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 + . */ + +#ifndef _SYS_SYSMACROS_H +#define _SYS_SYSMACROS_H 1 + +#include +#include +#include + +#define __SYSMACROS_DECL(rtype, name, proto) \ + extern rtype gnu_dev_##name proto __THROW __attribute_const__; + +#ifdef __USE_EXTERN_INLINES +# define __SYSMACROS_IMPL(rtype, name, proto, expr) \ + __SYSMACROS_DECL (rtype, name, proto) \ + __extension__ __extern_inline __attribute_const__ rtype \ + __NTH (gnu_dev_##name proto) { return expr; } +#else +# define __SYSMACROS_IMPL(rtype, name, proto, expr) \ + __SYSMACROS_DECL (rtype, name, proto) +#endif + +__BEGIN_DECLS + +__SYSMACROS_IMPL (unsigned int, major, (__dev_t __dev), __dev_major (__dev)) +__SYSMACROS_IMPL (unsigned int, minor, (__dev_t __dev), __dev_minor (__dev)) +__SYSMACROS_IMPL (__dev_t, makedev, + (unsigned int __major, unsigned int __minor), + __dev_makedev (__major, __minor)) + +__END_DECLS + +#undef __SYSMACROS_IMPL +#undef __SYSMACROS_DECL + +#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 index 0000000..8311c55 --- /dev/null +++ b/misc/tst-makedev.c @@ -0,0 +1,87 @@ +#include +#include +#include + +/* 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: %04lx != %04lx (maj %02x min %02x)\n", + d2, 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: %02x != %02x, %02x != %02x (dev %04lx)\n", + maj2, maj1, min2, min1, d); + return 1; + } + else if (maj1 != maj2) + { + printf ("FAIL: %02x != %02x, %02x == %02x (dev %04lx)\n", + maj2, maj1, min2, min1, d); + return 1; + } + else if (min1 != min2) + { + printf ("FAIL: %02x == %02x, %02x != %02x (dev %04lx)\n", + maj2, maj1, min2, min1, 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); + +#ifdef __linux__ + /* Test Linux's expanded range (32-bit dev_t, 12-bit major, 20-bit minor). + 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 <= 31; a++) + do_test_split_combine (((dev_t) 0x03) << a); + + for (a = 0; a < 11; a++) + for (b = 0; b <= 19; b++) + do_test_combine_split (0x03u << a, 0x03u << b); + } +#endif + + return status; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/posix/Makefile b/posix/Makefile index 5b0e298..3a7719e 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -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 \ diff --git a/sysdeps/generic/bits/sysmacros.h b/sysdeps/generic/bits/sysmacros.h new file mode 100644 index 0000000..5562bd4 --- /dev/null +++ b/sysdeps/generic/bits/sysmacros.h @@ -0,0 +1,30 @@ +/* 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 + . */ + +#ifndef _BITS_SYSMACROS_H +#define _BITS_SYSMACROS_H 1 + +#ifndef _SYS_SYSMACROS_H +# error "Never include directly; use instead." +#endif + +#define __dev_major(dev) ((dev) >> 8) & 0xff)) +#define __dev_minor(dev) ((dev) & 0xff)) +#define __dev_makedev(major, minor) (((major) << 8) | (minor & 0xff)) + +#endif /* bits/sysmacros.h */ diff --git a/sysdeps/generic/sys/sysmacros.h b/sysdeps/generic/sys/sysmacros.h deleted file mode 100644 index 4cc5961..0000000 --- a/sysdeps/generic/sys/sysmacros.h +++ /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 - . */ - -#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 */ diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 9999600..bc26db3 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -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 diff --git a/sysdeps/unix/sysv/linux/bits/sysmacros.h b/sysdeps/unix/sysv/linux/bits/sysmacros.h new file mode 100644 index 0000000..97da132 --- /dev/null +++ b/sysdeps/unix/sysv/linux/bits/sysmacros.h @@ -0,0 +1,44 @@ +/* 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 + . */ + +#ifndef _BITS_SYSMACROS_H +#define _BITS_SYSMACROS_H 1 + +#ifndef _SYS_SYSMACROS_H +# error "Never include directly; use instead." +#endif + +/* dev_t in glibc is a 64-bit quantity, encoded as MMMM Mmmm mmmM MMmm, + where M is a hex digit of the major number and m is a hex digit of + the minor number. Linux-the-kernel only uses the low 32 bits. */ + +#define __dev_major(dev) \ + ( (((dev) & (__dev_t) 0x00000000000fff00u) >> 8) \ + | (((dev) & (__dev_t) 0xfffff00000000000u) >> 32)) + +#define __dev_minor(dev) \ + ( (((dev) & (__dev_t) 0x00000000000000ffu) >> 0) \ + | (((dev) & (__dev_t) 0x00000ffffff00000u) >> 12)) + +#define __dev_makedev(major, minor) \ + ( (((__dev_t) ((minor) & 0x000000ffu)) << 0) \ + | (((__dev_t) ((minor) & 0xffffff00u)) << 12) \ + | (((__dev_t) ((major) & 0x00000fffu)) << 8) \ + | (((__dev_t) ((major) & 0xfffff000u)) << 32)) + +#endif /* bits/sysmacros.h */ diff --git a/sysdeps/unix/sysv/linux/makedev.c b/sysdeps/unix/sysv/linux/makedev.c deleted file mode 100644 index 68c18ca..0000000 --- a/sysdeps/unix/sysv/linux/makedev.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Definitions of functions to access `dev_t' values. - Copyright (C) 2003-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 - . */ - -#include -#include - -unsigned int -gnu_dev_major (unsigned long long int dev) -{ - return ((dev >> 8) & 0xfff) | ((unsigned int) (dev >> 32) & ~0xfff); -} - -unsigned int -gnu_dev_minor (unsigned long long int dev) -{ - return (dev & 0xff) | ((unsigned int) (dev >> 12) & ~0xff); -} - -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)); -} diff --git a/sysdeps/unix/sysv/linux/sys/sysmacros.h b/sysdeps/unix/sysv/linux/sys/sysmacros.h deleted file mode 100644 index 4c4a697..0000000 --- a/sysdeps/unix/sysv/linux/sys/sysmacros.h +++ /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 - . */ - -#ifndef _SYS_SYSMACROS_H -#define _SYS_SYSMACROS_H 1 - -#include - -__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 */ diff --git a/sysdeps/arm/nacl/libc.abilist b/sysdeps/arm/nacl/libc.abilist index 0560510..3ac17ae 100644 --- a/sysdeps/arm/nacl/libc.abilist +++ b/sysdeps/arm/nacl/libc.abilist @@ -1840,3 +1840,7 @@ 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 gnu_dev_major F +GLIBC_2.24 gnu_dev_makedev F +GLIBC_2.24 gnu_dev_minor F diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist index 5799239..7c2c757 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist @@ -2087,3 +2087,4 @@ 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 diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist index 0fa4ee9..c93737c 100644 --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist @@ -1998,6 +1998,7 @@ 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.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/arm/libc.abilist b/sysdeps/unix/sysv/linux/arm/libc.abilist index db9fa35..faae0de 100644 --- a/sysdeps/unix/sysv/linux/arm/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/libc.abilist @@ -88,6 +88,7 @@ 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.4 GLIBC_2.4 A GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist index 1d30644..3389ede 100644 --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -1852,6 +1852,7 @@ 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.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/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist index 8f3502d..40a9ff1 100644 --- a/sysdeps/unix/sysv/linux/i386/libc.abilist +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -2010,6 +2010,7 @@ 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.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/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist index 921ec55..8794ae7 100644 --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist @@ -1874,6 +1874,7 @@ 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.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/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist index 019095b..5a4ae8c 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist @@ -89,6 +89,7 @@ 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.4 GLIBC_2.4 A GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0x98 diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist index a999a48..5b7b67a 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -1966,6 +1966,7 @@ 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.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/microblaze/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/libc.abilist index 0a08bba..25f509f 100644 --- a/sysdeps/unix/sysv/linux/microblaze/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/libc.abilist @@ -2087,3 +2087,4 @@ 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 diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist index 2ab9e94..b8eaf1d 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -1941,6 +1941,7 @@ 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.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/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist index b9b4b74..f126bc3 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist @@ -1939,6 +1939,7 @@ 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.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/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist index 14e1236..8d1192f 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -1937,6 +1937,7 @@ 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.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/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist index 53e0c9a..b948fb9 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist @@ -1932,6 +1932,7 @@ 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.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/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist index dff1ee9..ff5d6b8 100644 --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist @@ -2128,3 +2128,4 @@ 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 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist index 6861846..0ee8943 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@ -1970,6 +1970,7 @@ 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.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/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist index fd611aa..8fd0b59 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist @@ -1975,6 +1975,7 @@ 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.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/powerpc/powerpc64/libc-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist index a97bd43..31e3184 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist @@ -2175,3 +2175,4 @@ 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 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist index 00772cb..f10ecb1 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist @@ -89,6 +89,7 @@ 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.3 GLIBC_2.3 A GLIBC_2.3 _Exit F GLIBC_2.3 _IO_2_1_stderr_ D 0xe0 diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index 05cb85e..6ff891f 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -1970,6 +1970,7 @@ 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.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/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist index 1af185f..9e22c2a 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist @@ -1871,6 +1871,7 @@ 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.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/sh/libc.abilist b/sysdeps/unix/sysv/linux/sh/libc.abilist index e128692..64d8988 100644 --- a/sysdeps/unix/sysv/linux/sh/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/libc.abilist @@ -1856,6 +1856,7 @@ 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.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/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index eb14113..2442ac3 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -1962,6 +1962,7 @@ 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.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/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist index 91b97ef..2edf17e 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist @@ -1900,6 +1900,7 @@ 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.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/tile/tilegx/tilegx32/libc.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist index ffcc4a0..6174283 100644 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist +++ b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist @@ -2094,3 +2094,4 @@ 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 diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist index a66e8ec..bba6d7e 100644 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist +++ b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist @@ -2094,3 +2094,4 @@ 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 diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist index c6e3cd4..d55d4f1 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist @@ -1851,6 +1851,7 @@ 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.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/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist index 04dc8e4..dd5274a 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist @@ -2094,3 +2094,4 @@ 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