From 102dde842ae75ddee71a413fc8c4320894e159de Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Thu, 3 Aug 2017 14:29:06 -0300 Subject: [PATCH] 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. --- ChangeLog | 42 +++++++++++++++++++ sysdeps/generic/not-cancel.h | 2 - .../unix/sysv/linux/aarch64/sysdep-cancel.h | 1 - sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h | 1 - sysdeps/unix/sysv/linux/arm/sysdep-cancel.h | 1 - sysdeps/unix/sysv/linux/fcntl.c | 34 ++++++++------- sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h | 1 - sysdeps/unix/sysv/linux/i386/sysdep-cancel.h | 1 - sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h | 1 - sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h | 1 - .../sysv/linux/microblaze/sysdep-cancel.h | 1 - sysdeps/unix/sysv/linux/mips/sysdep-cancel.h | 1 - sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h | 1 - sysdeps/unix/sysv/linux/not-cancel.h | 3 +- .../unix/sysv/linux/powerpc/sysdep-cancel.h | 1 - .../sysv/linux/s390/s390-32/sysdep-cancel.h | 1 - .../sysv/linux/s390/s390-64/sysdep-cancel.h | 1 - sysdeps/unix/sysv/linux/sh/sysdep-cancel.h | 1 - sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h | 1 - sysdeps/unix/sysv/linux/tile/sysdep-cancel.h | 1 - .../unix/sysv/linux/x86_64/sysdep-cancel.h | 1 - 21 files changed, 63 insertions(+), 35 deletions(-) diff --git a/ChangeLog b/ChangeLog index e0473dc29e..a934c69393 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,45 @@ +2017-08-31 Adhemerval Zanella + + * 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. + 2017-08-31 Steve Ellcey * sysdeps/aarch64/dl-irel.h: (elf_ifunc_invoke): Change argument type diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h index e5a850c6fd..41ce1fc9fa 100644 --- a/sysdeps/generic/not-cancel.h +++ b/sysdeps/generic/not-cancel.h @@ -44,5 +44,3 @@ __nanosleep (requested_time, remaining) #define __fcntl_nocancel(fd, cmd, ...) \ __fcntl (fd, cmd, __VA_ARGS__) - -#define NO_CANCELLATION 1 diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h index 80732f5445..27741a3f02 100644 --- a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h @@ -41,7 +41,6 @@ extern int __local_multiple_threads attribute_hidden; /* For rtld, et cetera. */ # define SINGLE_THREAD_P 1 -# define NO_CANCELLATION 1 #endif diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h index 72e6c0cb60..561cb67f1c 100644 --- a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h @@ -39,7 +39,6 @@ extern int __local_multiple_threads attribute_hidden; #else # define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 #endif diff --git a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h index 8930245ff3..b227187ab9 100644 --- a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h @@ -40,7 +40,6 @@ extern int __local_multiple_threads attribute_hidden; /* For rtld, et cetera. */ # define SINGLE_THREAD_P 1 -# define NO_CANCELLATION 1 #endif 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 #include #include +#include #ifndef __NR_fcntl64 # define __NR_fcntl64 __NR_fcntl @@ -46,21 +47,6 @@ 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, ...) -{ - va_list ap; - void *arg; - - va_start (ap, cmd); - arg = va_arg (ap, void *); - va_end (ap); - - return fcntl_common (fd, cmd, arg); -} -#endif - int __libc_fcntl (int fd, int cmd, ...) { @@ -80,6 +66,24 @@ __libc_fcntl (int fd, int cmd, ...) } libc_hidden_def (__libc_fcntl) +#if !IS_IN (rtld) +int +__fcntl_nocancel (int fd, int cmd, ...) +{ + va_list ap; + void *arg; + + va_start (ap, cmd); + arg = va_arg (ap, void *); + va_end (ap); + + return fcntl_common (fd, cmd, arg); +} +#else +strong_alias (__libc_fcntl, __fcntl_nocancel) +#endif +libc_hidden_def (__fcntl_nocancel) + weak_alias (__libc_fcntl, __fcntl) libc_hidden_weak (__fcntl) weak_alias (__libc_fcntl, fcntl) diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h index bf88ea56be..8a85fc2144 100644 --- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h @@ -38,7 +38,6 @@ /* This code should never be used but we define it anyhow. */ # define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 #endif /* IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) */ diff --git a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h index 7ad851ade6..5c11983bb5 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h @@ -28,7 +28,6 @@ #else # define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 #endif diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h index d3d02d4ca3..fe5b35ad88 100644 --- a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h @@ -25,7 +25,6 @@ __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0) #else # define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 #endif #define RTLD_SINGLE_THREAD_P \ diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h index cf96c10d1f..b192a6875a 100644 --- a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h @@ -27,7 +27,6 @@ #else # define SINGLE_THREAD_P (1) -# define NO_CANCELLATION (1) #endif diff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h index 8655c9dc97..120ea06ba3 100644 --- a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h @@ -38,7 +38,6 @@ extern int __local_multiple_threads attribute_hidden; #else # define SINGLE_THREAD_P (1) -# define NO_CANCELLATION (1) #endif diff --git a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h index 76d7ef43cf..31dbba0470 100644 --- a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h @@ -28,7 +28,6 @@ #else # define SINGLE_THREAD_P 1 -# define NO_CANCELLATION 1 #endif diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h index 73b623614d..4e7f5363a1 100644 --- a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h @@ -28,7 +28,6 @@ #else # define SINGLE_THREAD_P 1 -# define NO_CANCELLATION 1 #endif diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h index ae0b059e75..8f4f3380b9 100644 --- a/sysdeps/unix/sysv/linux/not-cancel.h +++ b/sysdeps/unix/sysv/linux/not-cancel.h @@ -86,6 +86,7 @@ __typeof (__nanosleep) __nanosleep_nocancel; hidden_proto (__nanosleep_nocancel) /* Uncancelable fcntl. */ -__typeof (__fcntl) __fcntl_nocancel attribute_hidden; +__typeof (__fcntl) __fcntl_nocancel; +libc_hidden_proto (__fcntl_nocancel) #endif /* NOT_CANCEL_H */ diff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h index 532df316d5..59f752f950 100644 --- a/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h @@ -28,7 +28,6 @@ #else # define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 #endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h index 459b742f7a..bd606d5f8e 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h @@ -28,7 +28,6 @@ #else # define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 #endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h index 99adad19a0..2283b861cd 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h @@ -43,7 +43,6 @@ extern int __local_multiple_threads attribute_hidden; #else # define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 #endif diff --git a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h index 3f880bdf3b..b2deb1191b 100644 --- a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h @@ -27,7 +27,6 @@ #else # define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 #endif diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h index 412b31af10..7fe0deee63 100644 --- a/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h @@ -28,7 +28,6 @@ #else # define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 #endif diff --git a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h index 277709f848..a606b0ceaa 100644 --- a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h @@ -28,7 +28,6 @@ #else # define SINGLE_THREAD_P 1 -# define NO_CANCELLATION 1 #endif diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h index c1c07199ff..34f14c6bc9 100644 --- a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h @@ -43,7 +43,6 @@ extern int __local_multiple_threads attribute_hidden; #else # define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 #endif