public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 0/4] Revised^2: deprecate major/minor/makedev in sys/types.h
@ 2016-05-13 13:26 Zack Weinberg
  2016-05-13 13:26 ` [PATCH 4/4] Deprecate inclusion of <sys/sysmacros.h> by <sys/types.h> Zack Weinberg
                   ` (4 more replies)
  0 siblings, 5 replies; 17+ messages in thread
From: Zack Weinberg @ 2016-05-13 13:26 UTC (permalink / raw)
  To: libc-alpha

I'm about to go out of town for two weeks, so here is the current state
of the patches to deprecate exposure of major/minor/makedev by sys/types.h.

I believe this addresses all of the review comments to date, *except*
Roland's request for a generic __glibc_has_feature mechanism.  That is
going to take more thought and, given Carlos wanted this patch in 2.24,
which I think is freezing at the end of June(?), I don't think it makes
sense to delay this for that.

Moving sysdeps/generic/bits/hwcap.h is unconnected to the primary goal of
this patch series; it just happens to be the only file still in
sysdeps/generic/bits and, AFAICT, it should never have been there in the
first place (see discussion elsewhere).

zw

Zack Weinberg (4):
  Move sysdeps/generic/bits/hwcap.h to top-level bits/.
  Minimize sysdeps code involved in defining major/minor/makedev.
  Add utility macros for clang detection, and deprecation with messages.
  Deprecate inclusion of <sys/sysmacros.h> by <sys/types.h>

 NEWS                                               |  15 +++
 bits/hwcap.h                                       |  23 +++++
 bits/sysmacros.h                                   |  60 ++++++++++++
 include/features.h                                 |  19 +++-
 include/sys/sysmacros.h                            |   1 +
 misc/Makefile                                      |   8 +-
 misc/Versions                                      |   3 +
 misc/makedev.c                                     |  40 ++++++++
 misc/sys/cdefs.h                                   |  22 ++++-
 misc/sys/sysmacros.h                               |  98 +++++++++++++++++++
 misc/tst-makedev.c                                 | 104 +++++++++++++++++++++
 posix/Makefile                                     |   2 +-
 posix/sys/types.h                                  |   8 +-
 sysdeps/arm/nacl/libc.abilist                      |   4 +
 sysdeps/generic/bits/hwcap.h                       |  23 -----
 sysdeps/generic/sys/sysmacros.h                    |  30 ------
 sysdeps/unix/sysv/linux/Makefile                   |   2 +-
 sysdeps/unix/sysv/linux/aarch64/libc.abilist       |   1 +
 sysdeps/unix/sysv/linux/alpha/libc.abilist         |   1 +
 sysdeps/unix/sysv/linux/arm/libc.abilist           |   1 +
 sysdeps/unix/sysv/linux/hppa/libc.abilist          |   1 +
 sysdeps/unix/sysv/linux/i386/libc.abilist          |   1 +
 sysdeps/unix/sysv/linux/ia64/libc.abilist          |   1 +
 sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist |   1 +
 sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist   |   1 +
 sysdeps/unix/sysv/linux/makedev.c                  |  40 --------
 sysdeps/unix/sysv/linux/microblaze/libc.abilist    |   1 +
 .../unix/sysv/linux/mips/mips32/fpu/libc.abilist   |   1 +
 .../unix/sysv/linux/mips/mips32/nofpu/libc.abilist |   1 +
 .../unix/sysv/linux/mips/mips64/n32/libc.abilist   |   1 +
 .../unix/sysv/linux/mips/mips64/n64/libc.abilist   |   1 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist         |   1 +
 .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist  |   1 +
 .../linux/powerpc/powerpc32/nofpu/libc.abilist     |   1 +
 .../sysv/linux/powerpc/powerpc64/libc-le.abilist   |   1 +
 .../unix/sysv/linux/powerpc/powerpc64/libc.abilist |   1 +
 sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist  |   1 +
 sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist  |   1 +
 sysdeps/unix/sysv/linux/sh/libc.abilist            |   1 +
 sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist |   1 +
 sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist |   1 +
 sysdeps/unix/sysv/linux/sys/sysmacros.h            |  65 -------------
 .../sysv/linux/tile/tilegx/tilegx32/libc.abilist   |   1 +
 .../sysv/linux/tile/tilegx/tilegx64/libc.abilist   |   1 +
 sysdeps/unix/sysv/linux/x86_64/64/libc.abilist     |   1 +
 sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist    |   1 +
 46 files changed, 425 insertions(+), 169 deletions(-)
 create mode 100644 bits/hwcap.h
 create mode 100644 bits/sysmacros.h
 create mode 100644 include/sys/sysmacros.h
 create mode 100644 misc/makedev.c
 create mode 100644 misc/sys/sysmacros.h
 create mode 100644 misc/tst-makedev.c
 delete mode 100644 sysdeps/generic/bits/hwcap.h
 delete mode 100644 sysdeps/generic/sys/sysmacros.h
 delete mode 100644 sysdeps/unix/sysv/linux/makedev.c
 delete mode 100644 sysdeps/unix/sysv/linux/sys/sysmacros.h

-- 
2.8.1

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

* [PATCH 3/4] Add utility macros for clang detection, and deprecation with messages.
  2016-05-13 13:26 [PATCH 0/4] Revised^2: deprecate major/minor/makedev in sys/types.h Zack Weinberg
  2016-05-13 13:26 ` [PATCH 4/4] Deprecate inclusion of <sys/sysmacros.h> by <sys/types.h> Zack Weinberg
  2016-05-13 13:26 ` [PATCH 1/4] Move sysdeps/generic/bits/hwcap.h to top-level bits/ Zack Weinberg
@ 2016-05-13 13:26 ` Zack Weinberg
  2016-06-22 11:43   ` Zack Weinberg
  2016-05-13 13:26 ` [PATCH 2/4] Minimize sysdeps code involved in defining major/minor/makedev Zack Weinberg
  2016-07-08 17:03 ` [PATCH 0/4] Revised^2: deprecate major/minor/makedev in sys/types.h Adhemerval Zanella
  4 siblings, 1 reply; 17+ messages in thread
From: Zack Weinberg @ 2016-05-13 13:26 UTC (permalink / raw)
  To: libc-alpha

Add three new macros to features.h and sys/cdefs.h:

 * __glibc_clang_prereq: just like __GNUC_PREREQ, but for clang.
 * __glibc_clang_has_extension: wraps clang's intrinsic __has_extension.
   Writing "#if defined __clang__ && __has_extension (...)" doesn't work,
   because compilers other than clang will object to the unknown macro
   __has_extension even though they don't need to evaluate it.
   Instead, write "#if __glibc_clang_has_extension (...)".

 * __attribute_deprecated_msg__(msg): like __attribute_deprecated__, but
   if possible, prints a message.

The first two are used to define the third.  The third will be used
in patch #4.

ChangeLog:
	* include/features.h (__glibc_clang_prereq): New macro.
	* misc/sys/cdefs.h (__glibc_clang_has_extension)
	(__attribute_deprecated_msg__): New macros.
---
 include/features.h | 19 +++++++++++++++----
 misc/sys/cdefs.h   | 22 +++++++++++++++++++++-
 2 files changed, 36 insertions(+), 5 deletions(-)

diff --git a/include/features.h b/include/features.h
index 9514d35..0374022 100644
--- a/include/features.h
+++ b/include/features.h
@@ -125,13 +125,13 @@
 # define __KERNEL_STRICT_NAMES
 #endif
 
-/* Convenience macros to test the versions of glibc and gcc.
-   Use them like this:
+/* Convenience macro to test the version of gcc.
+   Use like this:
    #if __GNUC_PREREQ (2,8)
    ... code requiring gcc 2.8 or later ...
    #endif
-   Note - they won't work for gcc1 or glibc1, since the _MINOR macros
-   were not defined then.  */
+   Note: only works for GCC 2.0 and later, because __GNUC_MINOR__ was
+   added in 2.0.  */
 #if defined __GNUC__ && defined __GNUC_MINOR__
 # define __GNUC_PREREQ(maj, min) \
 	((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
@@ -139,6 +139,17 @@
 # define __GNUC_PREREQ(maj, min) 0
 #endif
 
+/* Similarly for clang.  Features added to GCC after version 4.2 may
+   or may not also be available in clang, and their definitions of
+   __GNUC(_MINOR)__ are fixed at 4 and 2 respectively.  Not all such
+   features can be queried via __has_extension/__has_feature.  */
+#if defined __clang_major__ && defined __clang_minor__
+# define __glibc_clang_prereq(maj, min) \
+  ((__clang_major__ << 16) + __clang_minor__ >= ((maj) << 16) + (min))
+#else
+# define __glibc_clang_prereq(maj, min) 0
+#endif
+
 /* _BSD_SOURCE and _SVID_SOURCE are deprecated aliases for
    _DEFAULT_SOURCE.  If _DEFAULT_SOURCE is present we do not
    issue a warning; the expectation is that the source is being
diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
index 7fd4154..e193df8 100644
--- a/misc/sys/cdefs.h
+++ b/misc/sys/cdefs.h
@@ -77,6 +77,15 @@
 
 #endif	/* GCC.  */
 
+/* Compilers that are not clang may object to
+       #if defined __clang__ && __has_extension(...)
+   even though they do not need to evaluate the right-hand side of the &&.  */
+#if defined __clang__ && defined __has_extension
+# define __glibc_clang_has_extension(ext) __has_extension (ext)
+#else
+# define __glibc_clang_has_extension(ext) 0
+#endif
+
 /* These two macros are not used in glibc anymore.  They are kept here
    only because some other projects expect the macros to be defined.  */
 #define __P(args)	args
@@ -249,13 +258,24 @@
 # define __attribute_noinline__ /* Ignore */
 #endif
 
-/* gcc allows marking deprecated functions.  */
+/* Since version 3.2, gcc allows marking deprecated functions.  */
 #if __GNUC_PREREQ (3,2)
 # define __attribute_deprecated__ __attribute__ ((__deprecated__))
 #else
 # define __attribute_deprecated__ /* Ignore */
 #endif
 
+/* Since version 4.5, gcc also allows one to specify the message printed
+   when a deprecated function is used.  clang claims to be gcc 4.2, but
+   may also support this feature.  */
+#if __GNUC_PREREQ (4,5) || \
+    __glibc_clang_has_extension (__attribute_deprecated_with_message__)
+# define __attribute_deprecated_msg__(msg) \
+	 __attribute__ ((__deprecated__ (msg)))
+#else
+# define __attribute_deprecated_msg__(msg) __attribute_deprecated__
+#endif
+
 /* At some point during the gcc 2.8 development the `format_arg' attribute
    for functions was introduced.  We don't want to use it unconditionally
    (although this would be possible) since it generates warnings.
-- 
2.8.1

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

* [PATCH 1/4] Move sysdeps/generic/bits/hwcap.h to top-level bits/.
  2016-05-13 13:26 [PATCH 0/4] Revised^2: deprecate major/minor/makedev in sys/types.h Zack Weinberg
  2016-05-13 13:26 ` [PATCH 4/4] Deprecate inclusion of <sys/sysmacros.h> by <sys/types.h> Zack Weinberg
@ 2016-05-13 13:26 ` Zack Weinberg
  2016-05-13 13:35   ` H.J. Lu
  2016-05-13 13:26 ` [PATCH 3/4] Add utility macros for clang detection, and deprecation with messages Zack Weinberg
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 17+ messages in thread
From: Zack Weinberg @ 2016-05-13 13:26 UTC (permalink / raw)
  To: libc-alpha

This file was added to sysdeps/generic/bits in 2012.  This appears to have
been an oversight, as the entire sysdeps/generic/bits directory was moved to
the top level in 2005.  Accordingly the generic bits/hwcap.h belongs there
too.

ChangeLog:
	* sysdeps/generic/bits/hwcap.h: Move to top-level bits/ directory.
---
 bits/hwcap.h                 | 23 +++++++++++++++++++++++
 sysdeps/generic/bits/hwcap.h | 23 -----------------------
 2 files changed, 23 insertions(+), 23 deletions(-)
 create mode 100644 bits/hwcap.h
 delete mode 100644 sysdeps/generic/bits/hwcap.h

diff --git a/bits/hwcap.h b/bits/hwcap.h
new file mode 100644
index 0000000..39839ff
--- /dev/null
+++ b/bits/hwcap.h
@@ -0,0 +1,23 @@
+/* Defines for bits in AT_HWCAP.
+   Copyright (C) 2012-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_AUXV_H
+# error "Never include <bits/hwcap.h> directly; use <sys/auxv.h> instead."
+#endif
+
+/* No bits defined for this architecture.  */
diff --git a/sysdeps/generic/bits/hwcap.h b/sysdeps/generic/bits/hwcap.h
deleted file mode 100644
index 39839ff..0000000
--- a/sysdeps/generic/bits/hwcap.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Defines for bits in AT_HWCAP.
-   Copyright (C) 2012-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_AUXV_H
-# error "Never include <bits/hwcap.h> directly; use <sys/auxv.h> instead."
-#endif
-
-/* No bits defined for this architecture.  */
-- 
2.8.1

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

* [PATCH 2/4] Minimize sysdeps code involved in defining major/minor/makedev.
  2016-05-13 13:26 [PATCH 0/4] Revised^2: deprecate major/minor/makedev in sys/types.h Zack Weinberg
                   ` (2 preceding siblings ...)
  2016-05-13 13:26 ` [PATCH 3/4] Add utility macros for clang detection, and deprecation with messages Zack Weinberg
@ 2016-05-13 13:26 ` Zack Weinberg
  2016-06-22 11:42   ` Zack Weinberg
  2016-06-22 15:48   ` Mike Frysinger
  2016-07-08 17:03 ` [PATCH 0/4] Revised^2: deprecate major/minor/makedev in sys/types.h Adhemerval Zanella
  4 siblings, 2 replies; 17+ messages in thread
From: Zack Weinberg @ 2016-05-13 13:26 UTC (permalink / raw)
  To: libc-alpha

Presently sys/sysmacros.h is entirely defined in sysdeps.  This would
mean that the deprecation logic coming up in patch #4 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 accommodated 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.

New ports henceforth need only provide bits/sysmacros.h defining macros
__makedev_body, __major_body, and __minor_body.

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

ChangeLog:

	* misc/sys/sysmacros.h: New file with generic inline-function-based
	implementation of major, minor, makedev, derived from the old
	sysdeps/unix/sysv/linux/sys/sysmacros.h.
	* include/sys/sysmacros.h: New wrapper.

	* sysdeps/unix/sysv/linux/sys/sysmacros.h: Move ...
	* bits/sysmacros.h: ... here; only define __makedev_body,
	__major_body, __minor_body.
	* sysdeps/generic/sys/sysmacros.h: Deleted.

	* 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.
---
 bits/sysmacros.h                                   |  60 ++++++++++++
 include/sys/sysmacros.h                            |   1 +
 misc/Makefile                                      |   8 +-
 misc/Versions                                      |   3 +
 misc/makedev.c                                     |  40 ++++++++
 misc/sys/sysmacros.h                               |  56 +++++++++++
 misc/tst-makedev.c                                 | 104 +++++++++++++++++++++
 posix/Makefile                                     |   2 +-
 sysdeps/arm/nacl/libc.abilist                      |   4 +
 sysdeps/generic/sys/sysmacros.h                    |  30 ------
 sysdeps/unix/sysv/linux/Makefile                   |   2 +-
 sysdeps/unix/sysv/linux/aarch64/libc.abilist       |   1 +
 sysdeps/unix/sysv/linux/alpha/libc.abilist         |   1 +
 sysdeps/unix/sysv/linux/arm/libc.abilist           |   1 +
 sysdeps/unix/sysv/linux/hppa/libc.abilist          |   1 +
 sysdeps/unix/sysv/linux/i386/libc.abilist          |   1 +
 sysdeps/unix/sysv/linux/ia64/libc.abilist          |   1 +
 sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist |   1 +
 sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist   |   1 +
 sysdeps/unix/sysv/linux/makedev.c                  |  40 --------
 sysdeps/unix/sysv/linux/microblaze/libc.abilist    |   1 +
 .../unix/sysv/linux/mips/mips32/fpu/libc.abilist   |   1 +
 .../unix/sysv/linux/mips/mips32/nofpu/libc.abilist |   1 +
 .../unix/sysv/linux/mips/mips64/n32/libc.abilist   |   1 +
 .../unix/sysv/linux/mips/mips64/n64/libc.abilist   |   1 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist         |   1 +
 .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist  |   1 +
 .../linux/powerpc/powerpc32/nofpu/libc.abilist     |   1 +
 .../sysv/linux/powerpc/powerpc64/libc-le.abilist   |   1 +
 .../unix/sysv/linux/powerpc/powerpc64/libc.abilist |   1 +
 sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist  |   1 +
 sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist  |   1 +
 sysdeps/unix/sysv/linux/sh/libc.abilist            |   1 +
 sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist |   1 +
 sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist |   1 +
 sysdeps/unix/sysv/linux/sys/sysmacros.h            |  65 -------------
 .../sysv/linux/tile/tilegx/tilegx32/libc.abilist   |   1 +
 .../sysv/linux/tile/tilegx/tilegx64/libc.abilist   |   1 +
 sysdeps/unix/sysv/linux/x86_64/64/libc.abilist     |   1 +
 sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist    |   1 +
 40 files changed, 302 insertions(+), 140 deletions(-)
 create mode 100644 bits/sysmacros.h
 create mode 100644 include/sys/sysmacros.h
 create mode 100644 misc/makedev.c
 create mode 100644 misc/sys/sysmacros.h
 create mode 100644 misc/tst-makedev.c
 delete mode 100644 sysdeps/generic/sys/sysmacros.h
 delete mode 100644 sysdeps/unix/sysv/linux/makedev.c
 delete mode 100644 sysdeps/unix/sysv/linux/sys/sysmacros.h

diff --git a/bits/sysmacros.h b/bits/sysmacros.h
new file mode 100644
index 0000000..544a9cf
--- /dev/null
+++ b/bits/sysmacros.h
@@ -0,0 +1,60 @@
+/* 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.  The macros __major_body,
+   __minor_body, and __makedev_body are used as the bodies of inline
+   functions, and their arguments are guaranteed to be the names of
+   parameter variables, so it is safe to use them multiple times and
+   unnecessary to parenthesize them.  See sys/sysmacros.h for details.  */
+
+#define __major_body(__dev_)                                    \
+  unsigned int __major_;                                        \
+  __major_  = ((__dev_ & (__dev_t) 0x00000000000fff00u) >>  8); \
+  __major_ |= ((__dev_ & (__dev_t) 0xfffff00000000000u) >> 32); \
+  return __major_;
+
+#define __minor_body(__dev_)                                    \
+  unsigned int __minor_;                                        \
+  __minor_  = ((__dev_ & (__dev_t) 0x00000000000000ffu) >>  0); \
+  __minor_ |= ((__dev_ & (__dev_t) 0x00000ffffff00000u) >> 12); \
+  return __minor_;
+
+#define __makedev_body(__major_, __minor_)                      \
+  __dev_t __dev_;                                               \
+  __dev_  = (((__dev_t) (__minor_ & 0x000000ffu)) <<  0);       \
+  __dev_ |= (((__dev_t) (__minor_ & 0xffffff00u)) << 12);       \
+  __dev_ |= (((__dev_t) (__major_ & 0x00000fffu)) <<  8);       \
+  __dev_ |= (((__dev_t) (__major_ & 0xfffff000u)) << 32);       \
+  return __dev_;
+
+#endif /* bits/sysmacros.h */
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 <misc/sys/sysmacros.h>
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..ab5a977
--- /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
+   <http://www.gnu.org/licenses/>.  */
+
+#include <features.h>
+#undef __USE_EXTERN_INLINES
+#include <sys/sysmacros.h>
+#include <sys/types.h>
+
+unsigned int
+gnu_dev_major (dev_t dev)
+{
+  __major_body (dev);
+}
+
+unsigned int
+gnu_dev_minor (dev_t dev)
+{
+  __minor_body (dev);
+}
+
+dev_t
+gnu_dev_makedev (unsigned int major, unsigned int minor)
+{
+  __makedev_body (major, minor);
+}
diff --git a/misc/sys/sysmacros.h b/misc/sys/sysmacros.h
new file mode 100644
index 0000000..edc6bac
--- /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
+   <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(rtype, name, proto)                            \
+  extern rtype gnu_dev_##name proto __THROW __attribute_const__;
+
+#ifdef __USE_EXTERN_INLINES
+# define __SYSMACROS_IMPL(rtype, name, proto, body)             \
+  __SYSMACROS_DECL (rtype, name, proto)                         \
+  __extension__ __extern_inline __attribute_const__ rtype       \
+  __NTH (gnu_dev_##name proto) { body }
+#else
+# define __SYSMACROS_IMPL(rtype, name, proto, expr)    \
+  __SYSMACROS_DECL (rtype, name, proto)
+#endif
+
+__BEGIN_DECLS
+
+__SYSMACROS_IMPL (unsigned int, major, (__dev_t __dev), __major_body (__dev))
+__SYSMACROS_IMPL (unsigned int, minor, (__dev_t __dev), __minor_body (__dev))
+__SYSMACROS_IMPL (__dev_t, makedev,
+		  (unsigned int __major, unsigned int __minor),
+		  __makedev_body (__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..b330b5a
--- /dev/null
+++ b/misc/tst-makedev.c
@@ -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"
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/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/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
-   <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 */
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 9b4e2e1..0944fab 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/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/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
-   <http://www.gnu.org/licenses/>.  */
-
-#include <endian.h>
-#include <sys/sysmacros.h>
-
-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/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/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
-   <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 */
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
-- 
2.8.1

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

* [PATCH 4/4] Deprecate inclusion of <sys/sysmacros.h> by <sys/types.h>
  2016-05-13 13:26 [PATCH 0/4] Revised^2: deprecate major/minor/makedev in sys/types.h Zack Weinberg
@ 2016-05-13 13:26 ` Zack Weinberg
  2016-06-22 11:42   ` Zack Weinberg
  2016-05-13 13:26 ` [PATCH 1/4] Move sysdeps/generic/bits/hwcap.h to top-level bits/ Zack Weinberg
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 17+ messages in thread
From: Zack Weinberg @ 2016-05-13 13:26 UTC (permalink / raw)
  To: libc-alpha

The macros defined by <sys/sysmacros.h> are not part of POSIX nor XSI,
and their names have been found frequently to collide with user code;
see for instance glibc bug 19239 and Red Hat bug 130601.  <stdlib.h>
includes <sys/types.h> under _GNU_SOURCE, and C++ code presently cannot
avoid being compiled under _GNU_SOURCE, exacerbating the problem.

ChangeLog:
	* NEWS: Inclusion of <sys/sysmacros.h> by <sys/types.h> is deprecated.
	* misc/sys/sysmacros.h: If __SYSMACROS_DEPRECATED_INCLUSION is defined,
	define major, minor, and makedev to issue deprecation warnings on use.
	If __SYSMACROS_DEPRECATED_INCLUSION is *not* defined, suppress
	previously-activated deprecation warnings for these macros and prevent
	subsequent inclusions of this header from having any effect.
	* posix/sys/types.h: Define __SYSMACROS_DEPRECATED_INCLUSION before
	including <sys/sysmacros.h>, and undefine it again afterward.
---
 NEWS                 | 15 ++++++++++
 misc/sys/sysmacros.h | 82 +++++++++++++++++++++++++++++++++++++++-------------
 posix/sys/types.h    |  8 ++++-
 3 files changed, 84 insertions(+), 21 deletions(-)

diff --git a/NEWS b/NEWS
index b3fd3cc..e8d3b93 100644
--- a/NEWS
+++ b/NEWS
@@ -33,6 +33,21 @@ Version 2.24
   group: files [SUCCESS=merge] nis
   Implemented by Stephen Gallagher (Red Hat).
 
+* The inclusion of <sys/sysmacros.h> by <sys/types.h> is deprecated.  This
+  means that in a future release, the macros “major”, “minor”, and “makedev”
+  will only be available from <sys/sysmacros.h>.
+
+  The macros defined by <sys/sysmacros.h> are not part of POSIX nor XSI,
+  and their names have been found frequently to collide with user code;
+  see for instance glibc bug 19239 and Red Hat bug 130601.  <stdlib.h>
+  includes <sys/types.h> under _GNU_SOURCE, and C++ code presently cannot
+  avoid being compiled under _GNU_SOURCE, exacerbating the problem.
+
+  Code that does not need these macros should #undef them after including
+  <sys/types.h>; this will also improve portability to BSD-derived systems.
+  Code that *does* need these macros should include <sys/types.h>, and then
+  include <sys/sysmacros.h> if __GLIBC__ is defined.
+
 Security related changes:
 
 * An unnecessary stack copy in _nss_dns_getnetbyname_r was removed.  It
diff --git a/misc/sys/sysmacros.h b/misc/sys/sysmacros.h
index edc6bac..3dc6133 100644
--- a/misc/sys/sysmacros.h
+++ b/misc/sys/sysmacros.h
@@ -16,25 +16,59 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef _SYS_SYSMACROS_H_OUTER
+
+#ifndef __SYSMACROS_DEPRECATED_INCLUSION
+# define _SYS_SYSMACROS_H_OUTER 1
+#endif
+
+/* If <sys/sysmacros.h> is included after <sys/types.h>, these macros
+   will already be defined, and we need to redefine them without the
+   deprecation warnings.  (If they are included in the opposite order,
+   the outer #ifndef will suppress this entire file and the macros
+   will be usable without warnings.)  */
+#undef major
+#undef minor
+#undef makedev
+
+/* This is the macro that must be defined to satisfy the misuse check
+   in bits/sysmacros.h. */
 #ifndef _SYS_SYSMACROS_H
-#define _SYS_SYSMACROS_H 1
+# define _SYS_SYSMACROS_H 1
 
-#include <features.h>
-#include <bits/types.h>
-#include <bits/sysmacros.h>
+# include <features.h>
+# include <bits/types.h>
+# include <bits/sysmacros.h>
 
-#define __SYSMACROS_DECL(rtype, name, proto)                            \
-  extern rtype gnu_dev_##name proto __THROW __attribute_const__;
+/* The extra "\n " moves gcc's [-Wdeprecated-declarations] annotation
+   onto the next line.  */
+# define __SYSMACROS_DEPRECATION_MSG(symbol)				     \
+  "\n  In the GNU C Library, `" #symbol "' is defined by <sys/sysmacros.h>." \
+  "\n  For historical compatibility, it is currently defined by"	     \
+  "\n  <sys/types.h> as well, but we plan to remove this soon."		     \
+  "\n  To use `" #symbol "', include <sys/sysmacros.h> directly."	     \
+  "\n  If you did not intend to use a system-defined macro `" #symbol "',"   \
+  "\n  you should #undef it after including <sys/types.h>."		     \
+  "\n "
 
-#ifdef __USE_EXTERN_INLINES
-# define __SYSMACROS_IMPL(rtype, name, proto, body)             \
-  __SYSMACROS_DECL (rtype, name, proto)                         \
-  __extension__ __extern_inline __attribute_const__ rtype       \
-  __NTH (gnu_dev_##name proto) { body }
-#else
-# define __SYSMACROS_IMPL(rtype, name, proto, expr)    \
-  __SYSMACROS_DECL (rtype, name, proto)
-#endif
+# define __SYSMACROS_DECL(rtype, name, proto)				     \
+   extern rtype gnu_dev_##name proto __THROW __attribute_const__;	     \
+   extern rtype __REDIRECT_NTH (__##name##_from_sys_types, proto,	     \
+				gnu_dev_##name)				     \
+    __attribute_const__							     \
+    __attribute_deprecated_msg__ (__SYSMACROS_DEPRECATION_MSG (name));
+
+# ifdef __USE_EXTERN_INLINES
+#  define __SYSMACROS_IMPL(rtype, name, proto, body)			     \
+    __SYSMACROS_DECL (rtype, name, proto)				     \
+    __extension__ __extern_inline __attribute_const__ rtype		     \
+    __NTH (gnu_dev_##name proto) { body }				     \
+    __extension__ __extern_inline __attribute_const__ rtype		     \
+    __NTH (__##name##_from_sys_types proto) { body }
+# else
+#  define __SYSMACROS_IMPL(rtype, name, proto, expr)			     \
+    __SYSMACROS_DECL (rtype, name, proto)
+# endif
 
 __BEGIN_DECLS
 
@@ -46,11 +80,19 @@ __SYSMACROS_IMPL (__dev_t, makedev,
 
 __END_DECLS
 
-#undef __SYSMACROS_IMPL
-#undef __SYSMACROS_DECL
+# undef __SYSMACROS_IMPL
+# undef __SYSMACROS_DECL
+
+# endif /* _SYS_SYSMACROS_H */
 
-#define major(dev) gnu_dev_major (dev)
-#define minor(dev) gnu_dev_minor (dev)
-#define makedev(maj, min) gnu_dev_makedev (maj, min)
+#ifdef __SYSMACROS_DEPRECATED_INCLUSION
+# define major(dev) __major_from_sys_types (dev)
+# define minor(dev) __minor_from_sys_types (dev)
+# define makedev(maj, min) __makedev_from_sys_types (maj, min)
+#else
+# define major(dev) gnu_dev_major (dev)
+# define minor(dev) gnu_dev_minor (dev)
+# define makedev(maj, min) gnu_dev_makedev (maj, min)
+#endif
 
 #endif /* sys/sysmacros.h */
diff --git a/posix/sys/types.h b/posix/sys/types.h
index a728567..83dadcd 100644
--- a/posix/sys/types.h
+++ b/posix/sys/types.h
@@ -218,8 +218,14 @@ typedef int register_t __attribute__ ((__mode__ (__word__)));
 /* It also defines `fd_set' and the FD_* macros for `select'.  */
 # include <sys/select.h>
 
-/* BSD defines these symbols, so we follow.  */
+/* BSD defines `major', `minor', and `makedev' in this header.
+   However, these symbols are likely to collide with user code, so we are
+   going to stop defining them here in an upcoming release.  Code that needs
+   these macros should include <sys/sysmacros.h> directly.  Code that does
+   not need these macros should #undef them after including this header.  */
+# define __SYSMACROS_DEPRECATED_INCLUSION
 # include <sys/sysmacros.h>
+# undef __SYSMACROS_DEPRECATED_INCLUSION
 #endif /* Use misc.  */
 
 
-- 
2.8.1

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

* Re: [PATCH 1/4] Move sysdeps/generic/bits/hwcap.h to top-level bits/.
  2016-05-13 13:26 ` [PATCH 1/4] Move sysdeps/generic/bits/hwcap.h to top-level bits/ Zack Weinberg
@ 2016-05-13 13:35   ` H.J. Lu
  2016-05-13 16:43     ` Zack Weinberg
  0 siblings, 1 reply; 17+ messages in thread
From: H.J. Lu @ 2016-05-13 13:35 UTC (permalink / raw)
  To: Zack Weinberg; +Cc: GNU C Library

On Fri, May 13, 2016 at 6:26 AM, Zack Weinberg <zackw@panix.com> wrote:
> This file was added to sysdeps/generic/bits in 2012.  This appears to have
> been an oversight, as the entire sysdeps/generic/bits directory was moved to
> the top level in 2005.  Accordingly the generic bits/hwcap.h belongs there
> too.
>
> ChangeLog:
>         * sysdeps/generic/bits/hwcap.h: Move to top-level bits/ directory.

Looks good to me.

-- 
H.J.

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

* Re: [PATCH 1/4] Move sysdeps/generic/bits/hwcap.h to top-level bits/.
  2016-05-13 13:35   ` H.J. Lu
@ 2016-05-13 16:43     ` Zack Weinberg
  2016-06-22 11:42       ` Zack Weinberg
  0 siblings, 1 reply; 17+ messages in thread
From: Zack Weinberg @ 2016-05-13 16:43 UTC (permalink / raw)
  To: H.J. Lu; +Cc: GNU C Library

On Fri, May 13, 2016 at 9:34 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Fri, May 13, 2016 at 6:26 AM, Zack Weinberg <zackw@panix.com> wrote:
>> This file was added to sysdeps/generic/bits in 2012.  This appears to have
>> been an oversight, as the entire sysdeps/generic/bits directory was moved to
>> the top level in 2005.  Accordingly the generic bits/hwcap.h belongs there
>> too.
>>
>> ChangeLog:
>>         * sysdeps/generic/bits/hwcap.h: Move to top-level bits/ directory.
>
> Looks good to me.

Gonna need someone to check this and any other good-as-is pieces in.

zw

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

* Re: [PATCH 1/4] Move sysdeps/generic/bits/hwcap.h to top-level bits/.
  2016-05-13 16:43     ` Zack Weinberg
@ 2016-06-22 11:42       ` Zack Weinberg
  2016-06-22 12:53         ` H.J. Lu
  0 siblings, 1 reply; 17+ messages in thread
From: Zack Weinberg @ 2016-06-22 11:42 UTC (permalink / raw)
  To: H.J. Lu; +Cc: GNU C Library

On Fri, May 13, 2016 at 12:42 PM, Zack Weinberg <zackw@panix.com> wrote:
> On Fri, May 13, 2016 at 9:34 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>> On Fri, May 13, 2016 at 6:26 AM, Zack Weinberg <zackw@panix.com> wrote:
>>> This file was added to sysdeps/generic/bits in 2012.  This appears to have
>>> been an oversight, as the entire sysdeps/generic/bits directory was moved to
>>> the top level in 2005.  Accordingly the generic bits/hwcap.h belongs there
>>> too.
>>>
>>> ChangeLog:
>>>         * sysdeps/generic/bits/hwcap.h: Move to top-level bits/ directory.
>>
>> Looks good to me.
>
> Gonna need someone to check this and any other good-as-is pieces in.

Ping?

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

* Re: [PATCH 2/4] Minimize sysdeps code involved in defining major/minor/makedev.
  2016-05-13 13:26 ` [PATCH 2/4] Minimize sysdeps code involved in defining major/minor/makedev Zack Weinberg
@ 2016-06-22 11:42   ` Zack Weinberg
  2016-06-22 15:48   ` Mike Frysinger
  1 sibling, 0 replies; 17+ messages in thread
From: Zack Weinberg @ 2016-06-22 11:42 UTC (permalink / raw)
  To: GNU C Library

On Fri, May 13, 2016 at 9:26 AM, Zack Weinberg <zackw@panix.com> wrote:
> Presently sys/sysmacros.h is entirely defined in sysdeps.  This would
> mean that the deprecation logic coming up in patch #4 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 accommodated 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.
>
> New ports henceforth need only provide bits/sysmacros.h defining macros
> __makedev_body, __major_body, and __minor_body.
>
> While I was at it, I added a basic round-trip test for these functions.

Ping?

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

* Re: [PATCH 4/4] Deprecate inclusion of <sys/sysmacros.h> by <sys/types.h>
  2016-05-13 13:26 ` [PATCH 4/4] Deprecate inclusion of <sys/sysmacros.h> by <sys/types.h> Zack Weinberg
@ 2016-06-22 11:42   ` Zack Weinberg
  0 siblings, 0 replies; 17+ messages in thread
From: Zack Weinberg @ 2016-06-22 11:42 UTC (permalink / raw)
  To: GNU C Library

On Fri, May 13, 2016 at 9:26 AM, Zack Weinberg <zackw@panix.com> wrote:
> The macros defined by <sys/sysmacros.h> are not part of POSIX nor XSI,
> and their names have been found frequently to collide with user code;
> see for instance glibc bug 19239 and Red Hat bug 130601.  <stdlib.h>
> includes <sys/types.h> under _GNU_SOURCE, and C++ code presently cannot
> avoid being compiled under _GNU_SOURCE, exacerbating the problem.

Ping?

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

* Re: [PATCH 3/4] Add utility macros for clang detection, and deprecation with messages.
  2016-05-13 13:26 ` [PATCH 3/4] Add utility macros for clang detection, and deprecation with messages Zack Weinberg
@ 2016-06-22 11:43   ` Zack Weinberg
  0 siblings, 0 replies; 17+ messages in thread
From: Zack Weinberg @ 2016-06-22 11:43 UTC (permalink / raw)
  To: GNU C Library

On Fri, May 13, 2016 at 9:26 AM, Zack Weinberg <zackw@panix.com> wrote:
> Add three new macros to features.h and sys/cdefs.h:
>
>  * __glibc_clang_prereq: just like __GNUC_PREREQ, but for clang.
>  * __glibc_clang_has_extension: wraps clang's intrinsic __has_extension.
>    Writing "#if defined __clang__ && __has_extension (...)" doesn't work,
>    because compilers other than clang will object to the unknown macro
>    __has_extension even though they don't need to evaluate it.
>    Instead, write "#if __glibc_clang_has_extension (...)".
>
>  * __attribute_deprecated_msg__(msg): like __attribute_deprecated__, but
>    if possible, prints a message.

Ping?

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

* Re: [PATCH 1/4] Move sysdeps/generic/bits/hwcap.h to top-level bits/.
  2016-06-22 11:42       ` Zack Weinberg
@ 2016-06-22 12:53         ` H.J. Lu
  0 siblings, 0 replies; 17+ messages in thread
From: H.J. Lu @ 2016-06-22 12:53 UTC (permalink / raw)
  To: Zack Weinberg; +Cc: GNU C Library

On Wed, Jun 22, 2016 at 4:41 AM, Zack Weinberg <zackw@panix.com> wrote:
> On Fri, May 13, 2016 at 12:42 PM, Zack Weinberg <zackw@panix.com> wrote:
>> On Fri, May 13, 2016 at 9:34 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>>> On Fri, May 13, 2016 at 6:26 AM, Zack Weinberg <zackw@panix.com> wrote:
>>>> This file was added to sysdeps/generic/bits in 2012.  This appears to have
>>>> been an oversight, as the entire sysdeps/generic/bits directory was moved to
>>>> the top level in 2005.  Accordingly the generic bits/hwcap.h belongs there
>>>> too.
>>>>
>>>> ChangeLog:
>>>>         * sysdeps/generic/bits/hwcap.h: Move to top-level bits/ directory.
>>>
>>> Looks good to me.
>>
>> Gonna need someone to check this and any other good-as-is pieces in.
>
> Ping?

I checked in it for you.  Please ping again with the patch generated by
"git format-patch" if you can't check it in yourself so that people can use
"git am" to apply your patch.

-- 
H.J.

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

* Re: [PATCH 2/4] Minimize sysdeps code involved in defining major/minor/makedev.
  2016-05-13 13:26 ` [PATCH 2/4] Minimize sysdeps code involved in defining major/minor/makedev Zack Weinberg
  2016-06-22 11:42   ` Zack Weinberg
@ 2016-06-22 15:48   ` Mike Frysinger
  2016-06-22 17:00     ` Zack Weinberg
  1 sibling, 1 reply; 17+ messages in thread
From: Mike Frysinger @ 2016-06-22 15:48 UTC (permalink / raw)
  To: Zack Weinberg; +Cc: libc-alpha

[-- Attachment #1: Type: text/plain, Size: 1576 bytes --]

On 13 May 2016 09:26, Zack Weinberg wrote:
> --- /dev/null
> +++ b/bits/sysmacros.h
> +
> +/* 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.  The macros __major_body,
> +   __minor_body, and __makedev_body are used as the bodies of inline
> +   functions, and their arguments are guaranteed to be the names of
> +   parameter variables, so it is safe to use them multiple times and
> +   unnecessary to parenthesize them.  See sys/sysmacros.h for details.  */
> +
> +#define __major_body(__dev_)                                    \

the args don't need the __ prefixes since they're expanded by the
preprocessor.  so here you can just use "dev".

> +  unsigned int __major_;                                        \

i think stylewise, we don't put trailing underscores.  was there
something specific you were trying to avoid ?

> +  __major_  = ((__dev_ & (__dev_t) 0x00000000000fff00u) >>  8); \
> +  __major_ |= ((__dev_ & (__dev_t) 0xfffff00000000000u) >> 32); \

parens around (__dev_)

same feedback for minor/makedev body helpers
-mike

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

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

* Re: [PATCH 2/4] Minimize sysdeps code involved in defining major/minor/makedev.
  2016-06-22 15:48   ` Mike Frysinger
@ 2016-06-22 17:00     ` Zack Weinberg
  2016-06-24 15:04       ` Zack Weinberg
  0 siblings, 1 reply; 17+ messages in thread
From: Zack Weinberg @ 2016-06-22 17:00 UTC (permalink / raw)
  To: Zack Weinberg, GNU C Library

On Wed, Jun 22, 2016 at 11:47 AM, Mike Frysinger <vapier@gentoo.org> wrote:
> On 13 May 2016 09:26, Zack Weinberg wrote:
>> --- /dev/null
>> +++ b/bits/sysmacros.h
>> +
>> +/* 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.  The macros __major_body,
>> +   __minor_body, and __makedev_body are used as the bodies of inline
>> +   functions, and their arguments are guaranteed to be the names of
>> +   parameter variables, so it is safe to use them multiple times and
>> +   unnecessary to parenthesize them.  See sys/sysmacros.h for details.  */
>> +
>> +#define __major_body(__dev_)                                    \
>
> the args don't need the __ prefixes since they're expanded by the
> preprocessor.  so here you can just use "dev".

See below.

>> +  unsigned int __major_;                                        \
>
> i think stylewise, we don't put trailing underscores.  was there
> something specific you were trying to avoid ?

This is poor man's macro hygiene.  Symbols that are declared by the
expansion of a macro might shadow or collide with symbols declared in
the context where the macro is expanded.  Precisely since trailing
underscores are not used anywhere else, adding a trailing underscore
to these symbols minimizes the risk of such a collision (but does not
100% prevent it).

The variable must also have a leading double underscore to put it into
the implementation namespace, lest it collide with an
application-defined  _macro_ named "major" (with or without a trailing
underscore).

As you say, none of this is necessary for the formal parameter name
"[__]dev[_]", but I feel that it is appropriate to do it anyway so
that local variables and arguments are on equal footing.  So I would
rather leave that alone.

In the alternative we could go back to the earlier version of the
patch, in which these were expressions not function bodies.

>> +  __major_  = ((__dev_ & (__dev_t) 0x00000000000fff00u) >>  8); \
>> +  __major_ |= ((__dev_ & (__dev_t) 0xfffff00000000000u) >> 32); \
>
> parens around (__dev_)

Note the comment above

>> +  [...] The macros __major_body,
>> +   __minor_body, and __makedev_body are used as the bodies of inline
>> +   functions, and their arguments are guaranteed to be the names of
>> +   parameter variables, so it is safe to use them multiple times and
>> +   unnecessary to parenthesize them.  See sys/sysmacros.h for details.

Given this, do you insist on defensive parentheses?  I think this code
is already plenty hard to read without it.

zw

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

* Re: [PATCH 2/4] Minimize sysdeps code involved in defining major/minor/makedev.
  2016-06-22 17:00     ` Zack Weinberg
@ 2016-06-24 15:04       ` Zack Weinberg
  0 siblings, 0 replies; 17+ messages in thread
From: Zack Weinberg @ 2016-06-24 15:04 UTC (permalink / raw)
  To: Mike Frysinger, GNU C Library

On Wed, Jun 22, 2016 at 1:00 PM, Zack Weinberg <zackw@panix.com> wrote:
> On Wed, Jun 22, 2016 at 11:47 AM, Mike Frysinger <vapier@gentoo.org> wrote:
>> On 13 May 2016 09:26, Zack Weinberg wrote:
>>> --- /dev/null
>>> +++ b/bits/sysmacros.h
>>> +
>>> +/* 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.  The macros __major_body,
>>> +   __minor_body, and __makedev_body are used as the bodies of inline
>>> +   functions, and their arguments are guaranteed to be the names of
>>> +   parameter variables, so it is safe to use them multiple times and
>>> +   unnecessary to parenthesize them.  See sys/sysmacros.h for details.  */
>>> +
>>> +#define __major_body(__dev_)                                    \
>>
>> the args don't need the __ prefixes since they're expanded by the
>> preprocessor.  so here you can just use "dev".
>
> See below.
>
>>> +  unsigned int __major_;                                        \
>>
>> i think stylewise, we don't put trailing underscores.  was there
>> something specific you were trying to avoid ?
>
> This is poor man's macro hygiene.  Symbols that are declared by the
> expansion of a macro might shadow or collide with symbols declared in
> the context where the macro is expanded.  Precisely since trailing
> underscores are not used anywhere else, adding a trailing underscore
> to these symbols minimizes the risk of such a collision (but does not
> 100% prevent it).
>
> The variable must also have a leading double underscore to put it into
> the implementation namespace, lest it collide with an
> application-defined  _macro_ named "major" (with or without a trailing
> underscore).
>
> As you say, none of this is necessary for the formal parameter name
> "[__]dev[_]", but I feel that it is appropriate to do it anyway so
> that local variables and arguments are on equal footing.  So I would
> rather leave that alone.
>
> In the alternative we could go back to the earlier version of the
> patch, in which these were expressions not function bodies.
>
>>> +  __major_  = ((__dev_ & (__dev_t) 0x00000000000fff00u) >>  8); \
>>> +  __major_ |= ((__dev_ & (__dev_t) 0xfffff00000000000u) >> 32); \
>>
>> parens around (__dev_)
>
> Note the comment above
>
>>> +  [...] The macros __major_body,
>>> +   __minor_body, and __makedev_body are used as the bodies of inline
>>> +   functions, and their arguments are guaranteed to be the names of
>>> +   parameter variables, so it is safe to use them multiple times and
>>> +   unnecessary to parenthesize them.  See sys/sysmacros.h for details.
>
> Given this, do you insist on defensive parentheses?  I think this code
> is already plenty hard to read without it.

I need you to answer these questions before I can rework the patch.

zw

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

* Re: [PATCH 0/4] Revised^2: deprecate major/minor/makedev in sys/types.h
  2016-05-13 13:26 [PATCH 0/4] Revised^2: deprecate major/minor/makedev in sys/types.h Zack Weinberg
                   ` (3 preceding siblings ...)
  2016-05-13 13:26 ` [PATCH 2/4] Minimize sysdeps code involved in defining major/minor/makedev Zack Weinberg
@ 2016-07-08 17:03 ` Adhemerval Zanella
  2016-07-11 17:49   ` Zack Weinberg
  4 siblings, 1 reply; 17+ messages in thread
From: Adhemerval Zanella @ 2016-07-08 17:03 UTC (permalink / raw)
  To: libc-alpha

I think these patch set is ok for inclusion and the comments from Mike
Frysinger in part 02 seems more stylist than functional (which I think
should not be a blocker).

I rebased the remaining patches in a branch [1] so you could check if I
am missing something.

[1] https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/azanella/deprecate-makedev

On 13/05/2016 10:26, Zack Weinberg wrote:
> I'm about to go out of town for two weeks, so here is the current state
> of the patches to deprecate exposure of major/minor/makedev by sys/types.h.
> 
> I believe this addresses all of the review comments to date, *except*
> Roland's request for a generic __glibc_has_feature mechanism.  That is
> going to take more thought and, given Carlos wanted this patch in 2.24,
> which I think is freezing at the end of June(?), I don't think it makes
> sense to delay this for that.
> 
> Moving sysdeps/generic/bits/hwcap.h is unconnected to the primary goal of
> this patch series; it just happens to be the only file still in
> sysdeps/generic/bits and, AFAICT, it should never have been there in the
> first place (see discussion elsewhere).
> 
> zw
> 
> Zack Weinberg (4):
>   Move sysdeps/generic/bits/hwcap.h to top-level bits/.
>   Minimize sysdeps code involved in defining major/minor/makedev.
>   Add utility macros for clang detection, and deprecation with messages.
>   Deprecate inclusion of <sys/sysmacros.h> by <sys/types.h>
> 
>  NEWS                                               |  15 +++
>  bits/hwcap.h                                       |  23 +++++
>  bits/sysmacros.h                                   |  60 ++++++++++++
>  include/features.h                                 |  19 +++-
>  include/sys/sysmacros.h                            |   1 +
>  misc/Makefile                                      |   8 +-
>  misc/Versions                                      |   3 +
>  misc/makedev.c                                     |  40 ++++++++
>  misc/sys/cdefs.h                                   |  22 ++++-
>  misc/sys/sysmacros.h                               |  98 +++++++++++++++++++
>  misc/tst-makedev.c                                 | 104 +++++++++++++++++++++
>  posix/Makefile                                     |   2 +-
>  posix/sys/types.h                                  |   8 +-
>  sysdeps/arm/nacl/libc.abilist                      |   4 +
>  sysdeps/generic/bits/hwcap.h                       |  23 -----
>  sysdeps/generic/sys/sysmacros.h                    |  30 ------
>  sysdeps/unix/sysv/linux/Makefile                   |   2 +-
>  sysdeps/unix/sysv/linux/aarch64/libc.abilist       |   1 +
>  sysdeps/unix/sysv/linux/alpha/libc.abilist         |   1 +
>  sysdeps/unix/sysv/linux/arm/libc.abilist           |   1 +
>  sysdeps/unix/sysv/linux/hppa/libc.abilist          |   1 +
>  sysdeps/unix/sysv/linux/i386/libc.abilist          |   1 +
>  sysdeps/unix/sysv/linux/ia64/libc.abilist          |   1 +
>  sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist |   1 +
>  sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist   |   1 +
>  sysdeps/unix/sysv/linux/makedev.c                  |  40 --------
>  sysdeps/unix/sysv/linux/microblaze/libc.abilist    |   1 +
>  .../unix/sysv/linux/mips/mips32/fpu/libc.abilist   |   1 +
>  .../unix/sysv/linux/mips/mips32/nofpu/libc.abilist |   1 +
>  .../unix/sysv/linux/mips/mips64/n32/libc.abilist   |   1 +
>  .../unix/sysv/linux/mips/mips64/n64/libc.abilist   |   1 +
>  sysdeps/unix/sysv/linux/nios2/libc.abilist         |   1 +
>  .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist  |   1 +
>  .../linux/powerpc/powerpc32/nofpu/libc.abilist     |   1 +
>  .../sysv/linux/powerpc/powerpc64/libc-le.abilist   |   1 +
>  .../unix/sysv/linux/powerpc/powerpc64/libc.abilist |   1 +
>  sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist  |   1 +
>  sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist  |   1 +
>  sysdeps/unix/sysv/linux/sh/libc.abilist            |   1 +
>  sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist |   1 +
>  sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist |   1 +
>  sysdeps/unix/sysv/linux/sys/sysmacros.h            |  65 -------------
>  .../sysv/linux/tile/tilegx/tilegx32/libc.abilist   |   1 +
>  .../sysv/linux/tile/tilegx/tilegx64/libc.abilist   |   1 +
>  sysdeps/unix/sysv/linux/x86_64/64/libc.abilist     |   1 +
>  sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist    |   1 +
>  46 files changed, 425 insertions(+), 169 deletions(-)
>  create mode 100644 bits/hwcap.h
>  create mode 100644 bits/sysmacros.h
>  create mode 100644 include/sys/sysmacros.h
>  create mode 100644 misc/makedev.c
>  create mode 100644 misc/sys/sysmacros.h
>  create mode 100644 misc/tst-makedev.c
>  delete mode 100644 sysdeps/generic/bits/hwcap.h
>  delete mode 100644 sysdeps/generic/sys/sysmacros.h
>  delete mode 100644 sysdeps/unix/sysv/linux/makedev.c
>  delete mode 100644 sysdeps/unix/sysv/linux/sys/sysmacros.h
> 

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

* Re: [PATCH 0/4] Revised^2: deprecate major/minor/makedev in sys/types.h
  2016-07-08 17:03 ` [PATCH 0/4] Revised^2: deprecate major/minor/makedev in sys/types.h Adhemerval Zanella
@ 2016-07-11 17:49   ` Zack Weinberg
  0 siblings, 0 replies; 17+ messages in thread
From: Zack Weinberg @ 2016-07-11 17:49 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: GNU C Library

On Fri, Jul 8, 2016 at 1:03 PM, Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
> I rebased the remaining patches in a branch [1] so you could check if I
> am missing something.
>
> [1] https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/azanella/deprecate-makedev

In https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=050bc98376edd26429cff885c339c53f30224aa7
, the change to sysdeps/arm/nacl/libc.abilist is missing from the
commit (but not the ChangeLog).  As discussed earlier, this .abilist
change (but none of the others) is, I believe, still necessary.

In https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=58dc3371865ef8e331de33423c57af855f6b6c45
, the Unicode curly quotes in the addition to NEWS have suffered
encoding lossage: 'âmajorâ, âminorâ, and âmakedevâ' should be
'“major”, “minor”, and “makedev”'.

I do not see any other problems.  Thanks for your help getting this done.

zw

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

end of thread, other threads:[~2016-07-11 17:49 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-13 13:26 [PATCH 0/4] Revised^2: deprecate major/minor/makedev in sys/types.h Zack Weinberg
2016-05-13 13:26 ` [PATCH 4/4] Deprecate inclusion of <sys/sysmacros.h> by <sys/types.h> Zack Weinberg
2016-06-22 11:42   ` Zack Weinberg
2016-05-13 13:26 ` [PATCH 1/4] Move sysdeps/generic/bits/hwcap.h to top-level bits/ Zack Weinberg
2016-05-13 13:35   ` H.J. Lu
2016-05-13 16:43     ` Zack Weinberg
2016-06-22 11:42       ` Zack Weinberg
2016-06-22 12:53         ` H.J. Lu
2016-05-13 13:26 ` [PATCH 3/4] Add utility macros for clang detection, and deprecation with messages Zack Weinberg
2016-06-22 11:43   ` Zack Weinberg
2016-05-13 13:26 ` [PATCH 2/4] Minimize sysdeps code involved in defining major/minor/makedev Zack Weinberg
2016-06-22 11:42   ` Zack Weinberg
2016-06-22 15:48   ` Mike Frysinger
2016-06-22 17:00     ` Zack Weinberg
2016-06-24 15:04       ` Zack Weinberg
2016-07-08 17:03 ` [PATCH 0/4] Revised^2: deprecate major/minor/makedev in sys/types.h Adhemerval Zanella
2016-07-11 17:49   ` Zack Weinberg

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