about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/fcntl.c
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2017-08-03 14:29:06 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2017-08-31 16:10:34 -0300
commit102dde842ae75ddee71a413fc8c4320894e159de (patch)
treed0e8c0cf9f0ab384ba250672fabfec096e0a6cca /sysdeps/unix/sysv/linux/fcntl.c
parent9eee633b68649c94b2404f65d5c9a00c3ed1f068 (diff)
downloadglibc-102dde842ae75ddee71a413fc8c4320894e159de.tar.gz
glibc-102dde842ae75ddee71a413fc8c4320894e159de.tar.xz
glibc-102dde842ae75ddee71a413fc8c4320894e159de.zip
Remove NO_CANCELLATION macro
The NO_CANCELLATION macro is used currently on generic headers to
define non cancellable syscalls and on Linux fcntl to implement the non
cancellable variation.  Former should be single-handled by not-cancel.h
header and former could be simplified build both cancellable and non
cancellable for default objects and alias the non-cancellable to default
one for rtld ones (since Linux already support cancellation as default).

This patch thus removes the NO_CANCELLATION macro and its usage.  The
generic non cancellable fcntl is route to internal fcntl.

Checked on x86_64-linux-gnu and i686-linux-gnu.  Also checked with
a build again major ABIs.

	* sysdeps/generic/not-cancel.h (NO_CANCELLATION): Remove macro.
	* sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (NO_CANCELLATION):
	Likewise.
	* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (NO_CANCELLATION):
	Likewise.
	* sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (NO_CANCELLATION):
	Likewise.
	* sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (NO_CANCELLATION):
	Likewise.
	* sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (NO_CANCELLATION):
	Likewise.
	* sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (NO_CANCELLATION):
	Likewise.
	* sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h (NO_CANCELLATION):
	Likewise.
	* sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
	(NO_CANCELLATION): Likewise.
	* sysdeps/unix/sysv/linux/mips/sysdep-cancel.h (NO_CANCELLATION):
	Likewise.
	* sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h (NO_CANCELLATION):
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h (NO_CANCELLATION):
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
	(NO_CANCELLATION): Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
	(NO_CANCELLATION): Likewise.
	* sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (NO_CANCELLATION):
	Likewise
	* sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h (NO_CANCELLATION):
	Likewise.
	* sysdeps/unix/sysv/linux/tile/sysdep-cancel.h (NO_CANCELLATION):
	Likewise.
	* sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h (NO_CANCELLATION):
	Likewise.
	* sysdeps/unix/sysv/linux/not-cancel.h (__fcntl_nocancel): Add
	hidden prototype.
	* sysdeps/unix/sysv/linux/fcntl.c (__fcntl_nocancel): Define only
	for !IS_IN (rtld) and remove NO_CANCELLATION usage.
Diffstat (limited to 'sysdeps/unix/sysv/linux/fcntl.c')
-rw-r--r--sysdeps/unix/sysv/linux/fcntl.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/sysdeps/unix/sysv/linux/fcntl.c b/sysdeps/unix/sysv/linux/fcntl.c
index 76e846c6ac..cda6be712d 100644
--- a/sysdeps/unix/sysv/linux/fcntl.c
+++ b/sysdeps/unix/sysv/linux/fcntl.c
@@ -19,6 +19,7 @@
 #include <stdarg.h>
 #include <errno.h>
 #include <sysdep-cancel.h>
+#include <not-cancel.h>
 
 #ifndef __NR_fcntl64
 # define __NR_fcntl64 __NR_fcntl
@@ -46,9 +47,8 @@ fcntl_common (int fd, int cmd, void *arg)
   return INLINE_SYSCALL_CALL (fcntl64, fd, cmd, (void *) arg);
 }
 
-#ifndef NO_CANCELLATION
 int
-__fcntl_nocancel (int fd, int cmd, ...)
+__libc_fcntl (int fd, int cmd, ...)
 {
   va_list ap;
   void *arg;
@@ -57,12 +57,18 @@ __fcntl_nocancel (int fd, int cmd, ...)
   arg = va_arg (ap, void *);
   va_end (ap);
 
+  cmd = FCNTL_ADJUST_CMD (cmd);
+
+  if (cmd == F_SETLKW || cmd == F_SETLKW64)
+    return SYSCALL_CANCEL (fcntl64, fd, cmd, (void *) arg);
+
   return fcntl_common (fd, cmd, arg);
 }
-#endif
+libc_hidden_def (__libc_fcntl)
 
+#if !IS_IN (rtld)
 int
-__libc_fcntl (int fd, int cmd, ...)
+__fcntl_nocancel (int fd, int cmd, ...)
 {
   va_list ap;
   void *arg;
@@ -71,14 +77,12 @@ __libc_fcntl (int fd, int cmd, ...)
   arg = va_arg (ap, void *);
   va_end (ap);
 
-  cmd = FCNTL_ADJUST_CMD (cmd);
-
-  if (cmd == F_SETLKW || cmd == F_SETLKW64)
-    return SYSCALL_CANCEL (fcntl64, fd, cmd, (void *) arg);
-
   return fcntl_common (fd, cmd, arg);
 }
-libc_hidden_def (__libc_fcntl)
+#else
+strong_alias (__libc_fcntl, __fcntl_nocancel)
+#endif
+libc_hidden_def (__fcntl_nocancel)
 
 weak_alias (__libc_fcntl, __fcntl)
 libc_hidden_weak (__fcntl)