[COMMITTED] Consolidate not-cancel.h files.

Message ID 20140514180923.D0EBB2C39C7@topped-with-meat.com
State Committed
Headers

Commit Message

Roland McGrath May 14, 2014, 6:09 p.m. UTC
  There are in fact only two versions of not-cancel.h actually in use: the
sysdeps/generic one for non-Linux, and the NPTL one living in
nptl/sysdeps/unix/sysv/linux/i386/.  The diff looks nontrivial only because
moving nptl/sysdeps/unix/sysv/linux/i386/not-cancel.h verbatim to
sysdeps/unix/sysv/linux/ clobbered the unused file that was there before.

Verified on x86_64-linux-gnu and i686-linux-gnu that no libc.so or
libpthread.so code changes.  It should be obviously so for other machines
too.


Thanks,
Roland



	* nptl/sysdeps/unix/sysv/linux/i386/not-cancel.h: Moved ...
	* sysdeps/unix/sysv/linux/not-cancel.h: ... here.
	* nptl/sysdeps/unix/sysv/linux/sparc/not-cancel.h: File removed.
	* nptl/sysdeps/unix/sysv/linux/sh/not-cancel.h: File removed.
	* nptl/sysdeps/unix/sysv/linux/powerpc/not-cancel.h: File removed.
	* nptl/sysdeps/unix/sysv/linux/x86_64/not-cancel.h: File removed.
	* nptl/sysdeps/unix/sysv/linux/s390/not-cancel.h: File removed.
	* sysdeps/unix/sysv/linux/generic/not-cancel.h: File removed.
	* sysdeps/unix/sysv/linux/generic/nptl/not-cancel.h: File removed.
	* sysdeps/unix/sysv/linux/m68k/nptl/not-cancel.h: File removed.
  

Comments

Joseph Myers May 14, 2014, 9:04 p.m. UTC | #1
On Wed, 14 May 2014, Roland McGrath wrote:

> There are in fact only two versions of not-cancel.h actually in use: the
> sysdeps/generic one for non-Linux, and the NPTL one living in
> nptl/sysdeps/unix/sysv/linux/i386/.  The diff looks nontrivial only because
> moving nptl/sysdeps/unix/sysv/linux/i386/not-cancel.h verbatim to
> sysdeps/unix/sysv/linux/ clobbered the unused file that was there before.

I don't believe that file was unused; plenty of architectures didn't have 
their own not-cancel.h files and so used the sysdeps/unix/sysv/linux/ one.  
It may well be that the differences were *unnecessary*; I haven't thought 
what what this file should optimally look like.
  
Roland McGrath May 14, 2014, 9:21 p.m. UTC | #2
> On Wed, 14 May 2014, Roland McGrath wrote:
> 
> > There are in fact only two versions of not-cancel.h actually in use: the
> > sysdeps/generic one for non-Linux, and the NPTL one living in
> > nptl/sysdeps/unix/sysv/linux/i386/.  The diff looks nontrivial only because
> > moving nptl/sysdeps/unix/sysv/linux/i386/not-cancel.h verbatim to
> > sysdeps/unix/sysv/linux/ clobbered the unused file that was there before.
> 
> I don't believe that file was unused; plenty of architectures didn't have 
> their own not-cancel.h files and so used the sysdeps/unix/sysv/linux/ one.  
> It may well be that the differences were *unnecessary*; I haven't thought 
> what what this file should optimally look like.

You're right.  I misread the set of files.  Sorry about that.

The machines that were using the old sysdeps/unix/sysv/linux/not-cancel.h
are:
	alpha
	arm
	hppa
	ia64
	microblaze
	mips
	mips64

The difference between the old and new files is that the old one used
INLINE_SYSCALL for everything, while the new one uses the __*_nocancel
entry points that are defined along with the ABI entry points by the
syscall macros.

I think we want uniformity across machines between those two choices,
though conceivably there is a different optimization choice to be made on
some machines than others.  My inclination is to leave things as they are
now and just have everybody test that nothing broke.  Does that sound OK?


Thanks,
Roland
  
Joseph Myers May 14, 2014, 9:31 p.m. UTC | #3
On Wed, 14 May 2014, Roland McGrath wrote:

> I think we want uniformity across machines between those two choices,
> though conceivably there is a different optimization choice to be made on
> some machines than others.  My inclination is to leave things as they are
> now and just have everybody test that nothing broke.  Does that sound OK?

That seems reasonable to me.
  

Patch

--- a/nptl/sysdeps/unix/sysv/linux/i386/not-cancel.h
+++ /dev/null
@@ -1,104 +0,0 @@ 
-/* Uncancelable versions of cancelable interfaces.  Linux/NPTL version.
-   Copyright (C) 2003-2014 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
-   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 <sysdep.h>
-
-#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
-extern int __open_nocancel (const char *, int, ...) attribute_hidden;
-extern int __close_nocancel (int) attribute_hidden;
-extern int __read_nocancel (int, void *, size_t) attribute_hidden;
-extern int __write_nocancel (int, const void *, size_t) attribute_hidden;
-extern pid_t __waitpid_nocancel (pid_t, int *, int) attribute_hidden;
-extern int __openat_nocancel (int fd, const char *fname, int oflag,
-				mode_t mode) attribute_hidden;
-extern int __openat64_nocancel (int fd, const char *fname, int oflag,
-				  mode_t mode) attribute_hidden;
-#else
-# define __open_nocancel(name, ...) __open (name, __VA_ARGS__)
-# define __close_nocancel(fd) __close (fd)
-# define __read_nocancel(fd, buf, len) __read (fd, buf, len)
-# define __write_nocancel(fd, buf, len) __write (fd, buf, len)
-# define __waitpid_nocancel(pid, stat_loc, options) \
-  __waitpid (pid, stat_loc, options)
-# define __openat_nocancel(fd, fname, oflag, mode) \
-  openat (fd, fname, oflag, mode)
-# define __openat64_nocancel(fd, fname, oflag, mode) \
-  openat64 (fd, fname, oflag, mode)
-#endif
-
-/* Uncancelable open.  */
-#define open_not_cancel(name, flags, mode) \
-   __open_nocancel (name, flags, mode)
-#define open_not_cancel_2(name, flags) \
-   __open_nocancel (name, flags)
-
-/* Uncancelable openat.  */
-#define openat_not_cancel(fd, fname, oflag, mode) \
-  __openat_nocancel (fd, fname, oflag, mode)
-#define openat_not_cancel_3(fd, fname, oflag) \
-  __openat_nocancel (fd, fname, oflag, 0)
-#define openat64_not_cancel(fd, fname, oflag, mode) \
-  __openat64_nocancel (fd, fname, oflag, mode)
-#define openat64_not_cancel_3(fd, fname, oflag) \
-  __openat64_nocancel (fd, fname, oflag, 0)
-
-/* Uncancelable close.  */
-#define close_not_cancel(fd) \
-  __close_nocancel (fd)
-#define close_not_cancel_no_status(fd) \
-  (void) ({ INTERNAL_SYSCALL_DECL (err);				      \
-	    INTERNAL_SYSCALL (close, err, 1, (fd)); })
-
-/* Uncancelable read.  */
-#define read_not_cancel(fd, buf, n) \
-  __read_nocancel (fd, buf, n)
-
-/* Uncancelable write.  */
-#define write_not_cancel(fd, buf, n) \
-  __write_nocancel (fd, buf, n)
-
-/* Uncancelable writev.  */
-#define writev_not_cancel_no_status(fd, iov, n) \
-  (void) ({ INTERNAL_SYSCALL_DECL (err);				      \
-	    INTERNAL_SYSCALL (writev, err, 3, (fd), (iov), (n)); })
-
-/* Uncancelable fcntl.  */
-#define fcntl_not_cancel(fd, cmd, val) \
-  __fcntl_nocancel (fd, cmd, val)
-
-/* Uncancelable waitpid.  */
-#ifdef __NR_waitpid
-# define waitpid_not_cancel(pid, stat_loc, options) \
-  __waitpid_nocancel (pid, stat_loc, options)
-#else
-# define waitpid_not_cancel(pid, stat_loc, options) \
-  INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL)
-#endif
-
-/* Uncancelable pause.  */
-#define pause_not_cancel() \
-  __pause_nocancel ()
-
-/* Uncancelable nanosleep.  */
-#define nanosleep_not_cancel(requested_time, remaining) \
-  __nanosleep_nocancel (requested_time, remaining)
-
-/* Uncancelable sigsuspend.  */
-#define sigsuspend_not_cancel(set) \
-  __sigsuspend_nocancel (set)
--- a/nptl/sysdeps/unix/sysv/linux/powerpc/not-cancel.h
+++ /dev/null
@@ -1 +0,0 @@ 
-#include "../i386/not-cancel.h"
--- a/nptl/sysdeps/unix/sysv/linux/s390/not-cancel.h
+++ /dev/null
@@ -1 +0,0 @@ 
-#include "../i386/not-cancel.h"
--- a/nptl/sysdeps/unix/sysv/linux/sh/not-cancel.h
+++ /dev/null
@@ -1 +0,0 @@ 
-#include "../i386/not-cancel.h"
--- a/nptl/sysdeps/unix/sysv/linux/sparc/not-cancel.h
+++ /dev/null
@@ -1 +0,0 @@ 
-#include "../i386/not-cancel.h"
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/not-cancel.h
+++ /dev/null
@@ -1 +0,0 @@ 
-#include "../i386/not-cancel.h"
--- a/sysdeps/unix/sysv/linux/generic/not-cancel.h
+++ /dev/null
@@ -1,34 +0,0 @@ 
-/* Uncancelable versions of cancelable interfaces.  Linux asm-generic version.
-   Copyright (C) 2012-2014 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2012.
-
-   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 _LINUX_GENERIC_NOT_CANCEL_H
-#define _LINUX_GENERIC_NOT_CANCEL_H
-
-#include <sysdeps/unix/sysv/linux/not-cancel.h>
-#include <fcntl.h>
-
-/* Uncancelable open with openat.  */
-#undef open_not_cancel
-#define open_not_cancel(name, flags, mode) \
-  INLINE_SYSCALL (openat, 4, AT_FDCWD, (const char *) (name), (flags), (mode))
-#undef open_not_cancel_2
-#define open_not_cancel_2(name, flags) \
-  INLINE_SYSCALL (openat, 3, AT_FDCWD, (const char *) (name), (flags))
-
-#endif
--- a/sysdeps/unix/sysv/linux/generic/nptl/not-cancel.h
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <nptl/sysdeps/unix/sysv/linux/i386/not-cancel.h>
--- a/sysdeps/unix/sysv/linux/m68k/nptl/not-cancel.h
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <nptl/sysdeps/unix/sysv/linux/i386/not-cancel.h>
--- a/sysdeps/unix/sysv/linux/not-cancel.h
+++ b/sysdeps/unix/sysv/linux/not-cancel.h
@@ -1,4 +1,4 @@ 
-/* Uncancelable versions of cancelable interfaces.  Linux version.
+/* Uncancelable versions of cancelable interfaces.  Linux/NPTL version.
    Copyright (C) 2003-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
@@ -17,28 +17,38 @@ 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sys/types.h>
 #include <sysdep.h>
 
-/* Uncancelable open.  */
-#define open_not_cancel(name, flags, mode) \
-   INLINE_SYSCALL (open, 3, (const char *) (name), (flags), (mode))
-#define open_not_cancel_2(name, flags) \
-   INLINE_SYSCALL (open, 2, (const char *) (name), (flags))
-
-/* Uncancelable openat.  */
 #if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
+extern int __open_nocancel (const char *, int, ...) attribute_hidden;
+extern int __close_nocancel (int) attribute_hidden;
+extern int __read_nocancel (int, void *, size_t) attribute_hidden;
+extern int __write_nocancel (int, const void *, size_t) attribute_hidden;
+extern pid_t __waitpid_nocancel (pid_t, int *, int) attribute_hidden;
 extern int __openat_nocancel (int fd, const char *fname, int oflag,
-			      mode_t mode) attribute_hidden;
-extern int __openat64_nocancel (int fd, const char *fname, int oflag,
 				mode_t mode) attribute_hidden;
+extern int __openat64_nocancel (int fd, const char *fname, int oflag,
+				  mode_t mode) attribute_hidden;
 #else
+# define __open_nocancel(name, ...) __open (name, __VA_ARGS__)
+# define __close_nocancel(fd) __close (fd)
+# define __read_nocancel(fd, buf, len) __read (fd, buf, len)
+# define __write_nocancel(fd, buf, len) __write (fd, buf, len)
+# define __waitpid_nocancel(pid, stat_loc, options) \
+  __waitpid (pid, stat_loc, options)
 # define __openat_nocancel(fd, fname, oflag, mode) \
   openat (fd, fname, oflag, mode)
 # define __openat64_nocancel(fd, fname, oflag, mode) \
   openat64 (fd, fname, oflag, mode)
 #endif
 
+/* Uncancelable open.  */
+#define open_not_cancel(name, flags, mode) \
+   __open_nocancel (name, flags, mode)
+#define open_not_cancel_2(name, flags) \
+   __open_nocancel (name, flags)
+
+/* Uncancelable openat.  */
 #define openat_not_cancel(fd, fname, oflag, mode) \
   __openat_nocancel (fd, fname, oflag, mode)
 #define openat_not_cancel_3(fd, fname, oflag) \
@@ -50,18 +60,18 @@  extern int __openat64_nocancel (int fd, const char *fname, int oflag,
 
 /* Uncancelable close.  */
 #define close_not_cancel(fd) \
-  INLINE_SYSCALL (close, 1, fd)
+  __close_nocancel (fd)
 #define close_not_cancel_no_status(fd) \
   (void) ({ INTERNAL_SYSCALL_DECL (err);				      \
 	    INTERNAL_SYSCALL (close, err, 1, (fd)); })
 
 /* Uncancelable read.  */
 #define read_not_cancel(fd, buf, n) \
-  INLINE_SYSCALL (read, 3, (fd), (buf), (n))
+  __read_nocancel (fd, buf, n)
 
 /* Uncancelable write.  */
 #define write_not_cancel(fd, buf, n) \
-  INLINE_SYSCALL (write, 3, (fd), (buf), (n))
+  __write_nocancel (fd, buf, n)
 
 /* Uncancelable writev.  */
 #define writev_not_cancel_no_status(fd, iov, n) \
@@ -75,29 +85,19 @@  extern int __openat64_nocancel (int fd, const char *fname, int oflag,
 /* Uncancelable waitpid.  */
 #ifdef __NR_waitpid
 # define waitpid_not_cancel(pid, stat_loc, options) \
-  INLINE_SYSCALL (waitpid, 3, pid, stat_loc, options)
+  __waitpid_nocancel (pid, stat_loc, options)
 #else
 # define waitpid_not_cancel(pid, stat_loc, options) \
   INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL)
 #endif
 
 /* Uncancelable pause.  */
-#ifdef __NR_pause
-# define pause_not_cancel() \
-  INLINE_SYSCALL (pause, 0)
-#else
-# define pause_not_cancel() \
+#define pause_not_cancel() \
   __pause_nocancel ()
-#endif
 
 /* Uncancelable nanosleep.  */
-#ifdef __NR_nanosleep
-# define nanosleep_not_cancel(requested_time, remaining) \
-  INLINE_SYSCALL (nanosleep, 2, requested_time, remaining)
-#else
-# define nanosleep_not_cancel(requested_time, remaining) \
+#define nanosleep_not_cancel(requested_time, remaining) \
   __nanosleep_nocancel (requested_time, remaining)
-#endif
 
 /* Uncancelable sigsuspend.  */
 #define sigsuspend_not_cancel(set) \