* [PATCH 09/14] Consolidate non cancellable pause call
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
@ 2017-08-03 13:11 ` Adhemerval Zanella
2017-08-22 13:07 ` Adhemerval Zanella
2017-08-03 13:11 ` [PATCH 08/14] Consolidate non cancellable waitpid call Adhemerval Zanella
` (13 subsequent siblings)
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:11 UTC (permalink / raw)
To: libc-alpha
This patch consolidates all the non cancellable pause calls to use
the __pause_nocancel identifier. For non cancellable targets it will
be just a macro to call the default respective symbol while on Linux
will be a internal one.
Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
* nptl/pthread_mutex_lock.c (__pthread_mutex_lock_full): Replace
pause_not_cancel with __pause_nocancel.
* sysdeps/generic/not-cancel.h (pause_not_cancel): Remove macro.
(__pause_nocancel): New macro.
* sysdeps/unix/sysv/linux/not-cancel.h (pause_not_cancel): Remove
macro.
(__pause_nocancel): New prototype.
* sysdeps/unix/sysv/linux/pause.c (__pause_nocancel): New function.
---
ChangeLog | 9 +++++++++
include/unistd.h | 2 --
nptl/pthread_mutex_lock.c | 2 +-
sysdeps/generic/not-cancel.h | 2 +-
sysdeps/posix/pause.c | 15 ---------------
sysdeps/unix/sysv/linux/not-cancel.h | 10 ++--------
sysdeps/unix/sysv/linux/pause.c | 14 +++++++++++++-
7 files changed, 26 insertions(+), 28 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index e1df1c1..877c5d9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * nptl/pthread_mutex_lock.c (__pthread_mutex_lock_full): Replace
+ pause_not_cancel with __pause_nocancel.
+ * sysdeps/generic/not-cancel.h (pause_not_cancel): Remove macro.
+ (__pause_nocancel): New macro.
+ * sysdeps/unix/sysv/linux/not-cancel.h (pause_not_cancel): Remove
+ macro.
+ (__pause_nocancel): New prototype.
+ * sysdeps/unix/sysv/linux/pause.c (__pause_nocancel): New function.
+
* login/utmp_file.c (timeout_handler): Replace fcntl_not_cancel with
__fcntl_nocancel.
* sysdeps/generic/not-cancel.h (fcntl_not_cancel): Remove macro.
diff --git a/include/unistd.h b/include/unistd.h
index 7f1c2cc..a5625ed 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -172,8 +172,6 @@ extern __pid_t __libc_fork (void);
/* Suspend the process until a signal arrives.
This always returns -1 and sets `errno' to EINTR. */
extern int __libc_pause (void);
-/* Not cancelable variant. */
-extern int __pause_nocancel (void) attribute_hidden;
extern int __getlogin_r_loginuid (char *name, size_t namesize)
attribute_hidden;
diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
index 8c48503..b158607 100644
--- a/nptl/pthread_mutex_lock.c
+++ b/nptl/pthread_mutex_lock.c
@@ -428,7 +428,7 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
/* Delay the thread indefinitely. */
while (1)
- pause_not_cancel ();
+ __pause_nocancel ();
}
oldval = mutex->__data.__lock;
diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
index 3f924c8..f2140c2 100644
--- a/sysdeps/generic/not-cancel.h
+++ b/sysdeps/generic/not-cancel.h
@@ -38,7 +38,7 @@
(void) __writev (fd, iov, n)
# define __waitpid_nocancel(pid, stat_loc, options) \
__waitpid (pid, stat_loc, options)
-#define pause_not_cancel() \
+#define __pause_nocancel() \
__pause ()
#define nanosleep_not_cancel(requested_time, remaining) \
__nanosleep (requested_time, remaining)
diff --git a/sysdeps/posix/pause.c b/sysdeps/posix/pause.c
index 7996cd6..53e143d 100644
--- a/sysdeps/posix/pause.c
+++ b/sysdeps/posix/pause.c
@@ -39,18 +39,3 @@ __libc_pause (void)
weak_alias (__libc_pause, pause)
LIBC_CANCEL_HANDLED (); /* sigsuspend handles our cancellation. */
-
-#ifndef NO_CANCELLATION
-# include <not-cancel.h>
-
-int
-__pause_nocancel (void)
-{
- sigset_t set;
-
- __sigemptyset (&set);
- __sigprocmask (SIG_BLOCK, NULL, &set);
-
- return sigsuspend_not_cancel (&set);
-}
-#endif
diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
index ad46d62..89c1f46 100644
--- a/sysdeps/unix/sysv/linux/not-cancel.h
+++ b/sysdeps/unix/sysv/linux/not-cancel.h
@@ -78,14 +78,8 @@ __typeof (waitpid) __waitpid_nocancel;
libc_hidden_proto (__waitpid_nocancel)
/* Uncancelable pause. */
-#define pause_not_cancel() \
- ({ sigset_t set; \
- int __rc = INLINE_SYSCALL (rt_sigprocmask, 4, SIG_BLOCK, NULL, &set, \
- _NSIG / 8); \
- if (__rc == 0) \
- __rc = INLINE_SYSCALL (rt_sigsuspend, 2, &set, _NSIG / 8); \
- __rc; \
- })
+__typeof (pause) __pause_nocancel;
+libc_hidden_proto (__pause_nocancel)
/* Uncancelable nanosleep. */
#define nanosleep_not_cancel(requested_time, remaining) \
diff --git a/sysdeps/unix/sysv/linux/pause.c b/sysdeps/unix/sysv/linux/pause.c
index 4ccce9e..ad105d9 100644
--- a/sysdeps/unix/sysv/linux/pause.c
+++ b/sysdeps/unix/sysv/linux/pause.c
@@ -18,11 +18,12 @@
#include <signal.h>
#include <unistd.h>
+
#include <sysdep-cancel.h>
+#include <not-cancel.h>
/* Suspend the process until a signal arrives.
This always returns -1 and sets errno to EINTR. */
-
int
__libc_pause (void)
{
@@ -33,3 +34,14 @@ __libc_pause (void)
#endif
}
weak_alias (__libc_pause, pause)
+
+int
+__pause_nocancel (void)
+{
+#ifdef __NR_pause
+ return INLINE_SYSCALL_CALL (pause);
+#else
+ return INLINE_SYSCALL_CALL (ppoll, NULL, 0, NULL, NULL);
+#endif
+}
+libc_hidden_def (__pause_nocancel)
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 09/14] Consolidate non cancellable pause call
2017-08-03 13:11 ` [PATCH 09/14] Consolidate non cancellable pause call Adhemerval Zanella
@ 2017-08-22 13:07 ` Adhemerval Zanella
0 siblings, 0 replies; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-22 13:07 UTC (permalink / raw)
To: libc-alpha
Since this is a refactor, if no one opposes I will commit it shortly.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> This patch consolidates all the non cancellable pause calls to use
> the __pause_nocancel identifier. For non cancellable targets it will
> be just a macro to call the default respective symbol while on Linux
> will be a internal one.
>
> Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
>
> * nptl/pthread_mutex_lock.c (__pthread_mutex_lock_full): Replace
> pause_not_cancel with __pause_nocancel.
> * sysdeps/generic/not-cancel.h (pause_not_cancel): Remove macro.
> (__pause_nocancel): New macro.
> * sysdeps/unix/sysv/linux/not-cancel.h (pause_not_cancel): Remove
> macro.
> (__pause_nocancel): New prototype.
> * sysdeps/unix/sysv/linux/pause.c (__pause_nocancel): New function.
> ---
> ChangeLog | 9 +++++++++
> include/unistd.h | 2 --
> nptl/pthread_mutex_lock.c | 2 +-
> sysdeps/generic/not-cancel.h | 2 +-
> sysdeps/posix/pause.c | 15 ---------------
> sysdeps/unix/sysv/linux/not-cancel.h | 10 ++--------
> sysdeps/unix/sysv/linux/pause.c | 14 +++++++++++++-
> 7 files changed, 26 insertions(+), 28 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index e1df1c1..877c5d9 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,14 @@
> 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> + * nptl/pthread_mutex_lock.c (__pthread_mutex_lock_full): Replace
> + pause_not_cancel with __pause_nocancel.
> + * sysdeps/generic/not-cancel.h (pause_not_cancel): Remove macro.
> + (__pause_nocancel): New macro.
> + * sysdeps/unix/sysv/linux/not-cancel.h (pause_not_cancel): Remove
> + macro.
> + (__pause_nocancel): New prototype.
> + * sysdeps/unix/sysv/linux/pause.c (__pause_nocancel): New function.
> +
> * login/utmp_file.c (timeout_handler): Replace fcntl_not_cancel with
> __fcntl_nocancel.
> * sysdeps/generic/not-cancel.h (fcntl_not_cancel): Remove macro.
> diff --git a/include/unistd.h b/include/unistd.h
> index 7f1c2cc..a5625ed 100644
> --- a/include/unistd.h
> +++ b/include/unistd.h
> @@ -172,8 +172,6 @@ extern __pid_t __libc_fork (void);
> /* Suspend the process until a signal arrives.
> This always returns -1 and sets `errno' to EINTR. */
> extern int __libc_pause (void);
> -/* Not cancelable variant. */
> -extern int __pause_nocancel (void) attribute_hidden;
>
> extern int __getlogin_r_loginuid (char *name, size_t namesize)
> attribute_hidden;
> diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
> index 8c48503..b158607 100644
> --- a/nptl/pthread_mutex_lock.c
> +++ b/nptl/pthread_mutex_lock.c
> @@ -428,7 +428,7 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
>
> /* Delay the thread indefinitely. */
> while (1)
> - pause_not_cancel ();
> + __pause_nocancel ();
> }
>
> oldval = mutex->__data.__lock;
> diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
> index 3f924c8..f2140c2 100644
> --- a/sysdeps/generic/not-cancel.h
> +++ b/sysdeps/generic/not-cancel.h
> @@ -38,7 +38,7 @@
> (void) __writev (fd, iov, n)
> # define __waitpid_nocancel(pid, stat_loc, options) \
> __waitpid (pid, stat_loc, options)
> -#define pause_not_cancel() \
> +#define __pause_nocancel() \
> __pause ()
> #define nanosleep_not_cancel(requested_time, remaining) \
> __nanosleep (requested_time, remaining)
> diff --git a/sysdeps/posix/pause.c b/sysdeps/posix/pause.c
> index 7996cd6..53e143d 100644
> --- a/sysdeps/posix/pause.c
> +++ b/sysdeps/posix/pause.c
> @@ -39,18 +39,3 @@ __libc_pause (void)
> weak_alias (__libc_pause, pause)
>
> LIBC_CANCEL_HANDLED (); /* sigsuspend handles our cancellation. */
> -
> -#ifndef NO_CANCELLATION
> -# include <not-cancel.h>
> -
> -int
> -__pause_nocancel (void)
> -{
> - sigset_t set;
> -
> - __sigemptyset (&set);
> - __sigprocmask (SIG_BLOCK, NULL, &set);
> -
> - return sigsuspend_not_cancel (&set);
> -}
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
> index ad46d62..89c1f46 100644
> --- a/sysdeps/unix/sysv/linux/not-cancel.h
> +++ b/sysdeps/unix/sysv/linux/not-cancel.h
> @@ -78,14 +78,8 @@ __typeof (waitpid) __waitpid_nocancel;
> libc_hidden_proto (__waitpid_nocancel)
>
> /* Uncancelable pause. */
> -#define pause_not_cancel() \
> - ({ sigset_t set; \
> - int __rc = INLINE_SYSCALL (rt_sigprocmask, 4, SIG_BLOCK, NULL, &set, \
> - _NSIG / 8); \
> - if (__rc == 0) \
> - __rc = INLINE_SYSCALL (rt_sigsuspend, 2, &set, _NSIG / 8); \
> - __rc; \
> - })
> +__typeof (pause) __pause_nocancel;
> +libc_hidden_proto (__pause_nocancel)
>
> /* Uncancelable nanosleep. */
> #define nanosleep_not_cancel(requested_time, remaining) \
> diff --git a/sysdeps/unix/sysv/linux/pause.c b/sysdeps/unix/sysv/linux/pause.c
> index 4ccce9e..ad105d9 100644
> --- a/sysdeps/unix/sysv/linux/pause.c
> +++ b/sysdeps/unix/sysv/linux/pause.c
> @@ -18,11 +18,12 @@
>
> #include <signal.h>
> #include <unistd.h>
> +
> #include <sysdep-cancel.h>
> +#include <not-cancel.h>
>
> /* Suspend the process until a signal arrives.
> This always returns -1 and sets errno to EINTR. */
> -
> int
> __libc_pause (void)
> {
> @@ -33,3 +34,14 @@ __libc_pause (void)
> #endif
> }
> weak_alias (__libc_pause, pause)
> +
> +int
> +__pause_nocancel (void)
> +{
> +#ifdef __NR_pause
> + return INLINE_SYSCALL_CALL (pause);
> +#else
> + return INLINE_SYSCALL_CALL (ppoll, NULL, 0, NULL, NULL);
> +#endif
> +}
> +libc_hidden_def (__pause_nocancel)
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 08/14] Consolidate non cancellable waitpid call
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
2017-08-03 13:11 ` [PATCH 09/14] Consolidate non cancellable pause call Adhemerval Zanella
@ 2017-08-03 13:11 ` Adhemerval Zanella
2017-08-21 14:38 ` Adhemerval Zanella
2017-08-03 13:11 ` [PATCH 02/14] Consolidate non cancellable read call Adhemerval Zanella
` (12 subsequent siblings)
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:11 UTC (permalink / raw)
To: libc-alpha
This patch consolidates all the non cancellable waitpid calls to use
the __waitpid_nocancel identifier. For non cancellable targets it will
be just a macro to call the default respective symbol while on Linux
will be a internal one.
Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
* login/utmp_file.c (timeout_handler): Replace fcntl_not_cancel with
__fcntl_nocancel.
* sysdeps/generic/not-cancel.h (fcntl_not_cancel): Remove macro.
* sysdeps/unix/sysv/linux/not-cancel.h (fcntl_not_cancel): Likewise.
* sysdeps/unix/sysv/linux/waitpid.c (__waitpid_nocancel): New symbol.
---
libio/iopopen.c | 2 +-
sysdeps/generic/not-cancel.h | 2 +-
sysdeps/unix/sysv/linux/not-cancel.h | 7 +++----
sysdeps/unix/sysv/linux/waitpid.c | 15 ++++++++++++++-
4 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/libio/iopopen.c b/libio/iopopen.c
index 0c20cbb..a2ddebb 100644
--- a/libio/iopopen.c
+++ b/libio/iopopen.c
@@ -61,7 +61,7 @@ extern int _IO_dup2 (int fd, int fd2) __THROW;
#ifndef _IO_waitpid
#ifdef _LIBC
-#define _IO_waitpid waitpid_not_cancel
+#define _IO_waitpid __waitpid_nocancel
#else
#define _IO_waitpid waitpid
#endif
diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
index cf84550..3f924c8 100644
--- a/sysdeps/generic/not-cancel.h
+++ b/sysdeps/generic/not-cancel.h
@@ -36,7 +36,7 @@
__write (fd, buf, n)
#define __writev_nocancel_nostatus(fd, iov, n) \
(void) __writev (fd, iov, n)
-# define waitpid_not_cancel(pid, stat_loc, options) \
+# define __waitpid_nocancel(pid, stat_loc, options) \
__waitpid (pid, stat_loc, options)
#define pause_not_cancel() \
__pause ()
diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
index 8f567d3..ad46d62 100644
--- a/sysdeps/unix/sysv/linux/not-cancel.h
+++ b/sysdeps/unix/sysv/linux/not-cancel.h
@@ -25,6 +25,7 @@
#include <errno.h>
#include <unistd.h>
#include <sys/syscall.h>
+#include <sys/wait.h>
/* Non cancellable open syscall. */
__typeof (open) __open_nocancel;
@@ -73,10 +74,8 @@ __writev_nocancel_nostatus (int fd, const struct iovec *iov, int iovcnt)
}
/* Uncancelable waitpid. */
-#define __waitpid_nocancel(pid, stat_loc, options) \
- INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL)
-#define waitpid_not_cancel(pid, stat_loc, options) \
- __waitpid_nocancel(pid, stat_loc, options)
+__typeof (waitpid) __waitpid_nocancel;
+libc_hidden_proto (__waitpid_nocancel)
/* Uncancelable pause. */
#define pause_not_cancel() \
diff --git a/sysdeps/unix/sysv/linux/waitpid.c b/sysdeps/unix/sysv/linux/waitpid.c
index 2fed421..052462d 100644
--- a/sysdeps/unix/sysv/linux/waitpid.c
+++ b/sysdeps/unix/sysv/linux/waitpid.c
@@ -16,10 +16,12 @@
<http://www.gnu.org/licenses/>. */
#include <errno.h>
-#include <sysdep-cancel.h>
#include <stdlib.h>
#include <sys/wait.h>
+#include <sysdep-cancel.h>
+#include <not-cancel.h>
+
__pid_t
__waitpid (__pid_t pid, int *stat_loc, int options)
{
@@ -31,3 +33,14 @@ __waitpid (__pid_t pid, int *stat_loc, int options)
}
libc_hidden_def (__waitpid)
weak_alias (__waitpid, waitpid)
+
+__pid_t
+__waitpid_nocancel (__pid_t pid, int *stat_loc, int options)
+{
+#ifdef __NR_waitpid
+ return INLINE_SYSCALL_CALL (waitpid, pid, stat_loc, options);
+#else
+ return INLINE_SYSCALL_CALL (wait4, pid, stat_loc, options, NULL);
+#endif
+}
+libc_hidden_def (__waitpid_nocancel)
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 08/14] Consolidate non cancellable waitpid call
2017-08-03 13:11 ` [PATCH 08/14] Consolidate non cancellable waitpid call Adhemerval Zanella
@ 2017-08-21 14:38 ` Adhemerval Zanella
0 siblings, 0 replies; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-21 14:38 UTC (permalink / raw)
To: libc-alpha
Since this is a refactor, if no one opposes I will commit it shortly.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> This patch consolidates all the non cancellable waitpid calls to use
> the __waitpid_nocancel identifier. For non cancellable targets it will
> be just a macro to call the default respective symbol while on Linux
> will be a internal one.
>
> Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
>
> * login/utmp_file.c (timeout_handler): Replace fcntl_not_cancel with
> __fcntl_nocancel.
> * sysdeps/generic/not-cancel.h (fcntl_not_cancel): Remove macro.
> * sysdeps/unix/sysv/linux/not-cancel.h (fcntl_not_cancel): Likewise.
> * sysdeps/unix/sysv/linux/waitpid.c (__waitpid_nocancel): New symbol.
> ---
> libio/iopopen.c | 2 +-
> sysdeps/generic/not-cancel.h | 2 +-
> sysdeps/unix/sysv/linux/not-cancel.h | 7 +++----
> sysdeps/unix/sysv/linux/waitpid.c | 15 ++++++++++++++-
> 4 files changed, 19 insertions(+), 7 deletions(-)
>
> diff --git a/libio/iopopen.c b/libio/iopopen.c
> index 0c20cbb..a2ddebb 100644
> --- a/libio/iopopen.c
> +++ b/libio/iopopen.c
> @@ -61,7 +61,7 @@ extern int _IO_dup2 (int fd, int fd2) __THROW;
>
> #ifndef _IO_waitpid
> #ifdef _LIBC
> -#define _IO_waitpid waitpid_not_cancel
> +#define _IO_waitpid __waitpid_nocancel
> #else
> #define _IO_waitpid waitpid
> #endif
> diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
> index cf84550..3f924c8 100644
> --- a/sysdeps/generic/not-cancel.h
> +++ b/sysdeps/generic/not-cancel.h
> @@ -36,7 +36,7 @@
> __write (fd, buf, n)
> #define __writev_nocancel_nostatus(fd, iov, n) \
> (void) __writev (fd, iov, n)
> -# define waitpid_not_cancel(pid, stat_loc, options) \
> +# define __waitpid_nocancel(pid, stat_loc, options) \
> __waitpid (pid, stat_loc, options)
> #define pause_not_cancel() \
> __pause ()
> diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
> index 8f567d3..ad46d62 100644
> --- a/sysdeps/unix/sysv/linux/not-cancel.h
> +++ b/sysdeps/unix/sysv/linux/not-cancel.h
> @@ -25,6 +25,7 @@
> #include <errno.h>
> #include <unistd.h>
> #include <sys/syscall.h>
> +#include <sys/wait.h>
>
> /* Non cancellable open syscall. */
> __typeof (open) __open_nocancel;
> @@ -73,10 +74,8 @@ __writev_nocancel_nostatus (int fd, const struct iovec *iov, int iovcnt)
> }
>
> /* Uncancelable waitpid. */
> -#define __waitpid_nocancel(pid, stat_loc, options) \
> - INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL)
> -#define waitpid_not_cancel(pid, stat_loc, options) \
> - __waitpid_nocancel(pid, stat_loc, options)
> +__typeof (waitpid) __waitpid_nocancel;
> +libc_hidden_proto (__waitpid_nocancel)
>
> /* Uncancelable pause. */
> #define pause_not_cancel() \
> diff --git a/sysdeps/unix/sysv/linux/waitpid.c b/sysdeps/unix/sysv/linux/waitpid.c
> index 2fed421..052462d 100644
> --- a/sysdeps/unix/sysv/linux/waitpid.c
> +++ b/sysdeps/unix/sysv/linux/waitpid.c
> @@ -16,10 +16,12 @@
> <http://www.gnu.org/licenses/>. */
>
> #include <errno.h>
> -#include <sysdep-cancel.h>
> #include <stdlib.h>
> #include <sys/wait.h>
>
> +#include <sysdep-cancel.h>
> +#include <not-cancel.h>
> +
> __pid_t
> __waitpid (__pid_t pid, int *stat_loc, int options)
> {
> @@ -31,3 +33,14 @@ __waitpid (__pid_t pid, int *stat_loc, int options)
> }
> libc_hidden_def (__waitpid)
> weak_alias (__waitpid, waitpid)
> +
> +__pid_t
> +__waitpid_nocancel (__pid_t pid, int *stat_loc, int options)
> +{
> +#ifdef __NR_waitpid
> + return INLINE_SYSCALL_CALL (waitpid, pid, stat_loc, options);
> +#else
> + return INLINE_SYSCALL_CALL (wait4, pid, stat_loc, options, NULL);
> +#endif
> +}
> +libc_hidden_def (__waitpid_nocancel)
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 02/14] Consolidate non cancellable read call
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
2017-08-03 13:11 ` [PATCH 09/14] Consolidate non cancellable pause call Adhemerval Zanella
2017-08-03 13:11 ` [PATCH 08/14] Consolidate non cancellable waitpid call Adhemerval Zanella
@ 2017-08-03 13:11 ` Adhemerval Zanella
2017-08-17 20:59 ` Adhemerval Zanella
2017-08-03 13:12 ` [PATCH 14/14] Remove cancellation support for syscall generation Adhemerval Zanella
` (11 subsequent siblings)
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:11 UTC (permalink / raw)
To: libc-alpha
This patch consolidates all the non cancellable read calls to use
the __read_nocancel identifier. For non cancellable targets it will
be just a macro to call the default respective symbol while on Linux
will be a internal one.
Also, since it is used on libcrypto it is exported in GLIBC_PRIVATE
namespace.
Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
* sysdeps/generic/not-cancel.h (read_not_cancel): Remove macro.
(__read_nocancel): New macro.
* sysdeps/unix/sysv/linux/Versions (libc) [GLIBC_PRIVATE]: Add
__read_nocancel.
* sysdeps/unix/sysv/linux/not-cancel.h (__read_nocancel): Remove
macro.
(__read_nocancel): New prototype.
* sysdeps/unix/sysv/linux/read.c (__read_nocancel): New function.
* catgets/open_catalog.c (__open_catalog): Replace read_not_cancel
with __read_nocancel.
* intl/loadmsgcat.c (read): Likewise.
* libio/fileops.c (_IO_file_read): Likewise.
* locale/loadlocale.c (_nl_load_locale): Likewise.
* login/utmp_file.c (getutent_r_file): Likewise.
(internal_getut_r): Likewise.
(getutline_r_file): Likewise.
* sysdeps/unix/sysv/linux/fips-private.h (fips_enable_p): Likewise.
* sysdeps/unix/sysv/linux/gethostid.c (gethostid): Likewise.
* sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise.
* sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
Likewise.
* sysdeps/unix/sysv/linux/getsysstats.c (next_line): Likewise.
* sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
* sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock):
Likewise.
* sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps):
Likewise.
* sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap):
Likewise.
* sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np):
Likewise.
* sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise.
---
ChangeLog | 33 +++++++++++++++++++++++++++++
catgets/open_catalog.c | 2 +-
intl/loadmsgcat.c | 2 +-
libio/fileops.c | 2 +-
locale/loadlocale.c | 2 +-
login/utmp_file.c | 8 +++----
sysdeps/generic/not-cancel.h | 2 +-
sysdeps/unix/sysv/linux/Versions | 1 +
sysdeps/unix/sysv/linux/fips-private.h | 2 +-
sysdeps/unix/sysv/linux/gethostid.c | 2 +-
sysdeps/unix/sysv/linux/getloadavg.c | 2 +-
sysdeps/unix/sysv/linux/getlogin_r.c | 2 +-
sysdeps/unix/sysv/linux/getsysstats.c | 4 ++--
sysdeps/unix/sysv/linux/i386/smp.h | 2 +-
sysdeps/unix/sysv/linux/ia64/has_cpuclock.c | 2 +-
sysdeps/unix/sysv/linux/libc_fatal.c | 2 +-
sysdeps/unix/sysv/linux/malloc-sysdep.h | 2 +-
sysdeps/unix/sysv/linux/not-cancel.h | 10 +++------
sysdeps/unix/sysv/linux/pthread_getname.c | 2 +-
sysdeps/unix/sysv/linux/read.c | 12 +++++++++++
sysdeps/unix/sysv/linux/sysconf.c | 2 +-
21 files changed, 70 insertions(+), 28 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 04e9f71..5199a69 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,38 @@
2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * sysdeps/generic/not-cancel.h (read_not_cancel): Remove macro.
+ (__read_nocancel): New macro.
+ * sysdeps/unix/sysv/linux/Versions (libc) [GLIBC_PRIVATE]: Add
+ __read_nocancel.
+ * sysdeps/unix/sysv/linux/not-cancel.h (__read_nocancel): Remove
+ macro.
+ (__read_nocancel): New prototype.
+ * sysdeps/unix/sysv/linux/read.c (__read_nocancel): New function.
+ * catgets/open_catalog.c (__open_catalog): Replace read_not_cancel
+ with __read_nocancel.
+ * intl/loadmsgcat.c (read): Likewise.
+ * libio/fileops.c (_IO_file_read): Likewise.
+ * locale/loadlocale.c (_nl_load_locale): Likewise.
+ * login/utmp_file.c (getutent_r_file): Likewise.
+ (internal_getut_r): Likewise.
+ (getutline_r_file): Likewise.
+ * sysdeps/unix/sysv/linux/fips-private.h (fips_enable_p): Likewise.
+ * sysdeps/unix/sysv/linux/gethostid.c (gethostid): Likewise.
+ * sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise.
+ * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
+ Likewise.
+ * sysdeps/unix/sysv/linux/getsysstats.c (next_line): Likewise.
+ * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
+ * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock):
+ Likewise.
+ * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps):
+ Likewise.
+ * sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap):
+ Likewise.
+ * sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np):
+ Likewise.
+ * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise.
+
* sysdeps/generic/not-cancel.h (open_not_cancel): Remove macro.
(open_not_cancel_2): Likewise.
(open_nocancel): New macro.
diff --git a/catgets/open_catalog.c b/catgets/open_catalog.c
index 4621b26..d79a6b1 100644
--- a/catgets/open_catalog.c
+++ b/catgets/open_catalog.c
@@ -237,7 +237,7 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var,
/* Save read, handle partial reads. */
do
{
- size_t now = read_not_cancel (fd, (((char *) catalog->file_ptr)
+ size_t now = __read_nocancel (fd, (((char *) catalog->file_ptr)
+ (st.st_size - todo)), todo);
if (now == 0 || now == (size_t) -1)
{
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
index adca419..514e38f 100644
--- a/intl/loadmsgcat.c
+++ b/intl/loadmsgcat.c
@@ -447,7 +447,7 @@
file and the name space must not be polluted. */
# define open(name, flags) __open_nocancel (name, flags)
# define close(fd) close_not_cancel_no_status (fd)
-# define read(fd, buf, n) read_not_cancel (fd, buf, n)
+# define read(fd, buf, n) __read_nocancel (fd, buf, n)
# define mmap(addr, len, prot, flags, fd, offset) \
__mmap (addr, len, prot, flags, fd, offset)
# define munmap(addr, len) __munmap (addr, len)
diff --git a/libio/fileops.c b/libio/fileops.c
index 67f3d72..80bd3f5 100644
--- a/libio/fileops.c
+++ b/libio/fileops.c
@@ -1204,7 +1204,7 @@ _IO_ssize_t
_IO_file_read (_IO_FILE *fp, void *buf, _IO_ssize_t size)
{
return (__builtin_expect (fp->_flags2 & _IO_FLAGS2_NOTCANCEL, 0)
- ? read_not_cancel (fp->_fileno, buf, size)
+ ? __read_nocancel (fp->_fileno, buf, size)
: read (fp->_fileno, buf, size));
}
libc_hidden_def (_IO_file_read)
diff --git a/locale/loadlocale.c b/locale/loadlocale.c
index 9c69ad4..a733557 100644
--- a/locale/loadlocale.c
+++ b/locale/loadlocale.c
@@ -238,7 +238,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
char *p = (char *) filedata;
while (to_read > 0)
{
- nread = read_not_cancel (fd, p, to_read);
+ nread = __read_nocancel (fd, p, to_read);
if (__builtin_expect (nread, 1) <= 0)
{
free (filedata);
diff --git a/login/utmp_file.c b/login/utmp_file.c
index 1407116..61d03d6 100644
--- a/login/utmp_file.c
+++ b/login/utmp_file.c
@@ -187,7 +187,7 @@ getutent_r_file (struct utmp *buffer, struct utmp **result)
}
/* Read the next entry. */
- nbytes = read_not_cancel (file_fd, &last_entry, sizeof (struct utmp));
+ nbytes = __read_nocancel (file_fd, &last_entry, sizeof (struct utmp));
UNLOCK_FILE (file_fd);
@@ -231,7 +231,7 @@ internal_getut_r (const struct utmp *id, struct utmp *buffer,
while (1)
{
/* Read the next entry. */
- if (read_not_cancel (file_fd, buffer, sizeof (struct utmp))
+ if (__read_nocancel (file_fd, buffer, sizeof (struct utmp))
!= sizeof (struct utmp))
{
__set_errno (ESRCH);
@@ -253,7 +253,7 @@ internal_getut_r (const struct utmp *id, struct utmp *buffer,
while (1)
{
/* Read the next entry. */
- if (read_not_cancel (file_fd, buffer, sizeof (struct utmp))
+ if (__read_nocancel (file_fd, buffer, sizeof (struct utmp))
!= sizeof (struct utmp))
{
__set_errno (ESRCH);
@@ -329,7 +329,7 @@ getutline_r_file (const struct utmp *line, struct utmp *buffer,
while (1)
{
/* Read the next entry. */
- if (read_not_cancel (file_fd, &last_entry, sizeof (struct utmp))
+ if (__read_nocancel (file_fd, &last_entry, sizeof (struct utmp))
!= sizeof (struct utmp))
{
__set_errno (ESRCH);
diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
index a4f7b7b..4fada2f 100644
--- a/sysdeps/generic/not-cancel.h
+++ b/sysdeps/generic/not-cancel.h
@@ -34,7 +34,7 @@
__close (fd)
#define close_not_cancel_no_status(fd) \
(void) __close (fd)
-#define read_not_cancel(fd, buf, n) \
+#define __read_nocancel(fd, buf, n) \
__read (fd, buf, n)
#define write_not_cancel(fd, buf, n) \
__write (fd, buf, n)
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 3c64077..b553514 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -170,6 +170,7 @@ libc {
# functions used in other libraries
__syscall_rt_sigqueueinfo;
__open_nocancel;
+ __read_nocancel;
# functions used by nscd
__netlink_assert_response;
}
diff --git a/sysdeps/unix/sysv/linux/fips-private.h b/sysdeps/unix/sysv/linux/fips-private.h
index 3a83a0f..775f2c2 100644
--- a/sysdeps/unix/sysv/linux/fips-private.h
+++ b/sysdeps/unix/sysv/linux/fips-private.h
@@ -49,7 +49,7 @@ fips_enabled_p (void)
/* This is more than enough, the file contains a single integer. */
char buf[32];
ssize_t n;
- n = TEMP_FAILURE_RETRY (read_not_cancel (fd, buf, sizeof (buf) - 1));
+ n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, sizeof (buf) - 1));
close_not_cancel_no_status (fd);
if (n > 0)
diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c
index 3ea8656..6e19dee 100644
--- a/sysdeps/unix/sysv/linux/gethostid.c
+++ b/sysdeps/unix/sysv/linux/gethostid.c
@@ -80,7 +80,7 @@ gethostid (void)
fd = __open_nocancel (HOSTIDFILE, O_RDONLY|O_LARGEFILE, 0);
if (fd >= 0)
{
- ssize_t n = read_not_cancel (fd, &id, sizeof (id));
+ ssize_t n = __read_nocancel (fd, &id, sizeof (id));
close_not_cancel_no_status (fd);
diff --git a/sysdeps/unix/sysv/linux/getloadavg.c b/sysdeps/unix/sysv/linux/getloadavg.c
index 0bfe41d..64bad17 100644
--- a/sysdeps/unix/sysv/linux/getloadavg.c
+++ b/sysdeps/unix/sysv/linux/getloadavg.c
@@ -42,7 +42,7 @@ getloadavg (double loadavg[], int nelem)
ssize_t nread;
int i;
- nread = read_not_cancel (fd, buf, sizeof buf - 1);
+ nread = __read_nocancel (fd, buf, sizeof buf - 1);
close_not_cancel_no_status (fd);
if (nread <= 0)
return -1;
diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c
index 2519792..1de746b 100644
--- a/sysdeps/unix/sysv/linux/getlogin_r.c
+++ b/sysdeps/unix/sysv/linux/getlogin_r.c
@@ -41,7 +41,7 @@ __getlogin_r_loginuid (char *name, size_t namesize)
/* We are reading a 32-bit number. 12 bytes are enough for the text
representation. If not, something is wrong. */
char uidbuf[12];
- ssize_t n = TEMP_FAILURE_RETRY (read_not_cancel (fd, uidbuf,
+ ssize_t n = TEMP_FAILURE_RETRY (__read_nocancel (fd, uidbuf,
sizeof (uidbuf)));
close_not_cancel_no_status (fd);
diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
index e21a34c..d1400d6 100644
--- a/sysdeps/unix/sysv/linux/getsysstats.c
+++ b/sysdeps/unix/sysv/linux/getsysstats.c
@@ -85,7 +85,7 @@ next_line (int fd, char *const buffer, char **cp, char **re,
*re = buffer + (*re - *cp);
*cp = buffer;
- ssize_t n = read_not_cancel (fd, *re, buffer_end - *re);
+ ssize_t n = __read_nocancel (fd, *re, buffer_end - *re);
if (n < 0)
return NULL;
@@ -96,7 +96,7 @@ next_line (int fd, char *const buffer, char **cp, char **re,
{
/* Truncate too long lines. */
*re = buffer + 3 * (buffer_end - buffer) / 4;
- n = read_not_cancel (fd, *re, buffer_end - *re);
+ n = __read_nocancel (fd, *re, buffer_end - *re);
if (n < 0)
return NULL;
diff --git a/sysdeps/unix/sysv/linux/i386/smp.h b/sysdeps/unix/sysv/linux/i386/smp.h
index c24f2fd..eb1ac5d 100644
--- a/sysdeps/unix/sysv/linux/i386/smp.h
+++ b/sysdeps/unix/sysv/linux/i386/smp.h
@@ -43,7 +43,7 @@ is_smp_system (void)
/* This was not successful. Now try reading the /proc filesystem. */
int fd = __open_nocancel ("/proc/sys/kernel/version", O_RDONLY);
if (__builtin_expect (fd, 0) == -1
- || read_not_cancel (fd, u.buf, sizeof (u.buf)) <= 0)
+ || __read_nocancel (fd, u.buf, sizeof (u.buf)) <= 0)
/* This also didn't work. We give up and say it's a UP machine. */
u.buf[0] = '\0';
diff --git a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
index 04e395b..6aab1e8 100644
--- a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
+++ b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
@@ -37,7 +37,7 @@ has_cpuclock (void)
/* We expect the file to contain a single digit followed by
a newline. If the format changes we better not rely on
the file content. */
- if (read_not_cancel (fd, buf, sizeof buf) != 2
+ if (__read_nocancel (fd, buf, sizeof buf) != 2
|| buf[0] != '0' || buf[1] != '\n')
newval = -1;
diff --git a/sysdeps/unix/sysv/linux/libc_fatal.c b/sysdeps/unix/sysv/linux/libc_fatal.c
index 5b484cf..ca838a7 100644
--- a/sysdeps/unix/sysv/linux/libc_fatal.c
+++ b/sysdeps/unix/sysv/linux/libc_fatal.c
@@ -56,7 +56,7 @@ backtrace_and_maps (int do_abort, bool written, int fd)
int fd2 = __open_nocancel ("/proc/self/maps", O_RDONLY);
char buf[1024];
ssize_t n2;
- while ((n2 = read_not_cancel (fd2, buf, sizeof (buf))) > 0)
+ while ((n2 = __read_nocancel (fd2, buf, sizeof (buf))) > 0)
if (write_not_cancel (fd, buf, n2) != n2)
break;
close_not_cancel_no_status (fd2);
diff --git a/sysdeps/unix/sysv/linux/malloc-sysdep.h b/sysdeps/unix/sysv/linux/malloc-sysdep.h
index cb87b58..7a7acba 100644
--- a/sysdeps/unix/sysv/linux/malloc-sysdep.h
+++ b/sysdeps/unix/sysv/linux/malloc-sysdep.h
@@ -47,7 +47,7 @@ check_may_shrink_heap (void)
if (fd >= 0)
{
char val;
- ssize_t n = read_not_cancel (fd, &val, 1);
+ ssize_t n = __read_nocancel (fd, &val, 1);
may_shrink_heap = n > 0 && val == '2';
close_not_cancel_no_status (fd);
}
diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
index 8d897f0..3d26075 100644
--- a/sysdeps/unix/sysv/linux/not-cancel.h
+++ b/sysdeps/unix/sysv/linux/not-cancel.h
@@ -34,9 +34,9 @@ libc_hidden_proto (__open_nocancel)
__typeof (open64) __open64_nocancel;
libc_hidden_proto (__open64_nocancel)
-/* Uncancelable read. */
-#define __read_nocancel(fd, buf, len) \
- INLINE_SYSCALL (read, 3, fd, buf, len)
+/* Non cancellable read syscall. */
+__typeof (__read) __read_nocancel;
+libc_hidden_proto (__read_nocancel)
/* Uncancelable write. */
#define __write_nocancel(fd, buf, len) \
@@ -61,10 +61,6 @@ libc_hidden_proto (__open64_nocancel)
(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)
diff --git a/sysdeps/unix/sysv/linux/pthread_getname.c b/sysdeps/unix/sysv/linux/pthread_getname.c
index caab2cc..93c1dfd 100644
--- a/sysdeps/unix/sysv/linux/pthread_getname.c
+++ b/sysdeps/unix/sysv/linux/pthread_getname.c
@@ -50,7 +50,7 @@ pthread_getname_np (pthread_t th, char *buf, size_t len)
return errno;
int res = 0;
- ssize_t n = TEMP_FAILURE_RETRY (read_not_cancel (fd, buf, len));
+ ssize_t n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, len));
if (n < 0)
res = errno;
else
diff --git a/sysdeps/unix/sysv/linux/read.c b/sysdeps/unix/sysv/linux/read.c
index 2a02c1b..e021df8 100644
--- a/sysdeps/unix/sysv/linux/read.c
+++ b/sysdeps/unix/sysv/linux/read.c
@@ -18,6 +18,7 @@
#include <unistd.h>
#include <sysdep-cancel.h>
+#include <not-cancel.h>
/* Read NBYTES into BUF from FD. Return the number read or -1. */
ssize_t
@@ -31,3 +32,14 @@ libc_hidden_def (__read)
weak_alias (__libc_read, __read)
libc_hidden_def (read)
weak_alias (__libc_read, read)
+
+#if !IS_IN (rtld)
+ssize_t
+__read_nocancel (int fd, void *buf, size_t nbytes)
+{
+ return INLINE_SYSCALL_CALL (read, fd, buf, nbytes);
+}
+#else
+strong_alias (__libc_read, __read_nocancel)
+#endif
+libc_hidden_def (__read_nocancel)
diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c
index ab068ab..f9becfb 100644
--- a/sysdeps/unix/sysv/linux/sysconf.c
+++ b/sysdeps/unix/sysv/linux/sysconf.c
@@ -121,7 +121,7 @@ __sysconf (int name)
/* This is more than enough, the file contains a single integer. */
char buf[32];
ssize_t n;
- n = TEMP_FAILURE_RETRY (read_not_cancel (fd, buf, sizeof (buf) - 1));
+ n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, sizeof (buf) - 1));
close_not_cancel_no_status (fd);
if (n > 0)
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 02/14] Consolidate non cancellable read call
2017-08-03 13:11 ` [PATCH 02/14] Consolidate non cancellable read call Adhemerval Zanella
@ 2017-08-17 20:59 ` Adhemerval Zanella
0 siblings, 0 replies; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-17 20:59 UTC (permalink / raw)
To: libc-alpha
Since this is a refactor, if no one opposes I will commit it shortly.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> This patch consolidates all the non cancellable read calls to use
> the __read_nocancel identifier. For non cancellable targets it will
> be just a macro to call the default respective symbol while on Linux
> will be a internal one.
>
> Also, since it is used on libcrypto it is exported in GLIBC_PRIVATE
> namespace.
>
> Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
>
> * sysdeps/generic/not-cancel.h (read_not_cancel): Remove macro.
> (__read_nocancel): New macro.
> * sysdeps/unix/sysv/linux/Versions (libc) [GLIBC_PRIVATE]: Add
> __read_nocancel.
> * sysdeps/unix/sysv/linux/not-cancel.h (__read_nocancel): Remove
> macro.
> (__read_nocancel): New prototype.
> * sysdeps/unix/sysv/linux/read.c (__read_nocancel): New function.
> * catgets/open_catalog.c (__open_catalog): Replace read_not_cancel
> with __read_nocancel.
> * intl/loadmsgcat.c (read): Likewise.
> * libio/fileops.c (_IO_file_read): Likewise.
> * locale/loadlocale.c (_nl_load_locale): Likewise.
> * login/utmp_file.c (getutent_r_file): Likewise.
> (internal_getut_r): Likewise.
> (getutline_r_file): Likewise.
> * sysdeps/unix/sysv/linux/fips-private.h (fips_enable_p): Likewise.
> * sysdeps/unix/sysv/linux/gethostid.c (gethostid): Likewise.
> * sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise.
> * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
> Likewise.
> * sysdeps/unix/sysv/linux/getsysstats.c (next_line): Likewise.
> * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
> * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock):
> Likewise.
> * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps):
> Likewise.
> * sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap):
> Likewise.
> * sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np):
> Likewise.
> * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise.
> ---
> ChangeLog | 33 +++++++++++++++++++++++++++++
> catgets/open_catalog.c | 2 +-
> intl/loadmsgcat.c | 2 +-
> libio/fileops.c | 2 +-
> locale/loadlocale.c | 2 +-
> login/utmp_file.c | 8 +++----
> sysdeps/generic/not-cancel.h | 2 +-
> sysdeps/unix/sysv/linux/Versions | 1 +
> sysdeps/unix/sysv/linux/fips-private.h | 2 +-
> sysdeps/unix/sysv/linux/gethostid.c | 2 +-
> sysdeps/unix/sysv/linux/getloadavg.c | 2 +-
> sysdeps/unix/sysv/linux/getlogin_r.c | 2 +-
> sysdeps/unix/sysv/linux/getsysstats.c | 4 ++--
> sysdeps/unix/sysv/linux/i386/smp.h | 2 +-
> sysdeps/unix/sysv/linux/ia64/has_cpuclock.c | 2 +-
> sysdeps/unix/sysv/linux/libc_fatal.c | 2 +-
> sysdeps/unix/sysv/linux/malloc-sysdep.h | 2 +-
> sysdeps/unix/sysv/linux/not-cancel.h | 10 +++------
> sysdeps/unix/sysv/linux/pthread_getname.c | 2 +-
> sysdeps/unix/sysv/linux/read.c | 12 +++++++++++
> sysdeps/unix/sysv/linux/sysconf.c | 2 +-
> 21 files changed, 70 insertions(+), 28 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 04e9f71..5199a69 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,38 @@
> 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> + * sysdeps/generic/not-cancel.h (read_not_cancel): Remove macro.
> + (__read_nocancel): New macro.
> + * sysdeps/unix/sysv/linux/Versions (libc) [GLIBC_PRIVATE]: Add
> + __read_nocancel.
> + * sysdeps/unix/sysv/linux/not-cancel.h (__read_nocancel): Remove
> + macro.
> + (__read_nocancel): New prototype.
> + * sysdeps/unix/sysv/linux/read.c (__read_nocancel): New function.
> + * catgets/open_catalog.c (__open_catalog): Replace read_not_cancel
> + with __read_nocancel.
> + * intl/loadmsgcat.c (read): Likewise.
> + * libio/fileops.c (_IO_file_read): Likewise.
> + * locale/loadlocale.c (_nl_load_locale): Likewise.
> + * login/utmp_file.c (getutent_r_file): Likewise.
> + (internal_getut_r): Likewise.
> + (getutline_r_file): Likewise.
> + * sysdeps/unix/sysv/linux/fips-private.h (fips_enable_p): Likewise.
> + * sysdeps/unix/sysv/linux/gethostid.c (gethostid): Likewise.
> + * sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise.
> + * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
> + Likewise.
> + * sysdeps/unix/sysv/linux/getsysstats.c (next_line): Likewise.
> + * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
> + * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock):
> + Likewise.
> + * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps):
> + Likewise.
> + * sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap):
> + Likewise.
> + * sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np):
> + Likewise.
> + * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise.
> +
> * sysdeps/generic/not-cancel.h (open_not_cancel): Remove macro.
> (open_not_cancel_2): Likewise.
> (open_nocancel): New macro.
> diff --git a/catgets/open_catalog.c b/catgets/open_catalog.c
> index 4621b26..d79a6b1 100644
> --- a/catgets/open_catalog.c
> +++ b/catgets/open_catalog.c
> @@ -237,7 +237,7 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var,
> /* Save read, handle partial reads. */
> do
> {
> - size_t now = read_not_cancel (fd, (((char *) catalog->file_ptr)
> + size_t now = __read_nocancel (fd, (((char *) catalog->file_ptr)
> + (st.st_size - todo)), todo);
> if (now == 0 || now == (size_t) -1)
> {
> diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
> index adca419..514e38f 100644
> --- a/intl/loadmsgcat.c
> +++ b/intl/loadmsgcat.c
> @@ -447,7 +447,7 @@
> file and the name space must not be polluted. */
> # define open(name, flags) __open_nocancel (name, flags)
> # define close(fd) close_not_cancel_no_status (fd)
> -# define read(fd, buf, n) read_not_cancel (fd, buf, n)
> +# define read(fd, buf, n) __read_nocancel (fd, buf, n)
> # define mmap(addr, len, prot, flags, fd, offset) \
> __mmap (addr, len, prot, flags, fd, offset)
> # define munmap(addr, len) __munmap (addr, len)
> diff --git a/libio/fileops.c b/libio/fileops.c
> index 67f3d72..80bd3f5 100644
> --- a/libio/fileops.c
> +++ b/libio/fileops.c
> @@ -1204,7 +1204,7 @@ _IO_ssize_t
> _IO_file_read (_IO_FILE *fp, void *buf, _IO_ssize_t size)
> {
> return (__builtin_expect (fp->_flags2 & _IO_FLAGS2_NOTCANCEL, 0)
> - ? read_not_cancel (fp->_fileno, buf, size)
> + ? __read_nocancel (fp->_fileno, buf, size)
> : read (fp->_fileno, buf, size));
> }
> libc_hidden_def (_IO_file_read)
> diff --git a/locale/loadlocale.c b/locale/loadlocale.c
> index 9c69ad4..a733557 100644
> --- a/locale/loadlocale.c
> +++ b/locale/loadlocale.c
> @@ -238,7 +238,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
> char *p = (char *) filedata;
> while (to_read > 0)
> {
> - nread = read_not_cancel (fd, p, to_read);
> + nread = __read_nocancel (fd, p, to_read);
> if (__builtin_expect (nread, 1) <= 0)
> {
> free (filedata);
> diff --git a/login/utmp_file.c b/login/utmp_file.c
> index 1407116..61d03d6 100644
> --- a/login/utmp_file.c
> +++ b/login/utmp_file.c
> @@ -187,7 +187,7 @@ getutent_r_file (struct utmp *buffer, struct utmp **result)
> }
>
> /* Read the next entry. */
> - nbytes = read_not_cancel (file_fd, &last_entry, sizeof (struct utmp));
> + nbytes = __read_nocancel (file_fd, &last_entry, sizeof (struct utmp));
>
> UNLOCK_FILE (file_fd);
>
> @@ -231,7 +231,7 @@ internal_getut_r (const struct utmp *id, struct utmp *buffer,
> while (1)
> {
> /* Read the next entry. */
> - if (read_not_cancel (file_fd, buffer, sizeof (struct utmp))
> + if (__read_nocancel (file_fd, buffer, sizeof (struct utmp))
> != sizeof (struct utmp))
> {
> __set_errno (ESRCH);
> @@ -253,7 +253,7 @@ internal_getut_r (const struct utmp *id, struct utmp *buffer,
> while (1)
> {
> /* Read the next entry. */
> - if (read_not_cancel (file_fd, buffer, sizeof (struct utmp))
> + if (__read_nocancel (file_fd, buffer, sizeof (struct utmp))
> != sizeof (struct utmp))
> {
> __set_errno (ESRCH);
> @@ -329,7 +329,7 @@ getutline_r_file (const struct utmp *line, struct utmp *buffer,
> while (1)
> {
> /* Read the next entry. */
> - if (read_not_cancel (file_fd, &last_entry, sizeof (struct utmp))
> + if (__read_nocancel (file_fd, &last_entry, sizeof (struct utmp))
> != sizeof (struct utmp))
> {
> __set_errno (ESRCH);
> diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
> index a4f7b7b..4fada2f 100644
> --- a/sysdeps/generic/not-cancel.h
> +++ b/sysdeps/generic/not-cancel.h
> @@ -34,7 +34,7 @@
> __close (fd)
> #define close_not_cancel_no_status(fd) \
> (void) __close (fd)
> -#define read_not_cancel(fd, buf, n) \
> +#define __read_nocancel(fd, buf, n) \
> __read (fd, buf, n)
> #define write_not_cancel(fd, buf, n) \
> __write (fd, buf, n)
> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> index 3c64077..b553514 100644
> --- a/sysdeps/unix/sysv/linux/Versions
> +++ b/sysdeps/unix/sysv/linux/Versions
> @@ -170,6 +170,7 @@ libc {
> # functions used in other libraries
> __syscall_rt_sigqueueinfo;
> __open_nocancel;
> + __read_nocancel;
> # functions used by nscd
> __netlink_assert_response;
> }
> diff --git a/sysdeps/unix/sysv/linux/fips-private.h b/sysdeps/unix/sysv/linux/fips-private.h
> index 3a83a0f..775f2c2 100644
> --- a/sysdeps/unix/sysv/linux/fips-private.h
> +++ b/sysdeps/unix/sysv/linux/fips-private.h
> @@ -49,7 +49,7 @@ fips_enabled_p (void)
> /* This is more than enough, the file contains a single integer. */
> char buf[32];
> ssize_t n;
> - n = TEMP_FAILURE_RETRY (read_not_cancel (fd, buf, sizeof (buf) - 1));
> + n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, sizeof (buf) - 1));
> close_not_cancel_no_status (fd);
>
> if (n > 0)
> diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c
> index 3ea8656..6e19dee 100644
> --- a/sysdeps/unix/sysv/linux/gethostid.c
> +++ b/sysdeps/unix/sysv/linux/gethostid.c
> @@ -80,7 +80,7 @@ gethostid (void)
> fd = __open_nocancel (HOSTIDFILE, O_RDONLY|O_LARGEFILE, 0);
> if (fd >= 0)
> {
> - ssize_t n = read_not_cancel (fd, &id, sizeof (id));
> + ssize_t n = __read_nocancel (fd, &id, sizeof (id));
>
> close_not_cancel_no_status (fd);
>
> diff --git a/sysdeps/unix/sysv/linux/getloadavg.c b/sysdeps/unix/sysv/linux/getloadavg.c
> index 0bfe41d..64bad17 100644
> --- a/sysdeps/unix/sysv/linux/getloadavg.c
> +++ b/sysdeps/unix/sysv/linux/getloadavg.c
> @@ -42,7 +42,7 @@ getloadavg (double loadavg[], int nelem)
> ssize_t nread;
> int i;
>
> - nread = read_not_cancel (fd, buf, sizeof buf - 1);
> + nread = __read_nocancel (fd, buf, sizeof buf - 1);
> close_not_cancel_no_status (fd);
> if (nread <= 0)
> return -1;
> diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c
> index 2519792..1de746b 100644
> --- a/sysdeps/unix/sysv/linux/getlogin_r.c
> +++ b/sysdeps/unix/sysv/linux/getlogin_r.c
> @@ -41,7 +41,7 @@ __getlogin_r_loginuid (char *name, size_t namesize)
> /* We are reading a 32-bit number. 12 bytes are enough for the text
> representation. If not, something is wrong. */
> char uidbuf[12];
> - ssize_t n = TEMP_FAILURE_RETRY (read_not_cancel (fd, uidbuf,
> + ssize_t n = TEMP_FAILURE_RETRY (__read_nocancel (fd, uidbuf,
> sizeof (uidbuf)));
> close_not_cancel_no_status (fd);
>
> diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
> index e21a34c..d1400d6 100644
> --- a/sysdeps/unix/sysv/linux/getsysstats.c
> +++ b/sysdeps/unix/sysv/linux/getsysstats.c
> @@ -85,7 +85,7 @@ next_line (int fd, char *const buffer, char **cp, char **re,
> *re = buffer + (*re - *cp);
> *cp = buffer;
>
> - ssize_t n = read_not_cancel (fd, *re, buffer_end - *re);
> + ssize_t n = __read_nocancel (fd, *re, buffer_end - *re);
> if (n < 0)
> return NULL;
>
> @@ -96,7 +96,7 @@ next_line (int fd, char *const buffer, char **cp, char **re,
> {
> /* Truncate too long lines. */
> *re = buffer + 3 * (buffer_end - buffer) / 4;
> - n = read_not_cancel (fd, *re, buffer_end - *re);
> + n = __read_nocancel (fd, *re, buffer_end - *re);
> if (n < 0)
> return NULL;
>
> diff --git a/sysdeps/unix/sysv/linux/i386/smp.h b/sysdeps/unix/sysv/linux/i386/smp.h
> index c24f2fd..eb1ac5d 100644
> --- a/sysdeps/unix/sysv/linux/i386/smp.h
> +++ b/sysdeps/unix/sysv/linux/i386/smp.h
> @@ -43,7 +43,7 @@ is_smp_system (void)
> /* This was not successful. Now try reading the /proc filesystem. */
> int fd = __open_nocancel ("/proc/sys/kernel/version", O_RDONLY);
> if (__builtin_expect (fd, 0) == -1
> - || read_not_cancel (fd, u.buf, sizeof (u.buf)) <= 0)
> + || __read_nocancel (fd, u.buf, sizeof (u.buf)) <= 0)
> /* This also didn't work. We give up and say it's a UP machine. */
> u.buf[0] = '\0';
>
> diff --git a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
> index 04e395b..6aab1e8 100644
> --- a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
> +++ b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
> @@ -37,7 +37,7 @@ has_cpuclock (void)
> /* We expect the file to contain a single digit followed by
> a newline. If the format changes we better not rely on
> the file content. */
> - if (read_not_cancel (fd, buf, sizeof buf) != 2
> + if (__read_nocancel (fd, buf, sizeof buf) != 2
> || buf[0] != '0' || buf[1] != '\n')
> newval = -1;
>
> diff --git a/sysdeps/unix/sysv/linux/libc_fatal.c b/sysdeps/unix/sysv/linux/libc_fatal.c
> index 5b484cf..ca838a7 100644
> --- a/sysdeps/unix/sysv/linux/libc_fatal.c
> +++ b/sysdeps/unix/sysv/linux/libc_fatal.c
> @@ -56,7 +56,7 @@ backtrace_and_maps (int do_abort, bool written, int fd)
> int fd2 = __open_nocancel ("/proc/self/maps", O_RDONLY);
> char buf[1024];
> ssize_t n2;
> - while ((n2 = read_not_cancel (fd2, buf, sizeof (buf))) > 0)
> + while ((n2 = __read_nocancel (fd2, buf, sizeof (buf))) > 0)
> if (write_not_cancel (fd, buf, n2) != n2)
> break;
> close_not_cancel_no_status (fd2);
> diff --git a/sysdeps/unix/sysv/linux/malloc-sysdep.h b/sysdeps/unix/sysv/linux/malloc-sysdep.h
> index cb87b58..7a7acba 100644
> --- a/sysdeps/unix/sysv/linux/malloc-sysdep.h
> +++ b/sysdeps/unix/sysv/linux/malloc-sysdep.h
> @@ -47,7 +47,7 @@ check_may_shrink_heap (void)
> if (fd >= 0)
> {
> char val;
> - ssize_t n = read_not_cancel (fd, &val, 1);
> + ssize_t n = __read_nocancel (fd, &val, 1);
> may_shrink_heap = n > 0 && val == '2';
> close_not_cancel_no_status (fd);
> }
> diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
> index 8d897f0..3d26075 100644
> --- a/sysdeps/unix/sysv/linux/not-cancel.h
> +++ b/sysdeps/unix/sysv/linux/not-cancel.h
> @@ -34,9 +34,9 @@ libc_hidden_proto (__open_nocancel)
> __typeof (open64) __open64_nocancel;
> libc_hidden_proto (__open64_nocancel)
>
> -/* Uncancelable read. */
> -#define __read_nocancel(fd, buf, len) \
> - INLINE_SYSCALL (read, 3, fd, buf, len)
> +/* Non cancellable read syscall. */
> +__typeof (__read) __read_nocancel;
> +libc_hidden_proto (__read_nocancel)
>
> /* Uncancelable write. */
> #define __write_nocancel(fd, buf, len) \
> @@ -61,10 +61,6 @@ libc_hidden_proto (__open64_nocancel)
> (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)
> diff --git a/sysdeps/unix/sysv/linux/pthread_getname.c b/sysdeps/unix/sysv/linux/pthread_getname.c
> index caab2cc..93c1dfd 100644
> --- a/sysdeps/unix/sysv/linux/pthread_getname.c
> +++ b/sysdeps/unix/sysv/linux/pthread_getname.c
> @@ -50,7 +50,7 @@ pthread_getname_np (pthread_t th, char *buf, size_t len)
> return errno;
>
> int res = 0;
> - ssize_t n = TEMP_FAILURE_RETRY (read_not_cancel (fd, buf, len));
> + ssize_t n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, len));
> if (n < 0)
> res = errno;
> else
> diff --git a/sysdeps/unix/sysv/linux/read.c b/sysdeps/unix/sysv/linux/read.c
> index 2a02c1b..e021df8 100644
> --- a/sysdeps/unix/sysv/linux/read.c
> +++ b/sysdeps/unix/sysv/linux/read.c
> @@ -18,6 +18,7 @@
>
> #include <unistd.h>
> #include <sysdep-cancel.h>
> +#include <not-cancel.h>
>
> /* Read NBYTES into BUF from FD. Return the number read or -1. */
> ssize_t
> @@ -31,3 +32,14 @@ libc_hidden_def (__read)
> weak_alias (__libc_read, __read)
> libc_hidden_def (read)
> weak_alias (__libc_read, read)
> +
> +#if !IS_IN (rtld)
> +ssize_t
> +__read_nocancel (int fd, void *buf, size_t nbytes)
> +{
> + return INLINE_SYSCALL_CALL (read, fd, buf, nbytes);
> +}
> +#else
> +strong_alias (__libc_read, __read_nocancel)
> +#endif
> +libc_hidden_def (__read_nocancel)
> diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c
> index ab068ab..f9becfb 100644
> --- a/sysdeps/unix/sysv/linux/sysconf.c
> +++ b/sysdeps/unix/sysv/linux/sysconf.c
> @@ -121,7 +121,7 @@ __sysconf (int name)
> /* This is more than enough, the file contains a single integer. */
> char buf[32];
> ssize_t n;
> - n = TEMP_FAILURE_RETRY (read_not_cancel (fd, buf, sizeof (buf) - 1));
> + n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, sizeof (buf) - 1));
> close_not_cancel_no_status (fd);
>
> if (n > 0)
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 14/14] Remove cancellation support for syscall generation
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
` (2 preceding siblings ...)
2017-08-03 13:11 ` [PATCH 02/14] Consolidate non cancellable read call Adhemerval Zanella
@ 2017-08-03 13:12 ` Adhemerval Zanella
2017-08-23 17:23 ` Adhemerval Zanella
2017-08-03 13:12 ` [PATCH 03/14] Consolidate non cancellable write call Adhemerval Zanella
` (10 subsequent siblings)
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:12 UTC (permalink / raw)
To: libc-alpha
This patch removes the cancellation mark from the auto-generation syscall
script. Now all the cancellable syscalls are done throught C code using
the SYSCALL_CANCEL macro. It simplifies the assembly required to each
architecture port, since the SYSCALL_CANCEL uses the already defined
INLINE_SYSCALL macros, and allows a more straigh fix on cancellation
machanism (since no more specific assembly fixes will be required).
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.
* sysdeps/unix/make-syscalls.sh: Remove cancellable tagging for
syscall definitions.
* sysdeps/unix/syscall-template.S (SYSCALL_CANCELLABLE): Remove
definition.
* sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (__local_enable_asynccancel): Likewise.
[IS_IN (libpthread)] (__local_disable_asynccancel): Likewise.
[IS_IN (libc)] (__local_enable_asynccancel): Likewise.
[IS_IN (libc)] (__local_enable_asynccancel): Likewise.
[IS_IN (librt)] (__local_disable_asynccancel): Likewise.
[IS_IN (librt)] (__local_disable_asynccancel): Likewise.
(CENABLE): Likewise.
(CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (PSEUDO): Remove
defintion.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h (PSEUDO):
Remove definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
(SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/mips/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Remove file.
* sysdeps/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: New file.
* sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Remove file.
* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: New file.
* sysdeps/unix/sysv/linux/tile/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
* sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h (PSEUDO): Remove
definition.
(PSEUDO_END): Likewise.
[IS_IN (libpthread)] (CENABLE): Likewise.
[IS_IN (libpthread)] (CDISABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (libc)] (CENABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[IS_IN (librt)] (CDISABLE): Likewise.
[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
---
ChangeLog | 173 ++++++++++++++
sysdeps/unix/make-syscalls.sh | 4 -
sysdeps/unix/syscall-template.S | 7 +-
sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h | 87 +------
sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h | 131 +----------
sysdeps/unix/sysv/linux/arm/sysdep-cancel.h | 197 +---------------
sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h | 225 +------------------
sysdeps/unix/sysv/linux/i386/sysdep-cancel.h | 119 +---------
sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h | 194 +---------------
sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h | 108 +--------
sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h | 116 +---------
.../unix/sysv/linux/mips/mips64/sysdep-cancel.h | 249 ---------------------
sysdeps/unix/sysv/linux/mips/sysdep-cancel.h | 159 +------------
sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h | 110 +--------
.../sysv/linux/powerpc/powerpc32/sysdep-cancel.h | 118 ----------
.../sysv/linux/powerpc/powerpc64/sysdep-cancel.h | 147 ------------
sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h | 38 ++++
.../unix/sysv/linux/s390/s390-32/sysdep-cancel.h | 105 +--------
.../unix/sysv/linux/s390/s390-64/sysdep-cancel.h | 109 +--------
sysdeps/unix/sysv/linux/sh/sysdep-cancel.h | 136 +----------
.../unix/sysv/linux/sparc/sparc32/sysdep-cancel.h | 111 ---------
.../unix/sysv/linux/sparc/sparc64/sysdep-cancel.h | 109 ---------
sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h | 38 ++++
sysdeps/unix/sysv/linux/tile/sysdep-cancel.h | 123 +---------
sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h | 62 +----
25 files changed, 305 insertions(+), 2670 deletions(-)
delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
create mode 100644 sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
create mode 100644 sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
diff --git a/ChangeLog b/ChangeLog
index d0a78a1..a84bd55 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,178 @@
2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * sysdeps/unix/make-syscalls.sh: Remove cancellable tagging for
+ syscall definitions.
+ * sysdeps/unix/syscall-template.S (SYSCALL_CANCELLABLE): Remove
+ definition.
+ * sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (__local_enable_asynccancel): Likewise.
+ [IS_IN (libpthread)] (__local_disable_asynccancel): Likewise.
+ [IS_IN (libc)] (__local_enable_asynccancel): Likewise.
+ [IS_IN (libc)] (__local_enable_asynccancel): Likewise.
+ [IS_IN (librt)] (__local_disable_asynccancel): Likewise.
+ [IS_IN (librt)] (__local_disable_asynccancel): Likewise.
+ (CENABLE): Likewise.
+ (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (PSEUDO): Remove
+ defintion.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h (PSEUDO):
+ Remove definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/mips/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Remove file.
+ * sysdeps/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: New file.
+ * sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Remove file.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: New file.
+ * sysdeps/unix/sysv/linux/tile/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h (PSEUDO): Remove
+ definition.
+ (PSEUDO_END): Likewise.
+ [IS_IN (libpthread)] (CENABLE): Likewise.
+ [IS_IN (libpthread)] (CDISABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (libc)] (CENABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [IS_IN (librt)] (CDISABLE): Likewise.
+ [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+
* sysdeps/unix/sysv/linux/x86_64/syscalls.list (pread64): Remove.
(preadv64): Likewise.
(pwrite64(: Likewise.
diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh
index 123553c..042cfac 100644
--- a/sysdeps/unix/make-syscalls.sh
+++ b/sysdeps/unix/make-syscalls.sh
@@ -12,7 +12,6 @@
#
# Syscall Signature Prefixes:
#
-# C: cancellable (i.e., this syscall is a cancellation point)
# E: errno and return value are not set by the call
# V: errno is not set, but errno or zero (success) is returned from the call
#
@@ -171,11 +170,9 @@ while read file srcfile caller syscall args strong weak; do
;;
esac
- cancellable=0
noerrno=0
errval=0
case $args in
- C*) cancellable=1; args=`echo $args | sed 's/C:\?//'`;;
E*) noerrno=1; args=`echo $args | sed 's/E:\?//'`;;
V*) errval=1; args=`echo $args | sed 's/V:\?//'`;;
esac
@@ -258,7 +255,6 @@ while read file srcfile caller syscall args strong weak; do
(echo '#define SYSCALL_NAME $syscall'; \\
echo '#define SYSCALL_NARGS $nargs'; \\
echo '#define SYSCALL_SYMBOL $strong'; \\
- echo '#define SYSCALL_CANCELLABLE $cancellable'; \\
echo '#define SYSCALL_NOERRNO $noerrno'; \\
echo '#define SYSCALL_ERRVAL $errval'; \\
echo '#include <syscall-template.S>'; \\"
diff --git a/sysdeps/unix/syscall-template.S b/sysdeps/unix/syscall-template.S
index 4993ff5..d4584a9 100644
--- a/sysdeps/unix/syscall-template.S
+++ b/sysdeps/unix/syscall-template.S
@@ -27,7 +27,6 @@
SYSCALL_NAME syscall name
SYSCALL_NARGS number of arguments this call takes
SYSCALL_SYMBOL primary symbol name
- SYSCALL_CANCELLABLE 1 if the call is a cancelation point
SYSCALL_NOERRNO 1 to define a no-errno version (see below)
SYSCALL_ERRVAL 1 to define an error-value version (see below)
@@ -41,11 +40,7 @@
instructions long and the untrained eye might not distinguish them from
some compiled code that inexplicably lacks source line information. */
-#if SYSCALL_CANCELLABLE
-# include <sysdep-cancel.h>
-#else
-# include <sysdep.h>
-#endif
+#include <sysdep.h>
/* This indirection is needed so that SYMBOL gets macro-expanded. */
#define syscall_hidden_def(SYMBOL) hidden_def (SYMBOL)
diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
index 4be2259..d39b6a2 100644
--- a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
@@ -24,102 +24,23 @@
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .section ".text"; \
-ENTRY (__##syscall_name##_nocancel); \
-.Lpseudo_nocancel: \
- DO_CALL (syscall_name, args); \
-.Lpseudo_finish: \
- cmn x0, 4095; \
- b.cs .Lsyscall_error; \
- .subsection 2; \
- .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
-ENTRY (name); \
- SINGLE_THREAD_P(16); \
- cbz w16, .Lpseudo_nocancel; \
- /* Setup common stack frame no matter the number of args. \
- Also save the first arg, since it's basically free. */ \
- stp x30, x0, [sp, -64]!; \
- cfi_adjust_cfa_offset (64); \
- cfi_rel_offset (x30, 0); \
- DOCARGS_##args; /* save syscall args around CENABLE. */ \
- CENABLE; \
- mov x16, x0; /* save mask around syscall. */ \
- UNDOCARGS_##args; /* restore syscall args. */ \
- DO_CALL (syscall_name, args); \
- str x0, [sp, 8]; /* save result around CDISABLE. */ \
- mov x0, x16; /* restore mask for CDISABLE. */ \
- CDISABLE; \
- /* Break down the stack frame, restoring result at once. */ \
- ldp x30, x0, [sp], 64; \
- cfi_adjust_cfa_offset (-64); \
- cfi_restore (x30); \
- b .Lpseudo_finish; \
- cfi_endproc; \
- .size name, .-name; \
- .previous
-
-# undef PSEUDO_END
-# define PSEUDO_END(name) \
- SYSCALL_ERROR_HANDLER; \
- cfi_endproc
-
-# define DOCARGS_0
-# define DOCARGS_1
-# define DOCARGS_2 str x1, [sp, 16]
-# define DOCARGS_3 stp x1, x2, [sp, 16]
-# define DOCARGS_4 DOCARGS_3; str x3, [sp, 32]
-# define DOCARGS_5 DOCARGS_3; stp x3, x4, [sp, 32]
-# define DOCARGS_6 DOCARGS_5; str x5, [sp, 48]
-
-# define UNDOCARGS_0
-# define UNDOCARGS_1 ldr x0, [sp, 8]
-# define UNDOCARGS_2 ldp x0, x1, [sp, 8]
-# define UNDOCARGS_3 UNDOCARGS_1; ldp x1, x2, [sp, 16]
-# define UNDOCARGS_4 UNDOCARGS_2; ldp x2, x3, [sp, 24]
-# define UNDOCARGS_5 UNDOCARGS_3; ldp x3, x4, [sp, 32]
-# define UNDOCARGS_6 UNDOCARGS_4; ldp x4, x5, [sp, 40]
-
# if IS_IN (libpthread)
-# define CENABLE bl __pthread_enable_asynccancel
-# define CDISABLE bl __pthread_disable_asynccancel
# define __local_multiple_threads __pthread_multiple_threads
# elif IS_IN (libc)
-# define CENABLE bl __libc_enable_asynccancel
-# define CDISABLE bl __libc_disable_asynccancel
# define __local_multiple_threads __libc_multiple_threads
-# elif IS_IN (librt)
-# define CENABLE bl __librt_enable_asynccancel
-# define CDISABLE bl __librt_disable_asynccancel
-# else
-# error Unsupported library
# endif
# if IS_IN (libpthread) || IS_IN (libc)
-# ifndef __ASSEMBLER__
extern int __local_multiple_threads attribute_hidden;
-# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
-# else
-# define SINGLE_THREAD_P(R) \
- adrp x##R, __local_multiple_threads; \
- ldr w##R, [x##R, :lo12:__local_multiple_threads]
-# endif
+# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
# else
/* There is no __local_multiple_threads for librt, so use the TCB. */
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P(R) \
- mrs x##R, tpidr_el0; \
- sub x##R, x##R, PTHREAD_SIZEOF; \
- ldr w##R, [x##R, PTHREAD_MULTIPLE_THREADS_OFFSET]
-# endif
# endif
-#elif !defined __ASSEMBLER__
+#else
/* For rtld, et cetera. */
# define SINGLE_THREAD_P 1
@@ -127,8 +48,6 @@ extern int __local_multiple_threads attribute_hidden;
#endif
-#ifndef __ASSEMBLER__
# define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
index 66d6962..366cf31 100644
--- a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
@@ -17,147 +17,24 @@
#include <sysdep.h>
#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
+#include <nptl/pthreadP.h>
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-/* ??? Assumes that nothing comes between PSEUDO and PSEUDO_END
- besides "ret". */
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .globl __##syscall_name##_nocancel; \
- .type __##syscall_name##_nocancel, @function; \
- .usepv __##syscall_name##_nocancel, std; \
- .align 4; \
- cfi_startproc; \
-__LABEL(__##syscall_name##_nocancel) \
- ldgp gp, 0(pv); \
- PSEUDO_PROF; \
-__LABEL($pseudo_nocancel) \
- PSEUDO_PREPARE_ARGS; \
- lda v0, SYS_ify(syscall_name); \
- call_pal PAL_callsys; \
- bne a3, SYSCALL_ERROR_LABEL; \
-__LABEL($pseudo_ret) \
- .subsection 2; \
- .size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \
- .globl name; \
- .type name, @function; \
- .usepv name, std; \
- .align 4; \
- cfi_startproc; \
-__LABEL(name) \
- ldgp gp, 0(pv); \
- PSEUDO_PROF; \
- SINGLE_THREAD_P(t0); \
- beq t0, $pseudo_nocancel; \
- subq sp, 64, sp; \
- cfi_def_cfa_offset(64); \
- stq ra, 0(sp); \
- cfi_offset(ra, -64); \
- SAVE_ARGS_##args; \
- CENABLE; \
- LOAD_ARGS_##args; \
- /* Save the CENABLE return value in RA. That register \
- is preserved across syscall and the real return \
- address is saved on the stack. */ \
- mov v0, ra; \
- lda v0, SYS_ify(syscall_name); \
- call_pal PAL_callsys; \
- stq v0, 8(sp); \
- mov ra, a0; \
- bne a3, $multi_error; \
- CDISABLE; \
- ldq ra, 0(sp); \
- ldq v0, 8(sp); \
- addq sp, 64, sp; \
- cfi_remember_state; \
- cfi_restore(ra); \
- cfi_def_cfa_offset(0); \
- ret; \
- cfi_restore_state; \
-__LABEL($multi_error) \
- CDISABLE; \
- ldq ra, 0(sp); \
- ldq v0, 8(sp); \
- addq sp, 64, sp; \
- cfi_restore(ra); \
- cfi_def_cfa_offset(0); \
- SYSCALL_ERROR_FALLTHRU; \
- SYSCALL_ERROR_HANDLER; \
- cfi_endproc; \
- .previous
-
-# undef PSEUDO_END
-# define PSEUDO_END(sym) \
- cfi_endproc; \
- .subsection 2; \
- .size sym, .-sym
-
-# define SAVE_ARGS_0 /* Nothing. */
-# define SAVE_ARGS_1 SAVE_ARGS_0; stq a0, 8(sp)
-# define SAVE_ARGS_2 SAVE_ARGS_1; stq a1, 16(sp)
-# define SAVE_ARGS_3 SAVE_ARGS_2; stq a2, 24(sp)
-# define SAVE_ARGS_4 SAVE_ARGS_3; stq a3, 32(sp)
-# define SAVE_ARGS_5 SAVE_ARGS_4; stq a4, 40(sp)
-# define SAVE_ARGS_6 SAVE_ARGS_5; stq a5, 48(sp)
-
-# define LOAD_ARGS_0 /* Nothing. */
-# define LOAD_ARGS_1 LOAD_ARGS_0; ldq a0, 8(sp)
-# define LOAD_ARGS_2 LOAD_ARGS_1; ldq a1, 16(sp)
-# define LOAD_ARGS_3 LOAD_ARGS_2; ldq a2, 24(sp)
-# define LOAD_ARGS_4 LOAD_ARGS_3; ldq a3, 32(sp)
-# define LOAD_ARGS_5 LOAD_ARGS_4; ldq a4, 40(sp)
-# define LOAD_ARGS_6 LOAD_ARGS_5; ldq a5, 48(sp)
-
# if IS_IN (libpthread)
-# define __local_enable_asynccancel __pthread_enable_asynccancel
-# define __local_disable_asynccancel __pthread_disable_asynccancel
# define __local_multiple_threads __pthread_multiple_threads
# elif IS_IN (libc)
-# define __local_enable_asynccancel __libc_enable_asynccancel
-# define __local_disable_asynccancel __libc_disable_asynccancel
# define __local_multiple_threads __libc_multiple_threads
-# elif IS_IN (librt)
-# define __local_enable_asynccancel __librt_enable_asynccancel
-# define __local_disable_asynccancel __librt_disable_asynccancel
-# else
-# error Unsupported library
-# endif
-
-# ifdef PIC
-# define CENABLE bsr ra, __local_enable_asynccancel !samegp
-# define CDISABLE bsr ra, __local_disable_asynccancel !samegp
-# else
-# define CENABLE jsr ra, __local_enable_asynccancel; ldgp ra, 0(gp)
-# define CDISABLE jsr ra, __local_disable_asynccancel; ldgp ra, 0(gp)
# endif
# if IS_IN (libpthread) || IS_IN (libc)
-# ifndef __ASSEMBLER__
extern int __local_multiple_threads attribute_hidden;
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (__local_multiple_threads == 0, 1)
-# elif defined(PIC)
-# define SINGLE_THREAD_P(reg) ldl reg, __local_multiple_threads(gp) !gprel
-# else
-# define SINGLE_THREAD_P(reg) \
- ldah reg, __local_multiple_threads(gp) !gprelhigh; \
- ldl reg, __local_multiple_threads(reg) !gprellow
-# endif
# else
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P(reg) \
- call_pal PAL_rduniq; \
- ldl reg, MULTIPLE_THREADS_OFFSET($0)
-# endif
# endif
#else
@@ -167,8 +44,6 @@ extern int __local_multiple_threads attribute_hidden;
#endif
-#ifndef __ASSEMBLER__
# define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
index de12acf..738e749 100644
--- a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
@@ -23,210 +23,23 @@
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-/* NOTE: We do mark syscalls with unwind annotations, for the benefit of
- cancellation; but they're really only accurate at the point of the
- syscall. The ARM unwind directives are not rich enough without adding
- a custom personality function. */
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .text; \
- ENTRY (__##syscall_name##_nocancel); \
- CFI_SECTIONS; \
- DO_CALL (syscall_name, args); \
- cmn r0, $4096; \
- PSEUDO_RET; \
- END (__##syscall_name##_nocancel); \
- ENTRY (name); \
- SINGLE_THREAD_P; \
- DOARGS_##args; \
- bne .Lpseudo_cancel; \
- cfi_remember_state; \
- ldr r7, =SYS_ify (syscall_name); \
- swi 0x0; \
- UNDOARGS_##args; \
- cmn r0, $4096; \
- PSEUDO_RET; \
- cfi_restore_state; \
- .Lpseudo_cancel: \
- .fnstart; /* matched by the .fnend in UNDOARGS below. */ \
- DOCARGS_##args; /* save syscall args etc. around CENABLE. */ \
- CENABLE; \
- mov ip, r0; /* put mask in safe place. */ \
- UNDOCARGS_##args; /* restore syscall args. */ \
- ldr r7, =SYS_ify (syscall_name); \
- swi 0x0; /* do the call. */ \
- mov r7, r0; /* save syscall return value. */ \
- mov r0, ip; /* get mask back. */ \
- CDISABLE; \
- mov r0, r7; /* retrieve return value. */ \
- RESTORE_LR_##args; \
- UNDOARGS_##args; \
- cmn r0, $4096
-
-/* DOARGS pushes eight bytes on the stack for five arguments, twelve bytes for
- six arguments, and four bytes for fewer. In order to preserve doubleword
- alignment, sometimes we must save an extra register. */
-
-# define RESTART_UNWIND \
- .fnend; \
- .fnstart; \
- .save {r7}; \
- .save {lr}
-
-# define DOCARGS_0 \
- .save {r7}; \
- push {lr}; \
- cfi_adjust_cfa_offset (4); \
- cfi_rel_offset (lr, 0); \
- .save {lr}
-# define UNDOCARGS_0
-# define RESTORE_LR_0 \
- pop {lr}; \
- cfi_adjust_cfa_offset (-4); \
- cfi_restore (lr)
-
-# define DOCARGS_1 \
- .save {r7}; \
- push {r0, r1, lr}; \
- cfi_adjust_cfa_offset (12); \
- cfi_rel_offset (lr, 8); \
- .save {lr}; \
- .pad #8
-# define UNDOCARGS_1 \
- ldr r0, [sp], #8; \
- cfi_adjust_cfa_offset (-8); \
- RESTART_UNWIND
-# define RESTORE_LR_1 \
- RESTORE_LR_0
-
-# define DOCARGS_2 \
- .save {r7}; \
- push {r0, r1, lr}; \
- cfi_adjust_cfa_offset (12); \
- cfi_rel_offset (lr, 8); \
- .save {lr}; \
- .pad #8
-# define UNDOCARGS_2 \
- pop {r0, r1}; \
- cfi_adjust_cfa_offset (-8); \
- RESTART_UNWIND
-# define RESTORE_LR_2 \
- RESTORE_LR_0
-
-# define DOCARGS_3 \
- .save {r7}; \
- push {r0, r1, r2, r3, lr}; \
- cfi_adjust_cfa_offset (20); \
- cfi_rel_offset (lr, 16); \
- .save {lr}; \
- .pad #16
-# define UNDOCARGS_3 \
- pop {r0, r1, r2, r3}; \
- cfi_adjust_cfa_offset (-16); \
- RESTART_UNWIND
-# define RESTORE_LR_3 \
- RESTORE_LR_0
-
-# define DOCARGS_4 \
- .save {r7}; \
- push {r0, r1, r2, r3, lr}; \
- cfi_adjust_cfa_offset (20); \
- cfi_rel_offset (lr, 16); \
- .save {lr}; \
- .pad #16
-# define UNDOCARGS_4 \
- pop {r0, r1, r2, r3}; \
- cfi_adjust_cfa_offset (-16); \
- RESTART_UNWIND
-# define RESTORE_LR_4 \
- RESTORE_LR_0
-
-/* r4 is only stmfd'ed for correct stack alignment. */
-# define DOCARGS_5 \
- .save {r4, r7}; \
- push {r0, r1, r2, r3, r4, lr}; \
- cfi_adjust_cfa_offset (24); \
- cfi_rel_offset (lr, 20); \
- .save {lr}; \
- .pad #20
-# define UNDOCARGS_5 \
- pop {r0, r1, r2, r3}; \
- cfi_adjust_cfa_offset (-16); \
- .fnend; \
- .fnstart; \
- .save {r4, r7}; \
- .save {lr}; \
- .pad #4
-# define RESTORE_LR_5 \
- pop {r4, lr}; \
- cfi_adjust_cfa_offset (-8); \
- /* r4 will be marked as restored later. */ \
- cfi_restore (lr)
-
-# define DOCARGS_6 \
- .save {r4, r5, r7}; \
- push {r0, r1, r2, r3, lr}; \
- cfi_adjust_cfa_offset (20); \
- cfi_rel_offset (lr, 16); \
- .save {lr}; \
- .pad #16
-# define UNDOCARGS_6 \
- pop {r0, r1, r2, r3}; \
- cfi_adjust_cfa_offset (-16); \
- .fnend; \
- .fnstart; \
- .save {r4, r5, r7}; \
- .save {lr};
-# define RESTORE_LR_6 \
- RESTORE_LR_0
-
# if IS_IN (libpthread)
-# define CENABLE bl PLTJMP(__pthread_enable_asynccancel)
-# define CDISABLE bl PLTJMP(__pthread_disable_asynccancel)
# define __local_multiple_threads __pthread_multiple_threads
# elif IS_IN (libc)
-# define CENABLE bl PLTJMP(__libc_enable_asynccancel)
-# define CDISABLE bl PLTJMP(__libc_disable_asynccancel)
# define __local_multiple_threads __libc_multiple_threads
-# elif IS_IN (librt)
-# define CENABLE bl PLTJMP(__librt_enable_asynccancel)
-# define CDISABLE bl PLTJMP(__librt_disable_asynccancel)
-# else
-# error Unsupported library
# endif
# if IS_IN (libpthread) || IS_IN (libc)
-# ifndef __ASSEMBLER__
extern int __local_multiple_threads attribute_hidden;
-# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
-# else
-# define SINGLE_THREAD_P \
- LDST_PCREL(ldr, ip, ip, __local_multiple_threads); \
- teq ip, #0
-# endif
+# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
# else
/* There is no __local_multiple_threads for librt, so use the TCB. */
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P \
- push {r0, lr}; \
- cfi_adjust_cfa_offset (8); \
- cfi_rel_offset (lr, 4); \
- GET_TLS (lr); \
- NEGOFF_ADJ_BASE (r0, MULTIPLE_THREADS_OFFSET); \
- ldr ip, NEGOFF_OFF1 (r0, MULTIPLE_THREADS_OFFSET); \
- pop {r0, lr}; \
- cfi_adjust_cfa_offset (-8); \
- cfi_restore (lr); \
- teq ip, #0
-# endif
# endif
-#elif !defined __ASSEMBLER__
+#else
/* For rtld, et cetera. */
# define SINGLE_THREAD_P 1
@@ -234,8 +47,6 @@ extern int __local_multiple_threads attribute_hidden;
#endif
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
index 8b7f2b2..a6189a7 100644
--- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
@@ -23,215 +23,6 @@
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-# ifndef NO_ERROR
-# define NO_ERROR -0x1000
-# endif
-
-/* The syscall cancellation mechanism requires userspace
- assistance, the following code does roughly this:
-
- do arguments (read arg5 and arg6 to registers)
- setup frame
-
- check if there are threads, yes jump to pseudo_cancel
-
- unthreaded:
- syscall
- check syscall return (jump to pre_end)
- set errno
- set return to -1
- (jump to pre_end)
-
- pseudo_cancel:
- cenable
- syscall
- cdisable
- check syscall return (jump to pre_end)
- set errno
- set return to -1
-
- pre_end
- restore stack
-
- It is expected that 'ret' and 'END' macros will
- append an 'undo arguments' and 'return' to the
- this PSEUDO macro. */
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- ENTRY (__##syscall_name##_nocancel) \
- DOARGS_##args ASM_LINE_SEP \
- stwm TREG, 64(%sp) ASM_LINE_SEP \
- .cfi_def_cfa_offset -64 ASM_LINE_SEP \
- .cfi_offset TREG, 0 ASM_LINE_SEP \
- stw %sp, -4(%sp) ASM_LINE_SEP \
- stw %r19, -32(%sp) ASM_LINE_SEP \
- .cfi_offset 19, 32 ASM_LINE_SEP \
- /* Save r19 */ ASM_LINE_SEP \
- SAVE_PIC(TREG) ASM_LINE_SEP \
- /* Do syscall, delay loads # */ ASM_LINE_SEP \
- ble 0x100(%sr2,%r0) ASM_LINE_SEP \
- ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \
- ldi NO_ERROR,%r1 ASM_LINE_SEP \
- cmpb,>>=,n %r1,%ret0,L(pre_nc_end) ASM_LINE_SEP \
- /* Restore r19 from TREG */ ASM_LINE_SEP \
- LOAD_PIC(TREG) /* delay */ ASM_LINE_SEP \
- SYSCALL_ERROR_HANDLER ASM_LINE_SEP \
- /* Use TREG for temp storage */ ASM_LINE_SEP \
- copy %ret0, TREG /* delay */ ASM_LINE_SEP \
- /* OPTIMIZE: Don't reload r19 */ ASM_LINE_SEP \
- /* do a -1*syscall_ret0 */ ASM_LINE_SEP \
- sub %r0, TREG, TREG ASM_LINE_SEP \
- /* Store into errno location */ ASM_LINE_SEP \
- stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \
- /* return -1 as error */ ASM_LINE_SEP \
- ldi -1, %ret0 ASM_LINE_SEP \
-L(pre_nc_end): ASM_LINE_SEP \
- /* No need to LOAD_PIC */ ASM_LINE_SEP \
- /* Undo frame */ ASM_LINE_SEP \
- ldwm -64(%sp),TREG ASM_LINE_SEP \
- /* Restore rp before exit */ ASM_LINE_SEP \
- ldw -20(%sp), %rp ASM_LINE_SEP \
- ret ASM_LINE_SEP \
- END(__##syscall_name##_nocancel) ASM_LINE_SEP \
- /**********************************************/ASM_LINE_SEP \
- ENTRY (name) \
- DOARGS_##args ASM_LINE_SEP \
- stwm TREG, 64(%sp) ASM_LINE_SEP \
- .cfi_def_cfa_offset -64 ASM_LINE_SEP \
- .cfi_offset TREG, 0 ASM_LINE_SEP \
- stw %sp, -4(%sp) ASM_LINE_SEP \
- stw %r19, -32(%sp) ASM_LINE_SEP \
- .cfi_offset 19, 32 ASM_LINE_SEP \
- /* Done setting up frame, continue... */ ASM_LINE_SEP \
- SINGLE_THREAD_P ASM_LINE_SEP \
- cmpib,<>,n 0,%ret0,L(pseudo_cancel) ASM_LINE_SEP \
-L(unthreaded): ASM_LINE_SEP \
- /* Save r19 */ ASM_LINE_SEP \
- SAVE_PIC(TREG) ASM_LINE_SEP \
- /* Do syscall, delay loads # */ ASM_LINE_SEP \
- ble 0x100(%sr2,%r0) ASM_LINE_SEP \
- ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \
- ldi NO_ERROR,%r1 ASM_LINE_SEP \
- cmpb,>>=,n %r1,%ret0,L(pre_end) ASM_LINE_SEP \
- /* Restore r19 from TREG */ ASM_LINE_SEP \
- LOAD_PIC(TREG) /* delay */ ASM_LINE_SEP \
- SYSCALL_ERROR_HANDLER ASM_LINE_SEP \
- /* Use TREG for temp storage */ ASM_LINE_SEP \
- copy %ret0, TREG /* delay */ ASM_LINE_SEP \
- /* OPTIMIZE: Don't reload r19 */ ASM_LINE_SEP \
- /* do a -1*syscall_ret0 */ ASM_LINE_SEP \
- sub %r0, TREG, TREG ASM_LINE_SEP \
- /* Store into errno location */ ASM_LINE_SEP \
- stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \
- b L(pre_end) ASM_LINE_SEP \
- /* return -1 as error */ ASM_LINE_SEP \
- ldi -1, %ret0 /* delay */ ASM_LINE_SEP \
-L(pseudo_cancel): ASM_LINE_SEP \
- PUSHARGS_##args /* Save args */ ASM_LINE_SEP \
- /* Save r19 into TREG */ ASM_LINE_SEP \
- CENABLE /* FUNC CALL */ ASM_LINE_SEP \
- SAVE_PIC(TREG) /* delay */ ASM_LINE_SEP \
- /* restore syscall args */ ASM_LINE_SEP \
- POPARGS_##args ASM_LINE_SEP \
- /* save mask from cenable (use stub rp slot) */ ASM_LINE_SEP \
- stw %ret0, -24(%sp) ASM_LINE_SEP \
- /* ... SYSCALL ... */ ASM_LINE_SEP \
- ble 0x100(%sr2,%r0) ASM_LINE_SEP \
- ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \
- /* ............... */ ASM_LINE_SEP \
- LOAD_PIC(TREG) ASM_LINE_SEP \
- /* pass mask as arg0 to cdisable */ ASM_LINE_SEP \
- ldw -24(%sp), %r26 ASM_LINE_SEP \
- CDISABLE ASM_LINE_SEP \
- stw %ret0, -24(%sp) /* delay */ ASM_LINE_SEP \
- /* Restore syscall return */ ASM_LINE_SEP \
- ldw -24(%sp), %ret0 ASM_LINE_SEP \
- /* compare error */ ASM_LINE_SEP \
- ldi NO_ERROR,%r1 ASM_LINE_SEP \
- /* branch if no error */ ASM_LINE_SEP \
- cmpb,>>=,n %r1,%ret0,L(pre_end) ASM_LINE_SEP \
- LOAD_PIC(TREG) /* cond. nullify */ ASM_LINE_SEP \
- copy %ret0, TREG /* save syscall return */ ASM_LINE_SEP \
- SYSCALL_ERROR_HANDLER ASM_LINE_SEP \
- /* make syscall res value positive */ ASM_LINE_SEP \
- sub %r0, TREG, TREG /* delay */ ASM_LINE_SEP \
- /* No need to LOAD_PIC */ ASM_LINE_SEP \
- /* store into errno location */ ASM_LINE_SEP \
- stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \
- /* return -1 */ ASM_LINE_SEP \
- ldi -1, %ret0 ASM_LINE_SEP \
-L(pre_end): ASM_LINE_SEP \
- /* No need to LOAD_PIC */ ASM_LINE_SEP \
- /* Undo frame */ ASM_LINE_SEP \
- ldwm -64(%sp),TREG ASM_LINE_SEP \
- /* Restore rp before exit */ ASM_LINE_SEP \
- ldw -20(%sp), %rp ASM_LINE_SEP
-
-/* Save arguments into our frame */
-# define PUSHARGS_0 /* nothing to do */
-# define PUSHARGS_1 PUSHARGS_0 stw %r26, -36(%sr0,%sp) ASM_LINE_SEP \
- .cfi_offset 26, 28 ASM_LINE_SEP
-# define PUSHARGS_2 PUSHARGS_1 stw %r25, -40(%sr0,%sp) ASM_LINE_SEP \
- .cfi_offset 25, 24 ASM_LINE_SEP
-# define PUSHARGS_3 PUSHARGS_2 stw %r24, -44(%sr0,%sp) ASM_LINE_SEP \
- .cfi_offset 24, 20 ASM_LINE_SEP
-# define PUSHARGS_4 PUSHARGS_3 stw %r23, -48(%sr0,%sp) ASM_LINE_SEP \
- .cfi_offset 23, 16 ASM_LINE_SEP
-# define PUSHARGS_5 PUSHARGS_4 stw %r22, -52(%sr0,%sp) ASM_LINE_SEP \
- .cfi_offset 22, 12 ASM_LINE_SEP
-# define PUSHARGS_6 PUSHARGS_5 stw %r21, -56(%sr0,%sp) ASM_LINE_SEP \
- .cfi_offset 21, 8 ASM_LINE_SEP
-
-/* Bring them back from the stack */
-# define POPARGS_0 /* nothing to do */
-# define POPARGS_1 POPARGS_0 ldw -36(%sr0,%sp), %r26 ASM_LINE_SEP
-# define POPARGS_2 POPARGS_1 ldw -40(%sr0,%sp), %r25 ASM_LINE_SEP
-# define POPARGS_3 POPARGS_2 ldw -44(%sr0,%sp), %r24 ASM_LINE_SEP
-# define POPARGS_4 POPARGS_3 ldw -48(%sr0,%sp), %r23 ASM_LINE_SEP
-# define POPARGS_5 POPARGS_4 ldw -52(%sr0,%sp), %r22 ASM_LINE_SEP
-# define POPARGS_6 POPARGS_5 ldw -56(%sr0,%sp), %r21 ASM_LINE_SEP
-
-# if IS_IN (libpthread)
-# ifdef PIC
-# define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \
- bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP
-# define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \
- bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP
-# else
-# define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \
- bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP
-# define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \
- bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP
-# endif
-# elif IS_IN (libc)
-# ifdef PIC
-# define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \
- bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP
-# define CDISABLE .import __libc_disable_asynccancel,code ASM_LINE_SEP \
- bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP
-# else
-# define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \
- bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP
-# define CDISABLE .import __libc_disable_asynccancel,code ASM_LINE_SEP \
- bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP
-# endif
-# elif IS_IN (librt)
-# ifdef PIC
-# define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \
- bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP
-# define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \
- bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP
-# else
-# define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \
- bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP
-# define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \
- bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP
-# endif
-# else
-# error Unsupported library
-# endif
-
# if IS_IN (libpthread)
# define __local_multiple_threads __pthread_multiple_threads
# elif IS_IN (libc)
@@ -242,17 +33,11 @@ L(pre_end): ASM_LINE_SEP \
# error Unsupported library
# endif
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-# else
-/* Read the value of header.multiple_threads from the thread pointer */
-# define SINGLE_THREAD_P \
- mfctl %cr27, %ret0 ASM_LINE_SEP \
- ldw MULTIPLE_THREADS_THREAD_OFFSET(%sr0,%ret0),%ret0 ASM_LINE_SEP
-# endif
-#elif !defined __ASSEMBLER__
+
+#else
/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
@@ -261,8 +46,6 @@ L(pre_end): ASM_LINE_SEP \
#endif
/* IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) */
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
index ebf6019..34e2b6f 100644
--- a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
@@ -24,130 +24,17 @@
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .text; \
- ENTRY (name) \
- cmpl $0, %gs:MULTIPLE_THREADS_OFFSET; \
- jne L(pseudo_cancel); \
- .type __##syscall_name##_nocancel,@function; \
- .globl __##syscall_name##_nocancel; \
- __##syscall_name##_nocancel: \
- DO_CALL (syscall_name, args); \
- cmpl $-4095, %eax; \
- jae SYSCALL_ERROR_LABEL; \
- ret; \
- .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
- L(pseudo_cancel): \
- CENABLE \
- SAVE_OLDTYPE_##args \
- PUSHCARGS_##args \
- DOCARGS_##args \
- movl $SYS_ify (syscall_name), %eax; \
- ENTER_KERNEL; \
- POPCARGS_##args; \
- POPSTATE_##args \
- cmpl $-4095, %eax; \
- jae SYSCALL_ERROR_LABEL
-
-# define SAVE_OLDTYPE_0 movl %eax, %ecx;
-# define SAVE_OLDTYPE_1 SAVE_OLDTYPE_0
-# define SAVE_OLDTYPE_2 pushl %eax; cfi_adjust_cfa_offset (4);
-# define SAVE_OLDTYPE_3 SAVE_OLDTYPE_2
-# define SAVE_OLDTYPE_4 SAVE_OLDTYPE_2
-# define SAVE_OLDTYPE_5 SAVE_OLDTYPE_2
-# define SAVE_OLDTYPE_6 SAVE_OLDTYPE_2
-
-# define PUSHCARGS_0 /* No arguments to push. */
-# define DOCARGS_0 /* No arguments to frob. */
-# define POPCARGS_0 /* No arguments to pop. */
-# define _PUSHCARGS_0 /* No arguments to push. */
-# define _POPCARGS_0 /* No arguments to pop. */
-
-# define PUSHCARGS_1 movl %ebx, %edx; cfi_register (ebx, edx); PUSHCARGS_0
-# define DOCARGS_1 _DOARGS_1 (4)
-# define POPCARGS_1 POPCARGS_0; movl %edx, %ebx; cfi_restore (ebx);
-# define _PUSHCARGS_1 pushl %ebx; cfi_adjust_cfa_offset (4); \
- cfi_rel_offset (ebx, 0); _PUSHCARGS_0
-# define _POPCARGS_1 _POPCARGS_0; popl %ebx; \
- cfi_adjust_cfa_offset (-4); cfi_restore (ebx);
-
-# define PUSHCARGS_2 PUSHCARGS_1
-# define DOCARGS_2 _DOARGS_2 (12)
-# define POPCARGS_2 POPCARGS_1
-# define _PUSHCARGS_2 _PUSHCARGS_1
-# define _POPCARGS_2 _POPCARGS_1
-
-# define PUSHCARGS_3 _PUSHCARGS_2
-# define DOCARGS_3 _DOARGS_3 (20)
-# define POPCARGS_3 _POPCARGS_3
-# define _PUSHCARGS_3 _PUSHCARGS_2
-# define _POPCARGS_3 _POPCARGS_2
-
-# define PUSHCARGS_4 _PUSHCARGS_4
-# define DOCARGS_4 _DOARGS_4 (28)
-# define POPCARGS_4 _POPCARGS_4
-# define _PUSHCARGS_4 pushl %esi; cfi_adjust_cfa_offset (4); \
- cfi_rel_offset (esi, 0); _PUSHCARGS_3
-# define _POPCARGS_4 _POPCARGS_3; popl %esi; \
- cfi_adjust_cfa_offset (-4); cfi_restore (esi);
-
-# define PUSHCARGS_5 _PUSHCARGS_5
-# define DOCARGS_5 _DOARGS_5 (36)
-# define POPCARGS_5 _POPCARGS_5
-# define _PUSHCARGS_5 pushl %edi; cfi_adjust_cfa_offset (4); \
- cfi_rel_offset (edi, 0); _PUSHCARGS_4
-# define _POPCARGS_5 _POPCARGS_4; popl %edi; \
- cfi_adjust_cfa_offset (-4); cfi_restore (edi);
-
-# define PUSHCARGS_6 _PUSHCARGS_6
-# define DOCARGS_6 _DOARGS_6 (44)
-# define POPCARGS_6 _POPCARGS_6
-# define _PUSHCARGS_6 pushl %ebp; cfi_adjust_cfa_offset (4); \
- cfi_rel_offset (ebp, 0); _PUSHCARGS_5
-# define _POPCARGS_6 _POPCARGS_5; popl %ebp; \
- cfi_adjust_cfa_offset (-4); cfi_restore (ebp);
-
-# if IS_IN (libpthread)
-# define CENABLE call __pthread_enable_asynccancel;
-# define CDISABLE call __pthread_disable_asynccancel
-# elif IS_IN (libc)
-# define CENABLE call __libc_enable_asynccancel;
-# define CDISABLE call __libc_disable_asynccancel
-# elif IS_IN (librt)
-# define CENABLE call __librt_enable_asynccancel;
-# define CDISABLE call __librt_disable_asynccancel
-# else
-# error Unsupported library
-# endif
-# define POPSTATE_0 \
- pushl %eax; cfi_adjust_cfa_offset (4); movl %ecx, %eax; \
- CDISABLE; popl %eax; cfi_adjust_cfa_offset (-4);
-# define POPSTATE_1 POPSTATE_0
-# define POPSTATE_2 xchgl (%esp), %eax; CDISABLE; popl %eax; \
- cfi_adjust_cfa_offset (-4);
-# define POPSTATE_3 POPSTATE_2
-# define POPSTATE_4 POPSTATE_3
-# define POPSTATE_5 POPSTATE_4
-# define POPSTATE_6 POPSTATE_5
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P cmpl $0, %gs:MULTIPLE_THREADS_OFFSET
-# endif
-#elif !defined __ASSEMBLER__
+#else
# define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
index 7c7f619..96d04de 100644
--- a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
@@ -23,201 +23,13 @@
#endif
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# undef PSEUDO
-
-# if IS_IN (libc)
-# define SYSDEP_CANCEL_ERRNO __libc_errno
-# else
-# define SYSDEP_CANCEL_ERRNO errno
-# endif
-# define SYSDEP_CANCEL_ERROR(args) \
-.section .gnu.linkonce.t.__syscall_error_##args, "ax"; \
- .align 32; \
- .proc __syscall_error_##args; \
- .global __syscall_error_##args; \
- .hidden __syscall_error_##args; \
- .size __syscall_error_##args, 64; \
-__syscall_error_##args: \
- .prologue; \
- .regstk args, 5, args, 0; \
- .save ar.pfs, loc0; \
- .save rp, loc1; \
- .body; \
- addl loc4 = @ltoff(@tprel(SYSDEP_CANCEL_ERRNO)), gp;; \
- ld8 loc4 = [loc4]; \
- mov rp = loc1;; \
- mov r8 = -1; \
- add loc4 = loc4, r13;; \
- st4 [loc4] = loc3; \
- mov ar.pfs = loc0
-
-# ifndef USE_DL_SYSINFO
-
-# define PSEUDO(name, syscall_name, args) \
-.text; \
-ENTRY (name) \
- adds r14 = MULTIPLE_THREADS_OFFSET, r13;; \
- ld4 r14 = [r14]; \
- mov r15 = SYS_ify(syscall_name);; \
- cmp4.ne p6, p7 = 0, r14; \
-(p6) br.cond.spnt .Lpseudo_cancel;; \
- break __BREAK_SYSCALL;; \
- cmp.eq p6,p0=-1,r10; \
-(p6) br.cond.spnt.few __syscall_error; \
- ret;; \
- .endp name; \
- .proc __GC_##name; \
- .globl __GC_##name; \
- .hidden __GC_##name; \
-__GC_##name: \
-.Lpseudo_cancel: \
- .prologue; \
- .regstk args, 5, args, 0; \
- .save ar.pfs, loc0; \
- alloc loc0 = ar.pfs, args, 5, args, 0; \
- .save rp, loc1; \
- mov loc1 = rp;; \
- .body; \
- CENABLE;; \
- mov loc2 = r8; \
- COPY_ARGS_##args \
- mov r15 = SYS_ify(syscall_name); \
- break __BREAK_SYSCALL;; \
- mov loc3 = r8; \
- mov loc4 = r10; \
- mov out0 = loc2; \
- CDISABLE;; \
- cmp.eq p6,p0=-1,loc4; \
-(p6) br.cond.spnt.few __syscall_error_##args; \
- mov r8 = loc3; \
- mov rp = loc1; \
- mov ar.pfs = loc0; \
-.Lpseudo_end: \
- ret; \
- .endp __GC_##name; \
- SYSDEP_CANCEL_ERROR(args)
-
-# else /* USE_DL_SYSINFO */
-
-# define PSEUDO(name, syscall_name, args) \
-.text; \
-ENTRY (name) \
- .prologue; \
- adds r2 = SYSINFO_OFFSET, r13; \
- adds r14 = MULTIPLE_THREADS_OFFSET, r13; \
- .save ar.pfs, r11; \
- mov r11 = ar.pfs;; \
- .body; \
- ld4 r14 = [r14]; \
- ld8 r2 = [r2]; \
- mov r15 = SYS_ify(syscall_name);; \
- cmp4.ne p6, p7 = 0, r14; \
- mov b7 = r2; \
-(p6) br.cond.spnt .Lpseudo_cancel; \
- br.call.sptk.many b6 = b7;; \
- mov ar.pfs = r11; \
- cmp.eq p6,p0 = -1, r10; \
-(p6) br.cond.spnt.few __syscall_error; \
- ret;; \
- .endp name; \
- \
- .proc __##syscall_name##_nocancel; \
- .globl __##syscall_name##_nocancel; \
-__##syscall_name##_nocancel: \
- .prologue; \
- adds r2 = SYSINFO_OFFSET, r13; \
- .save ar.pfs, r11; \
- mov r11 = ar.pfs;; \
- .body; \
- ld8 r2 = [r2]; \
- mov r15 = SYS_ify(syscall_name);; \
- mov b7 = r2; \
- br.call.sptk.many b6 = b7;; \
- mov ar.pfs = r11; \
- cmp.eq p6,p0 = -1, r10; \
-(p6) br.cond.spnt.few __syscall_error; \
- ret;; \
- .endp __##syscall_name##_nocancel; \
- \
- .proc __GC_##name; \
- .globl __GC_##name; \
- .hidden __GC_##name; \
-__GC_##name: \
-.Lpseudo_cancel: \
- .prologue; \
- .regstk args, 5, args, 0; \
- .save ar.pfs, loc0; \
- alloc loc0 = ar.pfs, args, 5, args, 0; \
- adds loc4 = SYSINFO_OFFSET, r13; \
- .save rp, loc1; \
- mov loc1 = rp;; \
- .body; \
- ld8 loc4 = [loc4]; \
- CENABLE;; \
- mov loc2 = r8; \
- mov b7 = loc4; \
- COPY_ARGS_##args \
- mov r15 = SYS_ify(syscall_name); \
- br.call.sptk.many b6 = b7;; \
- mov loc3 = r8; \
- mov loc4 = r10; \
- mov out0 = loc2; \
- CDISABLE;; \
- cmp.eq p6,p0=-1,loc4; \
-(p6) br.cond.spnt.few __syscall_error_##args; \
- mov r8 = loc3; \
- mov rp = loc1; \
- mov ar.pfs = loc0; \
-.Lpseudo_end: \
- ret; \
- .endp __GC_##name; \
- SYSDEP_CANCEL_ERROR(args)
-
-# endif /* USE_DL_SYSINFO */
-
-# undef PSEUDO_END
-# define PSEUDO_END(name) .endp
-
-# if IS_IN (libpthread)
-# define CENABLE br.call.sptk.many b0 = __pthread_enable_asynccancel
-# define CDISABLE br.call.sptk.many b0 = __pthread_disable_asynccancel
-# elif IS_IN (libc)
-# define CENABLE br.call.sptk.many b0 = __libc_enable_asynccancel
-# define CDISABLE br.call.sptk.many b0 = __libc_disable_asynccancel
-# elif IS_IN (librt)
-# define CENABLE br.call.sptk.many b0 = __librt_enable_asynccancel
-# define CDISABLE br.call.sptk.many b0 = __librt_disable_asynccancel
-# else
-# error Unsupported library
-# endif
-
-# define COPY_ARGS_0 /* Nothing */
-# define COPY_ARGS_1 COPY_ARGS_0 mov out0 = in0;
-# define COPY_ARGS_2 COPY_ARGS_1 mov out1 = in1;
-# define COPY_ARGS_3 COPY_ARGS_2 mov out2 = in2;
-# define COPY_ARGS_4 COPY_ARGS_3 mov out3 = in3;
-# define COPY_ARGS_5 COPY_ARGS_4 mov out4 = in4;
-# define COPY_ARGS_6 COPY_ARGS_5 mov out5 = in5;
-# define COPY_ARGS_7 COPY_ARGS_6 mov out6 = in6;
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P \
- adds r14 = MULTIPLE_THREADS_OFFSET, r13 ;; ld4 r14 = [r14] ;; cmp4.ne p6, p7 = 0, r14
-# endif
-
-#elif !defined __ASSEMBLER__
-
+#else
# define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
-
#endif
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
index 9bc9e13..1603c5f 100644
--- a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
@@ -18,121 +18,21 @@
#include <sysdep.h>
#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
+#include <nptl/pthreadP.h>
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .text; \
- ENTRY (name) \
- SINGLE_THREAD_P; \
- jne .Lpseudo_cancel; \
- .type __##syscall_name##_nocancel,@function; \
- .globl __##syscall_name##_nocancel; \
- __##syscall_name##_nocancel: \
- DO_CALL (syscall_name, args); \
- cmp.l &-4095, %d0; \
- jcc SYSCALL_ERROR_LABEL; \
- rts; \
- .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
- .Lpseudo_cancel: \
- CENABLE; \
- DOCARGS_##args \
- move.l %d0, -(%sp); /* Save result of CENABLE. */ \
- cfi_adjust_cfa_offset (4); \
- move.l &SYS_ify (syscall_name), %d0; \
- trap &0; \
- move.l %d0, %d2; \
- CDISABLE; \
- addq.l &4, %sp; /* Remove result of CENABLE from the stack. */ \
- cfi_adjust_cfa_offset (-4); \
- move.l %d2, %d0; \
- UNDOCARGS_##args \
- cmp.l &-4095, %d0; \
- jcc SYSCALL_ERROR_LABEL
-
-/* Note: we use D2 to save syscall's return value as D0 will be clobbered in
- CDISABLE. */
-# define DOCARGS_0 move.l %d2, -(%sp); \
- cfi_adjust_cfa_offset (4); cfi_rel_offset (%d2, 0);
-# define UNDOCARGS_0 move.l (%sp)+, %d2; \
- cfi_adjust_cfa_offset (-4); cfi_restore (%d2);
-
-# define DOCARGS_1 _DOCARGS_1 (4); DOCARGS_0
-# define _DOCARGS_1(n) move.l n(%sp), %d1;
-# define UNDOCARGS_1 UNDOCARGS_0
-
-# define DOCARGS_2 _DOCARGS_2 (8)
-# define _DOCARGS_2(n) DOCARGS_0 move.l n+4(%sp), %d2; _DOCARGS_1 (n)
-# define UNDOCARGS_2 UNDOCARGS_0
-
-# define DOCARGS_3 _DOCARGS_3 (12)
-# define _DOCARGS_3(n) move.l %d3, -(%sp); \
- cfi_adjust_cfa_offset (4); cfi_rel_offset (%d3, 0); \
- move.l n+4(%sp), %d3; _DOCARGS_2 (n)
-# define UNDOCARGS_3 UNDOCARGS_2 move.l (%sp)+, %d3; \
- cfi_adjust_cfa_offset (-4); cfi_restore (%d3);
-
-# define DOCARGS_4 _DOCARGS_4 (16)
-# define _DOCARGS_4(n) move.l %d4, -(%sp); \
- cfi_adjust_cfa_offset (4); cfi_rel_offset (%d4, 0); \
- move.l n+4(%sp), %d4; _DOCARGS_3 (n)
-# define UNDOCARGS_4 UNDOCARGS_3 move.l (%sp)+, %d4; \
- cfi_adjust_cfa_offset (-4); cfi_restore (%d4);
-
-# define DOCARGS_5 _DOCARGS_5 (20)
-# define _DOCARGS_5(n) move.l %d5, -(%sp); \
- cfi_adjust_cfa_offset (4); cfi_rel_offset (%d5, 0); \
- move.l n+4(%sp), %d5; _DOCARGS_4 (n)
-# define UNDOCARGS_5 UNDOCARGS_4 move.l (%sp)+, %d5; \
- cfi_adjust_cfa_offset (-4); cfi_restore (%d5);
-
-# define DOCARGS_6 _DOCARGS_6 (24)
-# define _DOCARGS_6(n) move.l n(%sp), %a0; _DOCARGS_5 (n-4)
-# define UNDOCARGS_6 UNDOCARGS_5
-
-# ifdef PIC
-# define PSEUDO_JMP(sym) jbsr sym ## @PLTPC
-# else
-# define PSEUDO_JMP(sym) jbsr sym
-# endif
-
-# if IS_IN (libpthread)
-# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
-# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel)
-# elif IS_IN (libc)
-# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
-# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel)
-# elif IS_IN (librt)
-# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
-# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel)
-# else
-# error Unsupported library
-# endif
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P \
- PSEUDO_JMP (__m68k_read_tp); \
- tst.l MULTIPLE_THREADS_OFFSET(%a0)
-# endif
-
-#elif !defined __ASSEMBLER__
+#else
# define SINGLE_THREAD_P (1)
# define NO_CANCELLATION (1)
#endif
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, \
1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
index dbcc2b2..7fe030b 100644
--- a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
@@ -23,136 +23,28 @@
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-# if !IS_IN (librt) || !defined(PIC)
-# define AC_STACK_SIZE 16 /* space for r15, async_cancel arg and 2 temp words */
-# define AC_SET_GOT /* empty */
-# define AC_RESTORE_GOT /* empty */
-# else
-# define AC_STACK_SIZE 20 /* extra 4 bytes for r20 */
-# define AC_SET_GOT \
- swi r20, r1, AC_STACK_SIZE-4; \
- mfs r20, rpc; \
- addik r20, r20, _GLOBAL_OFFSET_TABLE_+8;
-# define AC_RESTORE_GOT \
- lwi r20, r1, AC_STACK_SIZE-4;
-# endif
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .text; \
- ENTRY (name) \
- SINGLE_THREAD_P(r12); \
- bnei r12, L(pseudo_cancel); \
- .globl __##syscall_name##_nocancel; \
- .type __##syscall_name##_nocancel,@function; \
-__##syscall_name##_nocancel: \
- DO_CALL (syscall_name, args); \
- addik r4, r0, -4095; \
- cmpu r4, r4, r3; \
- bgei r4, SYSCALL_ERROR_LABEL; \
- rtsd r15, 8; \
- nop; \
- .size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \
-L(pseudo_cancel): \
- addik r1, r1, -AC_STACK_SIZE; \
- swi r15, r1, 0; \
- AC_SET_GOT \
- DOCARGS_##args \
- CENABLE; \
- swi r3, r1, 8; \
- UNDOCARGS_##args \
- DO_CALL (syscall_name, args); \
- swi r3, r1, 12; \
- lwi r5, r1, 8; \
- CDISABLE; \
- lwi r3, r1, 12; \
- lwi r15, r1, 0; \
- AC_RESTORE_GOT \
- addik r1, r1, AC_STACK_SIZE; \
- addik r4, r0, -4095; \
- cmpu r4, r4, r3; \
- bgei r4, SYSCALL_ERROR_LABEL; \
- rtsd r15, 8; \
- nop;
-
-/*
- * Macros to save/restore syscall arguments across CENABLE
- * The arguments are saved into the caller's stack (original r1 + 4)
- */
-
-# define DOCARGS_0
-# define DOCARGS_1 swi r5, r1, AC_STACK_SIZE + 4;
-# define DOCARGS_2 swi r6, r1, AC_STACK_SIZE + 8; DOCARGS_1
-# define DOCARGS_3 swi r7, r1, AC_STACK_SIZE + 12; DOCARGS_2
-# define DOCARGS_4 swi r8, r1, AC_STACK_SIZE + 16; DOCARGS_3
-# define DOCARGS_5 swi r9, r1, AC_STACK_SIZE + 20; DOCARGS_4
-# define DOCARGS_6 swi r10, r1, AC_STACK_SIZE + 24; DOCARGS_5
-
-# define UNDOCARGS_0
-# define UNDOCARGS_1 lwi r5, r1, AC_STACK_SIZE + 4;
-# define UNDOCARGS_2 UNDOCARGS_1 lwi r6, r1, AC_STACK_SIZE + 8;
-# define UNDOCARGS_3 UNDOCARGS_2 lwi r7, r1, AC_STACK_SIZE + 12;
-# define UNDOCARGS_4 UNDOCARGS_3 lwi r8, r1, AC_STACK_SIZE + 16;
-# define UNDOCARGS_5 UNDOCARGS_4 lwi r9, r1, AC_STACK_SIZE + 20;
-# define UNDOCARGS_6 UNDOCARGS_5 lwi r10, r1, AC_STACK_SIZE + 24;
-
-# ifdef PIC
-# define PSEUDO_JMP(sym) brlid r15, sym##@PLTPC; addk r0, r0, r0
-# else
-# define PSEUDO_JMP(sym) brlid r15, sym; addk r0, r0, r0
-# endif
-
# if IS_IN (libpthread)
-# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
-# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel)
# define __local_multiple_threads __pthread_multiple_threads
# elif IS_IN (libc)
-# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
-# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel)
# define __local_multiple_threads __libc_multiple_threads
-# elif IS_IN (librt)
-# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
-# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel)
-# else
-# error Unsupported library
# endif
-
# if IS_IN (libpthread) || IS_IN (libc)
-# ifndef __ASSEMBLER__
extern int __local_multiple_threads attribute_hidden;
-# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
-# else
-# if !defined PIC
-# define SINGLE_THREAD_P(reg) lwi reg, r0, __local_multiple_threads;
-# else
-# define SINGLE_THREAD_P(reg) \
- mfs reg, rpc; \
- addik reg, reg, _GLOBAL_OFFSET_TABLE_+8; \
- lwi reg, reg, __local_multiple_threads@GOT; \
- lwi reg, reg, 0;
-# endif
-# endif
+# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
# else
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P(reg) \
- lwi reg, r0, MULTIPLE_THREADS_OFFSET(reg)
-# endif
# endif
-#elif !defined __ASSEMBLER__
+#else
# define SINGLE_THREAD_P (1)
# define NO_CANCELLATION (1)
#endif
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
deleted file mode 100644
index 0ed3e3d..0000000
--- a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
+++ /dev/null
@@ -1,249 +0,0 @@
-/* Copyright (C) 2003-2017 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 <sysdep.h>
-#include <sysdeps/generic/sysdep.h>
-#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
-#include <sys/asm.h>
-
-/* Gas will put the initial save of $gp into the CIE, because it appears to
- happen before any instructions. So we use cfi_same_value instead of
- cfi_restore. */
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-#ifdef __PIC__
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .align 2; \
- L(pseudo_start): \
- cfi_startproc; \
- cfi_adjust_cfa_offset (STKSPACE); \
- cfi_rel_offset (gp, STKOFF_GP); \
- 99: PTR_LA t9,__syscall_error; \
- /* manual cpreturn */ \
- REG_L gp, STKOFF_GP(sp); \
- cfi_same_value (gp); \
- RESTORESTK; \
- jr t9; \
- .type __##syscall_name##_nocancel, @function; \
- .globl __##syscall_name##_nocancel; \
- __##syscall_name##_nocancel: \
- SAVESTK; \
- .cpsetup t9, STKOFF_GP, __##syscall_name##_nocancel; \
- cfi_rel_offset (gp, STKOFF_GP); \
- li v0, SYS_ify(syscall_name); \
- syscall; \
- bne a3, zero, SYSCALL_ERROR_LABEL; \
- /* manual cpreturn */ \
- REG_L gp, STKOFF_GP(sp); \
- cfi_same_value (gp); \
- RESTORESTK; \
- ret; \
- cfi_endproc; \
- .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
- ENTRY (name) \
- SAVESTK; \
- .cpsetup t9, STKOFF_GP, name; \
- cfi_rel_offset (gp, STKOFF_GP); \
- SINGLE_THREAD_P(v1); \
- bne zero, v1, L(pseudo_cancel); \
- .set noreorder; \
- li v0, SYS_ify(syscall_name); \
- syscall; \
- .set reorder; \
- bne a3, zero, SYSCALL_ERROR_LABEL; \
- /* manual cpreturn */ \
- REG_L gp, STKOFF_GP(sp); \
- cfi_same_value (gp); \
- RESTORESTK; \
- ret; \
- L(pseudo_cancel): \
- cfi_adjust_cfa_offset (STKSPACE); \
- cfi_rel_offset (gp, STKOFF_GP); \
- REG_S ra, STKOFF_RA(sp); \
- cfi_rel_offset (ra, STKOFF_RA); \
- PUSHARGS_##args; /* save syscall args */ \
- CENABLE; \
- REG_S v0, STKOFF_SVMSK(sp); /* save mask */ \
- POPARGS_##args; /* restore syscall args */ \
- .set noreorder; \
- li v0, SYS_ify (syscall_name); \
- syscall; \
- .set reorder; \
- REG_S v0, STKOFF_SC_V0(sp); /* save syscall result */ \
- REG_S a3, STKOFF_SC_ERR(sp); /* save syscall error flag */ \
- REG_L a0, STKOFF_SVMSK(sp); /* pass mask as arg1 */ \
- CDISABLE; \
- REG_L a3, STKOFF_SC_ERR(sp); /* restore syscall error flag */ \
- REG_L ra, STKOFF_RA(sp); /* restore return address */ \
- REG_L v0, STKOFF_SC_V0(sp); /* restore syscall result */ \
- bne a3, zero, SYSCALL_ERROR_LABEL; \
- /* manual cpreturn */ \
- REG_L gp, STKOFF_GP(sp); \
- cfi_same_value (gp); \
- RESTORESTK; \
- L(pseudo_end):
-#else
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .align 2; \
- L(pseudo_start): \
- cfi_startproc; \
- cfi_adjust_cfa_offset (STKSPACE); \
- 99: RESTORESTK; \
- j __syscall_error; \
- .type __##syscall_name##_nocancel, @function; \
- .globl __##syscall_name##_nocancel; \
- __##syscall_name##_nocancel: \
- SAVESTK; \
- li v0, SYS_ify(syscall_name); \
- syscall; \
- bne a3, zero, SYSCALL_ERROR_LABEL; \
- RESTORESTK; \
- ret; \
- cfi_endproc; \
- .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
- ENTRY (name) \
- SAVESTK; \
- SINGLE_THREAD_P(v1); \
- bne zero, v1, L(pseudo_cancel); \
- .set noreorder; \
- li v0, SYS_ify(syscall_name); \
- syscall; \
- .set reorder; \
- bne a3, zero, SYSCALL_ERROR_LABEL; \
- RESTORESTK; \
- ret; \
- L(pseudo_cancel): \
- cfi_adjust_cfa_offset (STKSPACE); \
- REG_S ra, STKOFF_RA(sp); \
- cfi_rel_offset (ra, STKOFF_RA); \
- PUSHARGS_##args; /* save syscall args */ \
- CENABLE; \
- REG_S v0, STKOFF_SVMSK(sp); /* save mask */ \
- POPARGS_##args; /* restore syscall args */ \
- .set noreorder; \
- li v0, SYS_ify (syscall_name); \
- syscall; \
- .set reorder; \
- REG_S v0, STKOFF_SC_V0(sp); /* save syscall result */ \
- REG_S a3, STKOFF_SC_ERR(sp); /* save syscall error flag */ \
- REG_L a0, STKOFF_SVMSK(sp); /* pass mask as arg1 */ \
- CDISABLE; \
- REG_L a3, STKOFF_SC_ERR(sp); /* restore syscall error flag */ \
- REG_L ra, STKOFF_RA(sp); /* restore return address */ \
- REG_L v0, STKOFF_SC_V0(sp); /* restore syscall result */ \
- bne a3, zero, SYSCALL_ERROR_LABEL; \
- RESTORESTK; \
- L(pseudo_end):
-#endif
-
-# undef PSEUDO_END
-# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym
-
-# define PUSHARGS_0 /* nothing to do */
-# define PUSHARGS_1 PUSHARGS_0 REG_S a0, STKOFF_A0(sp); cfi_rel_offset (a0, STKOFF_A0);
-# define PUSHARGS_2 PUSHARGS_1 REG_S a1, STKOFF_A1(sp); cfi_rel_offset (a1, STKOFF_A1);
-# define PUSHARGS_3 PUSHARGS_2 REG_S a2, STKOFF_A2(sp); cfi_rel_offset (a2, STKOFF_A2);
-# define PUSHARGS_4 PUSHARGS_3 REG_S a3, STKOFF_A3(sp); cfi_rel_offset (a3, STKOFF_A3);
-# define PUSHARGS_5 PUSHARGS_4 REG_S a4, STKOFF_A4(sp); cfi_rel_offset (a3, STKOFF_A4);
-# define PUSHARGS_6 PUSHARGS_5 REG_S a5, STKOFF_A5(sp); cfi_rel_offset (a3, STKOFF_A5);
-
-# define POPARGS_0 /* nothing to do */
-# define POPARGS_1 POPARGS_0 REG_L a0, STKOFF_A0(sp);
-# define POPARGS_2 POPARGS_1 REG_L a1, STKOFF_A1(sp);
-# define POPARGS_3 POPARGS_2 REG_L a2, STKOFF_A2(sp);
-# define POPARGS_4 POPARGS_3 REG_L a3, STKOFF_A3(sp);
-# define POPARGS_5 POPARGS_4 REG_L a4, STKOFF_A4(sp);
-# define POPARGS_6 POPARGS_5 REG_L a5, STKOFF_A5(sp);
-
-/* Save an even number of slots. Should be 0 if an even number of slots
- are used below, or SZREG if an odd number are used. */
-# ifdef __PIC__
-# define STK_PAD SZREG
-# else
-# define STK_PAD 0
-# endif
-
-/* Place values that we are more likely to use later in this sequence, i.e.
- closer to the SP at function entry. If you do that, the are more
- likely to already be in your d-cache. */
-# define STKOFF_A5 (STK_PAD)
-# define STKOFF_A4 (STKOFF_A5 + SZREG)
-# define STKOFF_A3 (STKOFF_A4 + SZREG)
-# define STKOFF_A2 (STKOFF_A3 + SZREG) /* MT and more args. */
-# define STKOFF_A1 (STKOFF_A2 + SZREG) /* MT and 2 args. */
-# define STKOFF_A0 (STKOFF_A1 + SZREG) /* MT and 1 arg. */
-# define STKOFF_RA (STKOFF_A0 + SZREG) /* Used if MT. */
-# define STKOFF_SC_V0 (STKOFF_RA + SZREG) /* Used if MT. */
-# define STKOFF_SC_ERR (STKOFF_SC_V0 + SZREG) /* Used if MT. */
-# define STKOFF_SVMSK (STKOFF_SC_ERR + SZREG) /* Used if MT. */
-
-# ifdef __PIC__
-# define STKOFF_GP (STKOFF_SVMSK + SZREG) /* Always used. */
-# define STKSPACE (STKOFF_GP + SZREG)
-# else
-# define STKSPACE (STKOFF_SVMSK + SZREG)
-# endif
-
-# define SAVESTK PTR_SUBU sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE)
-# define RESTORESTK PTR_ADDU sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE)
-
-# ifdef __PIC__
-# define PSEUDO_JMP(sym) PTR_LA t9, sym; jalr t9
-# else
-# define PSEUDO_JMP(sym) jal sym
-# endif
-
-# if IS_IN (libpthread)
-# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
-# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel)
-# elif IS_IN (librt)
-# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
-# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel)
-# else
-# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
-# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel)
-# endif
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
- header.multiple_threads) \
- == 0, 1)
-# else
-# define SINGLE_THREAD_P(reg) \
- READ_THREAD_POINTER(reg); \
- lw reg, MULTIPLE_THREADS_OFFSET(reg)
-#endif
-
-#elif !defined __ASSEMBLER__
-
-# define SINGLE_THREAD_P 1
-# define NO_CANCELLATION 1
-
-#endif
-
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
- header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
index 0e45f00..fe9a3fc 100644
--- a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
@@ -18,173 +18,22 @@
#include <sysdep.h>
#include <sysdeps/generic/sysdep.h>
#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
+#include <nptl/pthreadP.h>
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-# ifdef __PIC__
-# define PSEUDO_CPLOAD .cpload t9;
-# define PSEUDO_ERRJMP la t9, __syscall_error; jr t9;
-# define PSEUDO_SAVEGP sw gp, 32(sp); cfi_rel_offset (gp, 32);
-# define PSEUDO_LOADGP lw gp, 32(sp);
-# else
-# define PSEUDO_CPLOAD
-# define PSEUDO_ERRJMP j __syscall_error;
-# define PSEUDO_SAVEGP
-# define PSEUDO_LOADGP
-# endif
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .align 2; \
- .set nomips16; \
- L(pseudo_start): \
- cfi_startproc; \
- 99: PSEUDO_ERRJMP \
- .type __##syscall_name##_nocancel, @function; \
- .globl __##syscall_name##_nocancel; \
- __##syscall_name##_nocancel: \
- .set noreorder; \
- PSEUDO_CPLOAD \
- li v0, SYS_ify(syscall_name); \
- syscall; \
- .set reorder; \
- bne a3, zero, 99b; \
- ret; \
- cfi_endproc; \
- .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
- ENTRY (name) \
- .set noreorder; \
- PSEUDO_CPLOAD \
- .set reorder; \
- SINGLE_THREAD_P(v1); \
- bne zero, v1, L(pseudo_cancel); \
- .set noreorder; \
- li v0, SYS_ify(syscall_name); \
- syscall; \
- .set reorder; \
- bne a3, zero, 99b; \
- ret; \
- L(pseudo_cancel): \
- SAVESTK_##args; \
- sw ra, 28(sp); \
- cfi_rel_offset (ra, 28); \
- PSEUDO_SAVEGP \
- PUSHARGS_##args; /* save syscall args */ \
- CENABLE; \
- PSEUDO_LOADGP \
- sw v0, 44(sp); /* save mask */ \
- POPARGS_##args; /* restore syscall args */ \
- .set noreorder; \
- li v0, SYS_ify (syscall_name); \
- syscall; \
- .set reorder; \
- sw v0, 36(sp); /* save syscall result */ \
- sw a3, 40(sp); /* save syscall error flag */ \
- lw a0, 44(sp); /* pass mask as arg1 */ \
- CDISABLE; \
- PSEUDO_LOADGP \
- lw v0, 36(sp); /* restore syscall result */ \
- lw a3, 40(sp); /* restore syscall error flag */ \
- lw ra, 28(sp); /* restore return address */ \
- .set noreorder; \
- bne a3, zero, 99b; \
- RESTORESTK; \
- L(pseudo_end): \
- .set reorder;
-
-# undef PSEUDO_END
-# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym
-
-# define PUSHARGS_0 /* nothing to do */
-# define PUSHARGS_1 PUSHARGS_0 sw a0, 0(sp); cfi_rel_offset (a0, 0);
-# define PUSHARGS_2 PUSHARGS_1 sw a1, 4(sp); cfi_rel_offset (a1, 4);
-# define PUSHARGS_3 PUSHARGS_2 sw a2, 8(sp); cfi_rel_offset (a2, 8);
-# define PUSHARGS_4 PUSHARGS_3 sw a3, 12(sp); cfi_rel_offset (a3, 12);
-# define PUSHARGS_5 PUSHARGS_4 /* handled by SAVESTK_## */
-# define PUSHARGS_6 PUSHARGS_5
-# define PUSHARGS_7 PUSHARGS_6
-
-# define POPARGS_0 /* nothing to do */
-# define POPARGS_1 POPARGS_0 lw a0, 0(sp);
-# define POPARGS_2 POPARGS_1 lw a1, 4(sp);
-# define POPARGS_3 POPARGS_2 lw a2, 8(sp);
-# define POPARGS_4 POPARGS_3 lw a3, 12(sp);
-# define POPARGS_5 POPARGS_4 /* args already in new stackframe */
-# define POPARGS_6 POPARGS_5
-# define POPARGS_7 POPARGS_6
-
-
-# define STKSPACE 48
-# define SAVESTK_0 subu sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE)
-# define SAVESTK_1 SAVESTK_0
-# define SAVESTK_2 SAVESTK_1
-# define SAVESTK_3 SAVESTK_2
-# define SAVESTK_4 SAVESTK_3
-# define SAVESTK_5 lw t0, 16(sp); \
- SAVESTK_0; \
- sw t0, 16(sp)
-
-# define SAVESTK_6 lw t0, 16(sp); \
- lw t1, 20(sp); \
- SAVESTK_0; \
- sw t0, 16(sp); \
- sw t1, 20(sp)
-
-# define SAVESTK_7 lw t0, 16(sp); \
- lw t1, 20(sp); \
- lw t2, 24(sp); \
- SAVESTK_0; \
- sw t0, 16(sp); \
- sw t1, 20(sp); \
- sw t2, 24(sp)
-
-# define RESTORESTK addu sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE)
-
-
-# ifdef __PIC__
-/* We use jalr rather than jal. This means that the assembler will not
- automatically restore $gp (in case libc has multiple GOTs) so we must
- do it manually - which we have to do anyway since we don't use .cprestore.
- It also shuts up the assembler warning about not using .cprestore. */
-# define PSEUDO_JMP(sym) la t9, sym; jalr t9;
-# else
-# define PSEUDO_JMP(sym) jal sym;
-# endif
-
-# if IS_IN (libpthread)
-# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
-# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel)
-# elif IS_IN (librt)
-# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
-# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel)
-# else
-# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
-# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel)
-# endif
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) \
== 0, 1)
-# else
-# define SINGLE_THREAD_P(reg) \
- READ_THREAD_POINTER(reg); \
- lw reg, MULTIPLE_THREADS_OFFSET(reg)
-#endif
-#elif !defined __ASSEMBLER__
+#else
# define SINGLE_THREAD_P 1
# define NO_CANCELLATION 1
#endif
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
index 47b92d9..7647363 100644
--- a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
@@ -18,124 +18,22 @@
#include <sysdep.h>
#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
+#include <nptl/pthreadP.h>
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .type __##syscall_name##_nocancel, @function; \
- .globl __##syscall_name##_nocancel; \
- __##syscall_name##_nocancel: \
- cfi_startproc; \
- DO_CALL (syscall_name, args); \
- bne r7, zero, SYSCALL_ERROR_LABEL; \
- ret; \
- cfi_endproc; \
- .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
- ENTRY (name) \
- SINGLE_THREAD_P(r2); \
- bne r2, zero, pseudo_cancel; \
- DO_CALL (syscall_name, args); \
- bne r7, zero, SYSCALL_ERROR_LABEL; \
- ret; \
- pseudo_cancel: \
- SAVESTK_##args; /* save syscall args and adjust stack */ \
- SAVEREG(ra, 0); /* save return address */ \
- SAVEREG(r22, 4); /* save GOT pointer */ \
- nextpc r22; \
-1: movhi r2, %hiadj(_gp_got - 1b); \
- addi r2, r2, %lo(_gp_got - 1b); \
- add r22, r22, r2; \
- CENABLE; \
- callr r3; \
- stw r2, 8(sp); /* save mask */ \
- LOADARGS_##args; \
- movi r2, SYS_ify(syscall_name); \
- trap; \
- stw r2, 12(sp); /* save syscall result */ \
- stw r7, 16(sp); /* save syscall error flag */ \
- ldw r4, 8(sp); /* pass mask as argument 1 */ \
- CDISABLE; \
- callr r3; \
- ldw r7, 16(sp); /* restore syscall error flag */ \
- ldw r2, 12(sp); /* restore syscall result */ \
- ldw ra, 0(sp); /* restore return address */ \
- ldw r22, 4(sp); /* restore GOT pointer */ \
- RESTORESTK_##args; \
- bne r7, zero, SYSCALL_ERROR_LABEL;
-
-
-# undef PSEUDO_END
-# define PSEUDO_END(sym) \
- SYSCALL_ERROR_HANDLER \
- END (sym)
-
-#define SAVEREG(REG, LOC) stw REG, LOC(sp); cfi_rel_offset (REG, LOC)
-#define SAVESTK(X) subi sp, sp, X; cfi_adjust_cfa_offset(X)
-#define SAVESTK_0 SAVESTK(20)
-#define SAVEARG_1 SAVEREG(r4, 20)
-#define SAVESTK_1 SAVESTK(24); SAVEARG_1
-#define SAVEARG_2 SAVEREG(r5, 24); SAVEARG_1
-#define SAVESTK_2 SAVESTK(28); SAVEARG_2
-#define SAVEARG_3 SAVEREG(r6, 28); SAVEARG_2
-#define SAVESTK_3 SAVESTK(32); SAVEARG_3
-#define SAVEARG_4 SAVEREG(r7, 32); SAVEARG_3
-#define SAVESTK_4 SAVESTK(36); SAVEARG_4
-#define SAVESTK_5 SAVESTK_4
-#define SAVESTK_6 SAVESTK_5
-
-#define LOADARGS_0
-#define LOADARGS_1 ldw r4, 20(sp)
-#define LOADARGS_2 LOADARGS_1; ldw r5, 24(sp)
-#define LOADARGS_3 LOADARGS_2; ldw r6, 28(sp)
-#define LOADARGS_4 LOADARGS_3; ldw r7, 32(sp)
-#define LOADARGS_5 LOADARGS_4; ldw r8, 36(sp)
-#define LOADARGS_6 LOADARGS_5; ldw r9, 40(sp)
-
-#define RESTORESTK(X) addi sp, sp, X; cfi_adjust_cfa_offset(-X)
-#define RESTORESTK_0 RESTORESTK(20)
-#define RESTORESTK_1 RESTORESTK(24)
-#define RESTORESTK_2 RESTORESTK(28)
-#define RESTORESTK_3 RESTORESTK(32)
-#define RESTORESTK_4 RESTORESTK(36)
-#define RESTORESTK_5 RESTORESTK(36)
-#define RESTORESTK_6 RESTORESTK(36)
-
-# if IS_IN (libpthread)
-# define CENABLE ldw r3, %call(__pthread_enable_asynccancel)(r22)
-# define CDISABLE ldw r3, %call(__pthread_disable_asynccancel)(r22)
-# elif IS_IN (librt)
-# define CENABLE ldw r3, %call(__librt_enable_asynccancel)(r22)
-# define CDISABLE ldw r3, %call(__librt_disable_asynccancel)(r22)
-# elif IS_IN (libc)
-# define CENABLE ldw r3, %call(__libc_enable_asynccancel)(r22)
-# define CDISABLE ldw r3, %call(__libc_disable_asynccancel)(r22)
-# else
-# error Unsupported library
-# endif
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) \
== 0, 1)
-# else
-# define SINGLE_THREAD_P(reg) \
- ldw reg, MULTIPLE_THREADS_OFFSET(r23)
-#endif
-#elif !defined __ASSEMBLER__
+#else
# define SINGLE_THREAD_P 1
# define NO_CANCELLATION 1
#endif
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
deleted file mode 100644
index 35d3f05..0000000
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* Cancellable system call stubs. Linux/PowerPC version.
- Copyright (C) 2003-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.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>
-#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .section ".text"; \
- ENTRY (name) \
- SINGLE_THREAD_P; \
- bne- .Lpseudo_cancel; \
- .type __##syscall_name##_nocancel,@function; \
- .globl __##syscall_name##_nocancel; \
- __##syscall_name##_nocancel: \
- DO_CALL (SYS_ify (syscall_name)); \
- PSEUDO_RET; \
- .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
- .Lpseudo_cancel: \
- stwu 1,-48(1); \
- cfi_adjust_cfa_offset (48); \
- mflr 9; \
- stw 9,52(1); \
- cfi_offset (lr, 4); \
- DOCARGS_##args; /* save syscall args around CENABLE. */ \
- CENABLE; \
- stw 3,16(1); /* store CENABLE return value (MASK). */ \
- UNDOCARGS_##args; /* restore syscall args. */ \
- DO_CALL (SYS_ify (syscall_name)); \
- mfcr 0; /* save CR/R3 around CDISABLE. */ \
- stw 3,8(1); \
- stw 0,12(1); \
- lwz 3,16(1); /* pass MASK to CDISABLE. */ \
- CDISABLE; \
- lwz 4,52(1); \
- lwz 0,12(1); /* restore CR/R3. */ \
- lwz 3,8(1); \
- mtlr 4; \
- mtcr 0; \
- addi 1,1,48;
-
-# define DOCARGS_0
-# define UNDOCARGS_0
-
-# define DOCARGS_1 stw 3,20(1); DOCARGS_0
-# define UNDOCARGS_1 lwz 3,20(1); UNDOCARGS_0
-
-# define DOCARGS_2 stw 4,24(1); DOCARGS_1
-# define UNDOCARGS_2 lwz 4,24(1); UNDOCARGS_1
-
-# define DOCARGS_3 stw 5,28(1); DOCARGS_2
-# define UNDOCARGS_3 lwz 5,28(1); UNDOCARGS_2
-
-# define DOCARGS_4 stw 6,32(1); DOCARGS_3
-# define UNDOCARGS_4 lwz 6,32(1); UNDOCARGS_3
-
-# define DOCARGS_5 stw 7,36(1); DOCARGS_4
-# define UNDOCARGS_5 lwz 7,36(1); UNDOCARGS_4
-
-# define DOCARGS_6 stw 8,40(1); DOCARGS_5
-# define UNDOCARGS_6 lwz 8,40(1); UNDOCARGS_5
-
-# if IS_IN (libpthread)
-# define CENABLE bl __pthread_enable_asynccancel@local
-# define CDISABLE bl __pthread_disable_asynccancel@local
-# elif IS_IN (libc)
-# define CENABLE bl __libc_enable_asynccancel@local
-# define CDISABLE bl __libc_disable_asynccancel@local
-# elif IS_IN (librt)
-# define CENABLE bl __librt_enable_asynccancel@local
-# define CDISABLE bl __librt_disable_asynccancel@local
-# else
-# error Unsupported library
-# endif
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
- header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P \
- lwz 10,MULTIPLE_THREADS_OFFSET(2); \
- cmpwi 10,0
-# endif
-
-#elif !defined __ASSEMBLER__
-
-# define SINGLE_THREAD_P (1)
-# define NO_CANCELLATION 1
-
-#endif
-
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
- header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
deleted file mode 100644
index cad13da..0000000
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/* Cancellable system call stubs. Linux/PowerPC64 version.
- Copyright (C) 2003-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.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>
-#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# define DASHDASHPFX(str) __##str
-
-#if _CALL_ELF == 2
-#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16+48)
-#define CANCEL_PARM_SAVE (FRAME_MIN_SIZE+16)
-#else
-#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16)
-#define CANCEL_PARM_SAVE (CANCEL_FRAMESIZE+FRAME_PARM_SAVE)
-#endif
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .section ".text"; \
- ENTRY (name) \
- SINGLE_THREAD_P; \
- bne- .Lpseudo_cancel; \
- .type DASHDASHPFX(syscall_name##_nocancel),@function; \
- .globl DASHDASHPFX(syscall_name##_nocancel); \
- DASHDASHPFX(syscall_name##_nocancel): \
- DO_CALL (SYS_ify (syscall_name)); \
- PSEUDO_RET; \
- .size DASHDASHPFX(syscall_name##_nocancel),.-DASHDASHPFX(syscall_name##_nocancel); \
- .Lpseudo_cancel: \
- stdu 1,-CANCEL_FRAMESIZE(1); \
- cfi_adjust_cfa_offset (CANCEL_FRAMESIZE); \
- mflr 9; \
- std 9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1); \
- cfi_offset (lr, FRAME_LR_SAVE); \
- DOCARGS_##args; /* save syscall args around CENABLE. */ \
- CENABLE; \
- std 3,FRAME_MIN_SIZE(1); /* store CENABLE return value (MASK). */ \
- UNDOCARGS_##args; /* restore syscall args. */ \
- DO_CALL (SYS_ify (syscall_name)); \
- mfcr 0; /* save CR/R3 around CDISABLE. */ \
- std 3,FRAME_MIN_SIZE+8(1); \
- std 0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1); \
- cfi_offset (cr, FRAME_CR_SAVE); \
- ld 3,FRAME_MIN_SIZE(1); /* pass MASK to CDISABLE. */ \
- CDISABLE; \
- ld 9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1); \
- ld 0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1); /* restore CR/R3. */ \
- ld 3,FRAME_MIN_SIZE+8(1); \
- mtlr 9; \
- mtcr 0; \
- addi 1,1,CANCEL_FRAMESIZE; \
- cfi_adjust_cfa_offset (-CANCEL_FRAMESIZE); \
- cfi_restore (lr); \
- cfi_restore (cr)
-
-# define DOCARGS_0
-# define UNDOCARGS_0
-
-# define DOCARGS_1 std 3,CANCEL_PARM_SAVE(1); DOCARGS_0
-# define UNDOCARGS_1 ld 3,CANCEL_PARM_SAVE(1); UNDOCARGS_0
-
-# define DOCARGS_2 std 4,CANCEL_PARM_SAVE+8(1); DOCARGS_1
-# define UNDOCARGS_2 ld 4,CANCEL_PARM_SAVE+8(1); UNDOCARGS_1
-
-# define DOCARGS_3 std 5,CANCEL_PARM_SAVE+16(1); DOCARGS_2
-# define UNDOCARGS_3 ld 5,CANCEL_PARM_SAVE+16(1); UNDOCARGS_2
-
-# define DOCARGS_4 std 6,CANCEL_PARM_SAVE+24(1); DOCARGS_3
-# define UNDOCARGS_4 ld 6,CANCEL_PARM_SAVE+24(1); UNDOCARGS_3
-
-# define DOCARGS_5 std 7,CANCEL_PARM_SAVE+32(1); DOCARGS_4
-# define UNDOCARGS_5 ld 7,CANCEL_PARM_SAVE+32(1); UNDOCARGS_4
-
-# define DOCARGS_6 std 8,CANCEL_PARM_SAVE+40(1); DOCARGS_5
-# define UNDOCARGS_6 ld 8,CANCEL_PARM_SAVE+40(1); UNDOCARGS_5
-
-# if IS_IN (libpthread)
-# ifdef SHARED
-# define CENABLE bl JUMPTARGET(__pthread_enable_asynccancel)
-# define CDISABLE bl JUMPTARGET(__pthread_disable_asynccancel)
-# else
-# define CENABLE bl JUMPTARGET(__pthread_enable_asynccancel); nop
-# define CDISABLE bl JUMPTARGET(__pthread_disable_asynccancel); nop
-# endif
-# elif IS_IN (libc)
-# ifdef SHARED
-# define CENABLE bl JUMPTARGET(__libc_enable_asynccancel)
-# define CDISABLE bl JUMPTARGET(__libc_disable_asynccancel)
-# else
-# define CENABLE bl JUMPTARGET(__libc_enable_asynccancel); nop
-# define CDISABLE bl JUMPTARGET(__libc_disable_asynccancel); nop
-# endif
-# elif IS_IN (librt)
-# ifdef SHARED
-# define CENABLE bl JUMPTARGET(__librt_enable_asynccancel)
-# define CDISABLE bl JUMPTARGET(__librt_disable_asynccancel)
-# else
-# define CENABLE bl JUMPTARGET(__librt_enable_asynccancel); nop
-# define CDISABLE bl JUMPTARGET(__librt_disable_asynccancel); nop
-# endif
-# else
-# error Unsupported library
-# endif
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
- header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P \
- lwz 10,MULTIPLE_THREADS_OFFSET(13); \
- cmpwi 10,0
-# endif
-
-#elif !defined __ASSEMBLER__
-
-# define SINGLE_THREAD_P (1)
-# define NO_CANCELLATION 1
-
-#endif
-
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
- header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
new file mode 100644
index 0000000..85af880
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
@@ -0,0 +1,38 @@
+/* Cancellable system call stubs. Linux/PowerPC version.
+ Copyright (C) 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/>. */
+
+#include <sysdep.h>
+#include <tls.h>
+#include <nptl/pthreadP.h>
+
+#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
+
+# define SINGLE_THREAD_P \
+ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
+ header.multiple_threads) == 0, 1)
+
+#else
+
+# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
+
+#endif
+
+#define RTLD_SINGLE_THREAD_P \
+ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
+ header.multiple_threads) == 0, 1)
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 b1e80bc..82763b7 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
@@ -24,116 +24,17 @@
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .text; \
-L(pseudo_cancel): \
- cfi_startproc; \
- STM_##args \
- stm %r12,%r15,48(%r15); \
- cfi_offset (%r15, -36); \
- cfi_offset (%r14, -40); \
- cfi_offset (%r13, -44); \
- cfi_offset (%r12, -48); \
- lr %r14,%r15; \
- ahi %r15,-96; \
- cfi_adjust_cfa_offset (96); \
- st %r14,0(%r15); \
- basr %r13,0; \
-0: l %r1,1f-0b(%r13); \
- bas %r14,0(%r1,%r13); \
- lr %r0,%r2; \
- LM_##args \
- .if SYS_ify (syscall_name) < 256; \
- svc SYS_ify (syscall_name); \
- .else; \
- lhi %r1,SYS_ify (syscall_name); \
- svc 0; \
- .endif; \
- LR7_##args \
- l %r1,2f-0b(%r13); \
- lr %r12,%r2; \
- lr %r2,%r0; \
- bas %r14,0(%r1,%r13); \
- lr %r2,%r12; \
- lm %r12,%r15,48+96(%r15); \
- cfi_endproc; \
- j L(pseudo_check); \
-1: .long CENABLE-0b; \
-2: .long CDISABLE-0b; \
-ENTRY(name) \
- SINGLE_THREAD_P(%r1) \
- jne L(pseudo_cancel); \
-.type __##syscall_name##_nocancel,@function; \
-.globl __##syscall_name##_nocancel; \
-__##syscall_name##_nocancel: \
- DO_CALL(syscall_name, args); \
-L(pseudo_check): \
- lhi %r4,-4095; \
- clr %r2,%r4; \
- jnl SYSCALL_ERROR_LABEL; \
-.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
-L(pseudo_end):
-
-# if IS_IN (libpthread)
-# define CENABLE __pthread_enable_asynccancel
-# define CDISABLE __pthread_disable_asynccancel
-# elif IS_IN (libc)
-# define CENABLE __libc_enable_asynccancel
-# define CDISABLE __libc_disable_asynccancel
-# elif IS_IN (librt)
-# define CENABLE __librt_enable_asynccancel
-# define CDISABLE __librt_disable_asynccancel
-# else
-# error Unsupported library
-# endif
-
-#define STM_0 /* Nothing */
-#define STM_1 st %r2,8(%r15);
-#define STM_2 stm %r2,%r3,8(%r15);
-#define STM_3 stm %r2,%r4,8(%r15);
-#define STM_4 stm %r2,%r5,8(%r15);
-#define STM_5 stm %r2,%r5,8(%r15);
-#define STM_6 stm %r2,%r7,8(%r15);
-
-#define LM_0 /* Nothing */
-#define LM_1 l %r2,8+96(%r15);
-#define LM_2 lm %r2,%r3,8+96(%r15);
-#define LM_3 lm %r2,%r4,8+96(%r15);
-#define LM_4 lm %r2,%r5,8+96(%r15);
-#define LM_5 lm %r2,%r5,8+96(%r15);
-#define LM_6 lm %r2,%r5,8+96(%r15); \
- cfi_offset (%r7, -68); \
- l %r7,96+96(%r15);
-
-#define LR7_0 /* Nothing */
-#define LR7_1 /* Nothing */
-#define LR7_2 /* Nothing */
-#define LR7_3 /* Nothing */
-#define LR7_4 /* Nothing */
-#define LR7_5 /* Nothing */
-#define LR7_6 l %r7,28+96(%r15); \
- cfi_restore (%r7);
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P(reg) \
- ear reg,%a0; \
- icm reg,15,MULTIPLE_THREADS_OFFSET(reg);
-# endif
-#elif !defined __ASSEMBLER__
+#else
# define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 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 9b2c546..952d2af 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
@@ -18,135 +18,36 @@
#include <sysdep.h>
#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
+#include <nptl/pthreadP.h>
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .text; \
-L(pseudo_cancel): \
- cfi_startproc; \
- STM_##args \
- stmg %r13,%r15,104(%r15); \
- cfi_offset (%r15,-40); \
- cfi_offset (%r14,-48); \
- cfi_offset (%r13,-56); \
- lgr %r14,%r15; \
- aghi %r15,-160; \
- cfi_adjust_cfa_offset (160); \
- stg %r14,0(%r15); \
- brasl %r14,CENABLE; \
- lgr %r0,%r2; \
- LM_##args \
- .if SYS_ify (syscall_name) < 256; \
- svc SYS_ify (syscall_name); \
- .else; \
- lghi %r1,SYS_ify (syscall_name); \
- svc 0; \
- .endif; \
- LR7_##args \
- lgr %r13,%r2; \
- lgr %r2,%r0; \
- brasl %r14,CDISABLE; \
- lgr %r2,%r13; \
- lmg %r13,%r15,104+160(%r15); \
- cfi_endproc; \
- j L(pseudo_check); \
-ENTRY(name) \
- SINGLE_THREAD_P \
- jne L(pseudo_cancel); \
-.type __##syscall_name##_nocancel,@function; \
-.globl __##syscall_name##_nocancel; \
-__##syscall_name##_nocancel: \
- DO_CALL(syscall_name, args); \
-L(pseudo_check): \
- lghi %r4,-4095; \
- clgr %r2,%r4; \
- jgnl SYSCALL_ERROR_LABEL; \
-.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
-L(pseudo_end):
-
# if IS_IN (libpthread)
-# define CENABLE __pthread_enable_asynccancel
-# define CDISABLE __pthread_disable_asynccancel
# define __local_multiple_threads __pthread_multiple_threads
# elif IS_IN (libc)
-# define CENABLE __libc_enable_asynccancel
-# define CDISABLE __libc_disable_asynccancel
# define __local_multiple_threads __libc_multiple_threads
-# elif IS_IN (librt)
-# define CENABLE __librt_enable_asynccancel
-# define CDISABLE __librt_disable_asynccancel
-# else
-# error Unsupported library
# endif
-#define STM_0 /* Nothing */
-#define STM_1 stg %r2,16(%r15);
-#define STM_2 stmg %r2,%r3,16(%r15);
-#define STM_3 stmg %r2,%r4,16(%r15);
-#define STM_4 stmg %r2,%r5,16(%r15);
-#define STM_5 stmg %r2,%r5,16(%r15);
-#define STM_6 stmg %r2,%r7,16(%r15);
-
-#define LM_0 /* Nothing */
-#define LM_1 lg %r2,16+160(%r15);
-#define LM_2 lmg %r2,%r3,16+160(%r15);
-#define LM_3 lmg %r2,%r4,16+160(%r15);
-#define LM_4 lmg %r2,%r5,16+160(%r15);
-#define LM_5 lmg %r2,%r5,16+160(%r15);
-#define LM_6 lmg %r2,%r5,16+160(%r15); \
- cfi_offset (%r7, -104); \
- lg %r7,160+160(%r15);
-
-#define LR7_0 /* Nothing */
-#define LR7_1 /* Nothing */
-#define LR7_2 /* Nothing */
-#define LR7_3 /* Nothing */
-#define LR7_4 /* Nothing */
-#define LR7_5 /* Nothing */
-#define LR7_6 lg %r7,56+160(%r15); \
- cfi_restore (%r7);
-
# if IS_IN (libpthread) || IS_IN (libc)
-# ifndef __ASSEMBLER__
extern int __local_multiple_threads attribute_hidden;
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (__local_multiple_threads == 0, 1)
-# else
-# define SINGLE_THREAD_P \
- larl %r1,__local_multiple_threads; \
- icm %r0,15,0(%r1);
-# endif
# else
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P \
- ear %r1,%a0; \
- sllg %r1,%r1,32; \
- ear %r1,%a1; \
- icm %r1,15,MULTIPLE_THREADS_OFFSET(%r1);
-# endif
# endif
-#elif !defined __ASSEMBLER__
+#else
# define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
index 5645cad..1ea501b 100644
--- a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
@@ -23,147 +23,17 @@
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-# define _IMM12 #-12
-# define _IMM16 #-16
-# define _IMP16 #16
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .text; \
- ENTRY (name); \
- .Lpseudo_start: \
- SINGLE_THREAD_P; \
- bf .Lpseudo_cancel; \
- .type __##syscall_name##_nocancel,@function; \
- .globl __##syscall_name##_nocancel; \
- __##syscall_name##_nocancel: \
- DO_CALL (syscall_name, args); \
- mov r0,r1; \
- mov _IMM12,r2; \
- shad r2,r1; \
- not r1,r1; \
- tst r1,r1; \
- bt .Lsyscall_error; \
- bra .Lpseudo_end; \
- nop; \
- .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
- .Lpseudo_cancel: \
- sts.l pr,@-r15; \
- cfi_adjust_cfa_offset (4); \
- cfi_rel_offset (pr, 0); \
- add _IMM16,r15; \
- cfi_adjust_cfa_offset (16); \
- SAVE_ARGS_##args; \
- CENABLE; \
- LOAD_ARGS_##args; \
- add _IMP16,r15; \
- cfi_adjust_cfa_offset (-16); \
- lds.l @r15+,pr; \
- cfi_adjust_cfa_offset (-4); \
- cfi_restore (pr); \
- DO_CALL(syscall_name, args); \
- SYSCALL_INST_PAD; \
- sts.l pr,@-r15; \
- cfi_adjust_cfa_offset (4); \
- cfi_rel_offset (pr, 0); \
- mov.l r0,@-r15; \
- cfi_adjust_cfa_offset (4); \
- cfi_rel_offset (r0, 0); \
- CDISABLE; \
- mov.l @r15+,r0; \
- cfi_adjust_cfa_offset (-4); \
- cfi_restore (r0); \
- lds.l @r15+,pr; \
- cfi_adjust_cfa_offset (-4); \
- cfi_restore (pr); \
- mov r0,r1; \
- mov _IMM12,r2; \
- shad r2,r1; \
- not r1,r1; \
- tst r1,r1; \
- bf .Lpseudo_end; \
- .Lsyscall_error: \
- SYSCALL_ERROR_HANDLER; \
- .Lpseudo_end:
-
-# undef PSEUDO_END
-# define PSEUDO_END(sym) \
- END (sym)
-
-# define SAVE_ARGS_0 /* Nothing. */
-# define SAVE_ARGS_1 SAVE_ARGS_0; mov.l r4,@(0,r15); cfi_offset (r4,-4)
-# define SAVE_ARGS_2 SAVE_ARGS_1; mov.l r5,@(4,r15); cfi_offset (r5,-8)
-# define SAVE_ARGS_3 SAVE_ARGS_2; mov.l r6,@(8,r15); cfi_offset (r6,-12)
-# define SAVE_ARGS_4 SAVE_ARGS_3; mov.l r7,@(12,r15); cfi_offset (r7,-16)
-# define SAVE_ARGS_5 SAVE_ARGS_4
-# define SAVE_ARGS_6 SAVE_ARGS_5
-
-# define LOAD_ARGS_0 /* Nothing. */
-# define LOAD_ARGS_1 LOAD_ARGS_0; mov.l @(0,r15),r4; cfi_restore (r4)
-# define LOAD_ARGS_2 LOAD_ARGS_1; mov.l @(4,r15),r5; cfi_restore (r5)
-# define LOAD_ARGS_3 LOAD_ARGS_2; mov.l @(8,r15),r6; cfi_restore (r6)
-# define LOAD_ARGS_4 LOAD_ARGS_3; mov.l @(12,r15),r7; cfi_restore (r7)
-# define LOAD_ARGS_5 LOAD_ARGS_4
-# define LOAD_ARGS_6 LOAD_ARGS_5
-
-# if IS_IN (libpthread)
-# define __local_enable_asynccancel __pthread_enable_asynccancel
-# define __local_disable_asynccancel __pthread_disable_asynccancel
-# elif IS_IN (libc)
-# define __local_enable_asynccancel __libc_enable_asynccancel
-# define __local_disable_asynccancel __libc_disable_asynccancel
-# elif IS_IN (librt)
-# define __local_enable_asynccancel __librt_enable_asynccancel
-# define __local_disable_asynccancel __librt_disable_asynccancel
-# else
-# error Unsupported library
-# endif
-
-# define CENABLE \
- mov.l 1f,r0; \
- bsrf r0; \
- nop; \
- 0: bra 2f; \
- mov r0,r2; \
- .align 2; \
- 1: .long __local_enable_asynccancel - 0b; \
- 2:
-
-# define CDISABLE \
- mov.l 1f,r0; \
- bsrf r0; \
- mov r2,r4; \
- 0: bra 2f; \
- nop; \
- .align 2; \
- 1: .long __local_disable_asynccancel - 0b; \
- 2:
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P \
- stc gbr,r0; \
- mov.w 0f,r1; \
- sub r1,r0; \
- mov.l @(MULTIPLE_THREADS_OFFSET,r0),r0; \
- bra 1f; \
- tst r0,r0; \
- 0: .word TLS_PRE_TCB_SIZE; \
- 1:
-
-# endif
-#elif !defined __ASSEMBLER__
+#else
# define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
deleted file mode 100644
index c513212..0000000
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
-
- 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>
-#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .text; \
- .globl __syscall_error; \
-ENTRY(name) \
- ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\
- cmp %g1, 0; \
- bne 1f; \
-.type __##syscall_name##_nocancel,@function; \
-.globl __##syscall_name##_nocancel; \
-__##syscall_name##_nocancel: \
- mov SYS_ify(syscall_name), %g1; \
- ta 0x10; \
- bcc 8f; \
- mov %o7, %g1; \
- call __syscall_error; \
- mov %g1, %o7; \
-8: jmpl %o7 + 8, %g0; \
- nop; \
-.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\
-1: save %sp, -96, %sp; \
- cfi_def_cfa_register(%fp); \
- cfi_window_save; \
- cfi_register(%o7, %i7); \
- CENABLE; \
- nop; \
- mov %o0, %l0; \
- COPY_ARGS_##args \
- mov SYS_ify(syscall_name), %g1; \
- ta 0x10; \
- bcc 1f; \
- mov %o0, %l1; \
- CDISABLE; \
- mov %l0, %o0; \
- call __syscall_error; \
- mov %l1, %o0; \
- b 2f; \
- mov -1, %l1; \
-1: CDISABLE; \
- mov %l0, %o0; \
-2: jmpl %i7 + 8, %g0; \
- restore %g0, %l1, %o0;
-
-
-# if IS_IN (libpthread)
-# define CENABLE call __pthread_enable_asynccancel
-# define CDISABLE call __pthread_disable_asynccancel
-# elif IS_IN (libc)
-# define CENABLE call __libc_enable_asynccancel
-# define CDISABLE call __libc_disable_asynccancel
-# elif IS_IN (librt)
-# define CENABLE call __librt_enable_asynccancel
-# define CDISABLE call __librt_disable_asynccancel
-# else
-# error Unsupported library
-# endif
-
-#define COPY_ARGS_0 /* Nothing */
-#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0;
-#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1;
-#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2;
-#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3;
-#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4;
-#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5;
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
- header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1
-# endif
-
-#elif !defined __ASSEMBLER__
-
-# define SINGLE_THREAD_P (1)
-# define NO_CANCELLATION 1
-
-#endif
-
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
- header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
deleted file mode 100644
index 45fbd73..0000000
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
-
- 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>
-#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .text; \
- .globl __syscall_error; \
-ENTRY(name) \
- ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\
- brnz,pn %g1, 1f; \
-.type __##syscall_name##_nocancel,@function; \
-.globl __##syscall_name##_nocancel; \
-__##syscall_name##_nocancel: \
- mov SYS_ify(syscall_name), %g1; \
- ta 0x6d; \
- bcc,pt %xcc, 8f; \
- mov %o7, %g1; \
- call __syscall_error; \
- mov %g1, %o7; \
-8: jmpl %o7 + 8, %g0; \
- nop; \
-.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\
-1: save %sp, -192, %sp; \
- cfi_def_cfa_register(%fp); \
- cfi_window_save; \
- cfi_register(%o7, %i7); \
- CENABLE; \
- nop; \
- mov %o0, %l0; \
- COPY_ARGS_##args \
- mov SYS_ify(syscall_name), %g1; \
- ta 0x6d; \
- bcc,pt %xcc, 1f; \
- mov %o0, %l1; \
- CDISABLE; \
- mov %l0, %o0; \
- call __syscall_error; \
- mov %l1, %o0; \
- ba,pt %xcc, 2f; \
- mov -1, %l1; \
-1: CDISABLE; \
- mov %l0, %o0; \
-2: jmpl %i7 + 8, %g0; \
- restore %g0, %l1, %o0;
-
-# if IS_IN (libpthread)
-# define CENABLE call __pthread_enable_asynccancel
-# define CDISABLE call __pthread_disable_asynccancel
-# elif IS_IN (libc)
-# define CENABLE call __libc_enable_asynccancel
-# define CDISABLE call __libc_disable_asynccancel
-# elif IS_IN (librt)
-# define CENABLE call __librt_enable_asynccancel
-# define CDISABLE call __librt_disable_asynccancel
-# else
-# error Unsupported library
-# endif
-
-#define COPY_ARGS_0 /* Nothing */
-#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0;
-#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1;
-#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2;
-#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3;
-#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4;
-#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5;
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
- header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1
-# endif
-
-#elif !defined __ASSEMBLER__
-
-# define SINGLE_THREAD_P (1)
-# define NO_CANCELLATION 1
-
-#endif
-
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
- header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
new file mode 100644
index 0000000..61bfa33
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
@@ -0,0 +1,38 @@
+/* Copyright (C) 2002-2015 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
+
+ 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>
+#include <tls.h>
+#include <nptl/pthreadP.h>
+
+#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
+
+# define SINGLE_THREAD_P \
+ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
+ header.multiple_threads) == 0, 1)
+
+#else
+
+# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
+
+#endif
+
+#define RTLD_SINGLE_THREAD_P \
+ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
+ header.multiple_threads) == 0, 1)
diff --git a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
index 092a90c..c8994db 100644
--- a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
@@ -18,137 +18,22 @@
#include <sysdep.h>
#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
+#include <nptl/pthreadP.h>
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-/* Allow hacking in some extra code if desired. */
-#ifndef PSEUDO_EXTRA
-#define PSEUDO_EXTRA
-#endif
-
-#undef PSEUDO
-#define PSEUDO(name, syscall_name, args) \
- ENTRY(__##syscall_name##_nocancel); \
- PSEUDO_EXTRA \
- moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name); \
- swint1; \
- BNEZ r1, 0f; \
- jrp lr; \
- END(__##syscall_name##_nocancel); \
- ENTRY (name) \
- SINGLE_THREAD_P(r11); \
- BEQZ r11, L(pseudo_cancel); \
- PSEUDO_EXTRA \
- moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name); \
- swint1; \
- BNEZ r1, 0f; \
- jrp lr; \
- L(pseudo_cancel): \
- { \
- move r11, sp; \
- ST sp, lr; \
- ADDI_PTR sp, sp, -STKSPACE; \
- }; \
- cfi_offset (lr, 0); \
- cfi_def_cfa_offset (STKSPACE); \
- { \
- ADDI_PTR r12, sp, REGSIZE; \
- ADDI_PTR r13, sp, 2 * REGSIZE; /* set up for PUSHARGS_0 */ \
- }; \
- ST r12, r11; \
- PUSHARGS_##args /* save syscall args */ \
- CENABLE; \
- ADDI_PTR r12, sp, 10 * REGSIZE; \
- { \
- ST r12, r0; /* save mask */ \
- ADDI_PTR r13, sp, 2 * REGSIZE; /* set up for POPARGS_0 */ \
- }; \
- POPARGS_##args /* restore syscall args */ \
- PSEUDO_EXTRA \
- moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name); \
- swint1; \
- ADDI_PTR r12, sp, 12 * REGSIZE; \
- { \
- ST r12, r1; /* save syscall result */ \
- ADDI_PTR r12, sp, 11 * REGSIZE; \
- }; \
- { \
- ST r12, r0; \
- ADDI_PTR r13, sp, 10 * REGSIZE; \
- }; \
- LD r0, r13; /* pass mask as arg1 */ \
- CDISABLE; \
- { \
- ADDI_PTR lr, sp, STKSPACE; \
- ADDI_PTR r0, sp, 11 * REGSIZE; \
- }; \
- { \
- LD r0, r0; \
- ADDI_PTR r1, sp, 12 * REGSIZE; \
- }; \
- LD r1, r1; \
- { \
- LD lr, lr; \
- ADDI_PTR sp, sp, STKSPACE; \
- }; \
- cfi_def_cfa_offset (0); \
- BNEZ r1, 0f
-
-# define PUSHARGS_0 /* nothing to do */
-# define PUSHARGS_1 PUSHARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; ST r13, r0 };
-# define PUSHARGS_2 PUSHARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; ST r14, r1 };
-# define PUSHARGS_3 PUSHARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; ST r13, r2 };
-# define PUSHARGS_4 PUSHARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; ST r14, r3 };
-# define PUSHARGS_5 PUSHARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; ST r13, r4 };
-# define PUSHARGS_6 PUSHARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; ST r14, r5 };
-# define PUSHARGS_7 PUSHARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; ST r13, r6 };
-
-# define POPARGS_0 /* nothing to do */
-# define POPARGS_1 POPARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; LD r0, r13 };
-# define POPARGS_2 POPARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; LD r1, r14 };
-# define POPARGS_3 POPARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; LD r2, r13 };
-# define POPARGS_4 POPARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; LD r3, r14 };
-# define POPARGS_5 POPARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; LD r4, r13 };
-# define POPARGS_6 POPARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; LD r5, r14 };
-# define POPARGS_7 POPARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; LD r6, r13 };
-
-# define STKSPACE (13 * REGSIZE)
-
-# if IS_IN (libpthread)
-# define CENABLE jal __pthread_enable_asynccancel
-# define CDISABLE jal __pthread_disable_asynccancel
-# elif IS_IN (librt)
-# define CENABLE jal __librt_enable_asynccancel
-# define CDISABLE jal __librt_disable_asynccancel
-# else
-# define CENABLE jal __libc_enable_asynccancel
-# define CDISABLE jal __libc_disable_asynccancel
-# endif
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) \
== 0, 1)
-# else
-# define SINGLE_THREAD_P(reg) \
- ADDLI_PTR reg, tp, MULTIPLE_THREADS_OFFSET; \
- LD reg, reg; \
- CMPEQI reg, reg, 0
-#endif
-#elif !defined __ASSEMBLER__
+#else
# define SINGLE_THREAD_P 1
# define NO_CANCELLATION 1
#endif
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 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 6598010..0979bde 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
@@ -24,86 +24,32 @@
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-/* The code to disable cancellation depends on the fact that the called
- functions are special. They don't modify registers other than %rax
- and %r11 if they return. Therefore we don't have to preserve other
- registers around these calls. */
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
- .text; \
- ENTRY (name) \
- SINGLE_THREAD_P; \
- jne L(pseudo_cancel); \
- .type __##syscall_name##_nocancel,@function; \
- .globl __##syscall_name##_nocancel; \
- __##syscall_name##_nocancel: \
- DO_CALL (syscall_name, args); \
- cmpq $-4095, %rax; \
- jae SYSCALL_ERROR_LABEL; \
- ret; \
- .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
- L(pseudo_cancel): \
- /* We always have to align the stack before calling a function. */ \
- subq $8, %rsp; cfi_adjust_cfa_offset (8); \
- CENABLE \
- /* The return value from CENABLE is argument for CDISABLE. */ \
- movq %rax, (%rsp); \
- DO_CALL (syscall_name, args); \
- movq (%rsp), %rdi; \
- /* Save %rax since it's the error code from the syscall. */ \
- movq %rax, %rdx; \
- CDISABLE \
- movq %rdx, %rax; \
- addq $8,%rsp; cfi_adjust_cfa_offset (-8); \
- cmpq $-4095, %rax; \
- jae SYSCALL_ERROR_LABEL
-
-
# if IS_IN (libpthread)
-# define CENABLE call __pthread_enable_asynccancel;
-# define CDISABLE call __pthread_disable_asynccancel;
# define __local_multiple_threads __pthread_multiple_threads
# elif IS_IN (libc)
-# define CENABLE call __libc_enable_asynccancel;
-# define CDISABLE call __libc_disable_asynccancel;
# define __local_multiple_threads __libc_multiple_threads
# elif IS_IN (librt)
-# define CENABLE call __librt_enable_asynccancel;
-# define CDISABLE call __librt_disable_asynccancel;
# else
# error Unsupported library
# endif
# if IS_IN (libpthread) || IS_IN (libc)
-# ifndef __ASSEMBLER__
extern int __local_multiple_threads attribute_hidden;
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (__local_multiple_threads == 0, 1)
-# else
-# define SINGLE_THREAD_P cmpl $0, __local_multiple_threads(%rip)
-# endif
-
# else
-
-# ifndef __ASSEMBLER__
-# define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-# else
-# define SINGLE_THREAD_P cmpl $0, %fs:MULTIPLE_THREADS_OFFSET
-# endif
-
# endif
-#elif !defined __ASSEMBLER__
+#else
# define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
-#endif
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 14/14] Remove cancellation support for syscall generation
2017-08-03 13:12 ` [PATCH 14/14] Remove cancellation support for syscall generation Adhemerval Zanella
@ 2017-08-23 17:23 ` Adhemerval Zanella
2017-08-24 18:04 ` Adhemerval Zanella
0 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-23 17:23 UTC (permalink / raw)
To: libc-alpha
Now with both 78ca091cdd2 and b70b6026a05 pushed upstream no linux port
actually uess the sysdep-cancel.h assembly macro for syscall generation,
so it should be safe to remove all their definition and just define
cancellable syscalls using SYSCALL_CANCEL C macro.
I have tested this patch with build-many-glibc.py for the all affected
ports and it shows not build failures. I take this is an extensive patch,
but it a cleanup one that aims to code simplicity.
I plan to commit this shortly if no one opposes it.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> This patch removes the cancellation mark from the auto-generation syscall
> script. Now all the cancellable syscalls are done throught C code using
> the SYSCALL_CANCEL macro. It simplifies the assembly required to each
> architecture port, since the SYSCALL_CANCEL uses the already defined
> INLINE_SYSCALL macros, and allows a more straigh fix on cancellation
> machanism (since no more specific assembly fixes will be required).
>
> Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
> aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.
>
> * sysdeps/unix/make-syscalls.sh: Remove cancellable tagging for
> syscall definitions.
> * sysdeps/unix/syscall-template.S (SYSCALL_CANCELLABLE): Remove
> definition.
> * sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (__local_enable_asynccancel): Likewise.
> [IS_IN (libpthread)] (__local_disable_asynccancel): Likewise.
> [IS_IN (libc)] (__local_enable_asynccancel): Likewise.
> [IS_IN (libc)] (__local_enable_asynccancel): Likewise.
> [IS_IN (librt)] (__local_disable_asynccancel): Likewise.
> [IS_IN (librt)] (__local_disable_asynccancel): Likewise.
> (CENABLE): Likewise.
> (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (PSEUDO): Remove
> defintion.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h (PSEUDO):
> Remove definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/mips/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Remove file.
> * sysdeps/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.
> * sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: New file.
> * sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Remove file.
> * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.
> * sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: New file.
> * sysdeps/unix/sysv/linux/tile/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> * sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h (PSEUDO): Remove
> definition.
> (PSEUDO_END): Likewise.
> [IS_IN (libpthread)] (CENABLE): Likewise.
> [IS_IN (libpthread)] (CDISABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (libc)] (CENABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [IS_IN (librt)] (CDISABLE): Likewise.
> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> ---
> ChangeLog | 173 ++++++++++++++
> sysdeps/unix/make-syscalls.sh | 4 -
> sysdeps/unix/syscall-template.S | 7 +-
> sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h | 87 +------
> sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h | 131 +----------
> sysdeps/unix/sysv/linux/arm/sysdep-cancel.h | 197 +---------------
> sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h | 225 +------------------
> sysdeps/unix/sysv/linux/i386/sysdep-cancel.h | 119 +---------
> sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h | 194 +---------------
> sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h | 108 +--------
> sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h | 116 +---------
> .../unix/sysv/linux/mips/mips64/sysdep-cancel.h | 249 ---------------------
> sysdeps/unix/sysv/linux/mips/sysdep-cancel.h | 159 +------------
> sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h | 110 +--------
> .../sysv/linux/powerpc/powerpc32/sysdep-cancel.h | 118 ----------
> .../sysv/linux/powerpc/powerpc64/sysdep-cancel.h | 147 ------------
> sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h | 38 ++++
> .../unix/sysv/linux/s390/s390-32/sysdep-cancel.h | 105 +--------
> .../unix/sysv/linux/s390/s390-64/sysdep-cancel.h | 109 +--------
> sysdeps/unix/sysv/linux/sh/sysdep-cancel.h | 136 +----------
> .../unix/sysv/linux/sparc/sparc32/sysdep-cancel.h | 111 ---------
> .../unix/sysv/linux/sparc/sparc64/sysdep-cancel.h | 109 ---------
> sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h | 38 ++++
> sysdeps/unix/sysv/linux/tile/sysdep-cancel.h | 123 +---------
> sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h | 62 +----
> 25 files changed, 305 insertions(+), 2670 deletions(-)
> delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
> delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
> delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
> create mode 100644 sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
> delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
> delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
> create mode 100644 sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
>
> diff --git a/ChangeLog b/ChangeLog
> index d0a78a1..a84bd55 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,178 @@
> 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> + * sysdeps/unix/make-syscalls.sh: Remove cancellable tagging for
> + syscall definitions.
> + * sysdeps/unix/syscall-template.S (SYSCALL_CANCELLABLE): Remove
> + definition.
> + * sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (__local_enable_asynccancel): Likewise.
> + [IS_IN (libpthread)] (__local_disable_asynccancel): Likewise.
> + [IS_IN (libc)] (__local_enable_asynccancel): Likewise.
> + [IS_IN (libc)] (__local_enable_asynccancel): Likewise.
> + [IS_IN (librt)] (__local_disable_asynccancel): Likewise.
> + [IS_IN (librt)] (__local_disable_asynccancel): Likewise.
> + (CENABLE): Likewise.
> + (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (PSEUDO): Remove
> + defintion.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h (PSEUDO):
> + Remove definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/mips/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Remove file.
> + * sysdeps/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.
> + * sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: New file.
> + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Remove file.
> + * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.
> + * sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: New file.
> + * sysdeps/unix/sysv/linux/tile/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> + * sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h (PSEUDO): Remove
> + definition.
> + (PSEUDO_END): Likewise.
> + [IS_IN (libpthread)] (CENABLE): Likewise.
> + [IS_IN (libpthread)] (CDISABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (libc)] (CENABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [IS_IN (librt)] (CDISABLE): Likewise.
> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
> +
> * sysdeps/unix/sysv/linux/x86_64/syscalls.list (pread64): Remove.
> (preadv64): Likewise.
> (pwrite64(: Likewise.
> diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh
> index 123553c..042cfac 100644
> --- a/sysdeps/unix/make-syscalls.sh
> +++ b/sysdeps/unix/make-syscalls.sh
> @@ -12,7 +12,6 @@
> #
> # Syscall Signature Prefixes:
> #
> -# C: cancellable (i.e., this syscall is a cancellation point)
> # E: errno and return value are not set by the call
> # V: errno is not set, but errno or zero (success) is returned from the call
> #
> @@ -171,11 +170,9 @@ while read file srcfile caller syscall args strong weak; do
> ;;
> esac
>
> - cancellable=0
> noerrno=0
> errval=0
> case $args in
> - C*) cancellable=1; args=`echo $args | sed 's/C:\?//'`;;
> E*) noerrno=1; args=`echo $args | sed 's/E:\?//'`;;
> V*) errval=1; args=`echo $args | sed 's/V:\?//'`;;
> esac
> @@ -258,7 +255,6 @@ while read file srcfile caller syscall args strong weak; do
> (echo '#define SYSCALL_NAME $syscall'; \\
> echo '#define SYSCALL_NARGS $nargs'; \\
> echo '#define SYSCALL_SYMBOL $strong'; \\
> - echo '#define SYSCALL_CANCELLABLE $cancellable'; \\
> echo '#define SYSCALL_NOERRNO $noerrno'; \\
> echo '#define SYSCALL_ERRVAL $errval'; \\
> echo '#include <syscall-template.S>'; \\"
> diff --git a/sysdeps/unix/syscall-template.S b/sysdeps/unix/syscall-template.S
> index 4993ff5..d4584a9 100644
> --- a/sysdeps/unix/syscall-template.S
> +++ b/sysdeps/unix/syscall-template.S
> @@ -27,7 +27,6 @@
> SYSCALL_NAME syscall name
> SYSCALL_NARGS number of arguments this call takes
> SYSCALL_SYMBOL primary symbol name
> - SYSCALL_CANCELLABLE 1 if the call is a cancelation point
> SYSCALL_NOERRNO 1 to define a no-errno version (see below)
> SYSCALL_ERRVAL 1 to define an error-value version (see below)
>
> @@ -41,11 +40,7 @@
> instructions long and the untrained eye might not distinguish them from
> some compiled code that inexplicably lacks source line information. */
>
> -#if SYSCALL_CANCELLABLE
> -# include <sysdep-cancel.h>
> -#else
> -# include <sysdep.h>
> -#endif
> +#include <sysdep.h>
>
> /* This indirection is needed so that SYMBOL gets macro-expanded. */
> #define syscall_hidden_def(SYMBOL) hidden_def (SYMBOL)
> diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
> index 4be2259..d39b6a2 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
> @@ -24,102 +24,23 @@
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .section ".text"; \
> -ENTRY (__##syscall_name##_nocancel); \
> -.Lpseudo_nocancel: \
> - DO_CALL (syscall_name, args); \
> -.Lpseudo_finish: \
> - cmn x0, 4095; \
> - b.cs .Lsyscall_error; \
> - .subsection 2; \
> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
> -ENTRY (name); \
> - SINGLE_THREAD_P(16); \
> - cbz w16, .Lpseudo_nocancel; \
> - /* Setup common stack frame no matter the number of args. \
> - Also save the first arg, since it's basically free. */ \
> - stp x30, x0, [sp, -64]!; \
> - cfi_adjust_cfa_offset (64); \
> - cfi_rel_offset (x30, 0); \
> - DOCARGS_##args; /* save syscall args around CENABLE. */ \
> - CENABLE; \
> - mov x16, x0; /* save mask around syscall. */ \
> - UNDOCARGS_##args; /* restore syscall args. */ \
> - DO_CALL (syscall_name, args); \
> - str x0, [sp, 8]; /* save result around CDISABLE. */ \
> - mov x0, x16; /* restore mask for CDISABLE. */ \
> - CDISABLE; \
> - /* Break down the stack frame, restoring result at once. */ \
> - ldp x30, x0, [sp], 64; \
> - cfi_adjust_cfa_offset (-64); \
> - cfi_restore (x30); \
> - b .Lpseudo_finish; \
> - cfi_endproc; \
> - .size name, .-name; \
> - .previous
> -
> -# undef PSEUDO_END
> -# define PSEUDO_END(name) \
> - SYSCALL_ERROR_HANDLER; \
> - cfi_endproc
> -
> -# define DOCARGS_0
> -# define DOCARGS_1
> -# define DOCARGS_2 str x1, [sp, 16]
> -# define DOCARGS_3 stp x1, x2, [sp, 16]
> -# define DOCARGS_4 DOCARGS_3; str x3, [sp, 32]
> -# define DOCARGS_5 DOCARGS_3; stp x3, x4, [sp, 32]
> -# define DOCARGS_6 DOCARGS_5; str x5, [sp, 48]
> -
> -# define UNDOCARGS_0
> -# define UNDOCARGS_1 ldr x0, [sp, 8]
> -# define UNDOCARGS_2 ldp x0, x1, [sp, 8]
> -# define UNDOCARGS_3 UNDOCARGS_1; ldp x1, x2, [sp, 16]
> -# define UNDOCARGS_4 UNDOCARGS_2; ldp x2, x3, [sp, 24]
> -# define UNDOCARGS_5 UNDOCARGS_3; ldp x3, x4, [sp, 32]
> -# define UNDOCARGS_6 UNDOCARGS_4; ldp x4, x5, [sp, 40]
> -
> # if IS_IN (libpthread)
> -# define CENABLE bl __pthread_enable_asynccancel
> -# define CDISABLE bl __pthread_disable_asynccancel
> # define __local_multiple_threads __pthread_multiple_threads
> # elif IS_IN (libc)
> -# define CENABLE bl __libc_enable_asynccancel
> -# define CDISABLE bl __libc_disable_asynccancel
> # define __local_multiple_threads __libc_multiple_threads
> -# elif IS_IN (librt)
> -# define CENABLE bl __librt_enable_asynccancel
> -# define CDISABLE bl __librt_disable_asynccancel
> -# else
> -# error Unsupported library
> # endif
>
> # if IS_IN (libpthread) || IS_IN (libc)
> -# ifndef __ASSEMBLER__
> extern int __local_multiple_threads attribute_hidden;
> -# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
> -# else
> -# define SINGLE_THREAD_P(R) \
> - adrp x##R, __local_multiple_threads; \
> - ldr w##R, [x##R, :lo12:__local_multiple_threads]
> -# endif
> +# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
> # else
> /* There is no __local_multiple_threads for librt, so use the TCB. */
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P(R) \
> - mrs x##R, tpidr_el0; \
> - sub x##R, x##R, PTHREAD_SIZEOF; \
> - ldr w##R, [x##R, PTHREAD_MULTIPLE_THREADS_OFFSET]
> -# endif
> # endif
>
> -#elif !defined __ASSEMBLER__
> +#else
>
> /* For rtld, et cetera. */
> # define SINGLE_THREAD_P 1
> @@ -127,8 +48,6 @@ extern int __local_multiple_threads attribute_hidden;
>
> #endif
>
> -#ifndef __ASSEMBLER__
> # define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
> index 66d6962..366cf31 100644
> --- a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
> @@ -17,147 +17,24 @@
>
> #include <sysdep.h>
> #include <tls.h>
> -#ifndef __ASSEMBLER__
> -# include <nptl/pthreadP.h>
> -#endif
> +#include <nptl/pthreadP.h>
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -/* ??? Assumes that nothing comes between PSEUDO and PSEUDO_END
> - besides "ret". */
> -
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .globl __##syscall_name##_nocancel; \
> - .type __##syscall_name##_nocancel, @function; \
> - .usepv __##syscall_name##_nocancel, std; \
> - .align 4; \
> - cfi_startproc; \
> -__LABEL(__##syscall_name##_nocancel) \
> - ldgp gp, 0(pv); \
> - PSEUDO_PROF; \
> -__LABEL($pseudo_nocancel) \
> - PSEUDO_PREPARE_ARGS; \
> - lda v0, SYS_ify(syscall_name); \
> - call_pal PAL_callsys; \
> - bne a3, SYSCALL_ERROR_LABEL; \
> -__LABEL($pseudo_ret) \
> - .subsection 2; \
> - .size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \
> - .globl name; \
> - .type name, @function; \
> - .usepv name, std; \
> - .align 4; \
> - cfi_startproc; \
> -__LABEL(name) \
> - ldgp gp, 0(pv); \
> - PSEUDO_PROF; \
> - SINGLE_THREAD_P(t0); \
> - beq t0, $pseudo_nocancel; \
> - subq sp, 64, sp; \
> - cfi_def_cfa_offset(64); \
> - stq ra, 0(sp); \
> - cfi_offset(ra, -64); \
> - SAVE_ARGS_##args; \
> - CENABLE; \
> - LOAD_ARGS_##args; \
> - /* Save the CENABLE return value in RA. That register \
> - is preserved across syscall and the real return \
> - address is saved on the stack. */ \
> - mov v0, ra; \
> - lda v0, SYS_ify(syscall_name); \
> - call_pal PAL_callsys; \
> - stq v0, 8(sp); \
> - mov ra, a0; \
> - bne a3, $multi_error; \
> - CDISABLE; \
> - ldq ra, 0(sp); \
> - ldq v0, 8(sp); \
> - addq sp, 64, sp; \
> - cfi_remember_state; \
> - cfi_restore(ra); \
> - cfi_def_cfa_offset(0); \
> - ret; \
> - cfi_restore_state; \
> -__LABEL($multi_error) \
> - CDISABLE; \
> - ldq ra, 0(sp); \
> - ldq v0, 8(sp); \
> - addq sp, 64, sp; \
> - cfi_restore(ra); \
> - cfi_def_cfa_offset(0); \
> - SYSCALL_ERROR_FALLTHRU; \
> - SYSCALL_ERROR_HANDLER; \
> - cfi_endproc; \
> - .previous
> -
> -# undef PSEUDO_END
> -# define PSEUDO_END(sym) \
> - cfi_endproc; \
> - .subsection 2; \
> - .size sym, .-sym
> -
> -# define SAVE_ARGS_0 /* Nothing. */
> -# define SAVE_ARGS_1 SAVE_ARGS_0; stq a0, 8(sp)
> -# define SAVE_ARGS_2 SAVE_ARGS_1; stq a1, 16(sp)
> -# define SAVE_ARGS_3 SAVE_ARGS_2; stq a2, 24(sp)
> -# define SAVE_ARGS_4 SAVE_ARGS_3; stq a3, 32(sp)
> -# define SAVE_ARGS_5 SAVE_ARGS_4; stq a4, 40(sp)
> -# define SAVE_ARGS_6 SAVE_ARGS_5; stq a5, 48(sp)
> -
> -# define LOAD_ARGS_0 /* Nothing. */
> -# define LOAD_ARGS_1 LOAD_ARGS_0; ldq a0, 8(sp)
> -# define LOAD_ARGS_2 LOAD_ARGS_1; ldq a1, 16(sp)
> -# define LOAD_ARGS_3 LOAD_ARGS_2; ldq a2, 24(sp)
> -# define LOAD_ARGS_4 LOAD_ARGS_3; ldq a3, 32(sp)
> -# define LOAD_ARGS_5 LOAD_ARGS_4; ldq a4, 40(sp)
> -# define LOAD_ARGS_6 LOAD_ARGS_5; ldq a5, 48(sp)
> -
> # if IS_IN (libpthread)
> -# define __local_enable_asynccancel __pthread_enable_asynccancel
> -# define __local_disable_asynccancel __pthread_disable_asynccancel
> # define __local_multiple_threads __pthread_multiple_threads
> # elif IS_IN (libc)
> -# define __local_enable_asynccancel __libc_enable_asynccancel
> -# define __local_disable_asynccancel __libc_disable_asynccancel
> # define __local_multiple_threads __libc_multiple_threads
> -# elif IS_IN (librt)
> -# define __local_enable_asynccancel __librt_enable_asynccancel
> -# define __local_disable_asynccancel __librt_disable_asynccancel
> -# else
> -# error Unsupported library
> -# endif
> -
> -# ifdef PIC
> -# define CENABLE bsr ra, __local_enable_asynccancel !samegp
> -# define CDISABLE bsr ra, __local_disable_asynccancel !samegp
> -# else
> -# define CENABLE jsr ra, __local_enable_asynccancel; ldgp ra, 0(gp)
> -# define CDISABLE jsr ra, __local_disable_asynccancel; ldgp ra, 0(gp)
> # endif
>
> # if IS_IN (libpthread) || IS_IN (libc)
> -# ifndef __ASSEMBLER__
> extern int __local_multiple_threads attribute_hidden;
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (__local_multiple_threads == 0, 1)
> -# elif defined(PIC)
> -# define SINGLE_THREAD_P(reg) ldl reg, __local_multiple_threads(gp) !gprel
> -# else
> -# define SINGLE_THREAD_P(reg) \
> - ldah reg, __local_multiple_threads(gp) !gprelhigh; \
> - ldl reg, __local_multiple_threads(reg) !gprellow
> -# endif
> # else
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P(reg) \
> - call_pal PAL_rduniq; \
> - ldl reg, MULTIPLE_THREADS_OFFSET($0)
> -# endif
> # endif
>
> #else
> @@ -167,8 +44,6 @@ extern int __local_multiple_threads attribute_hidden;
>
> #endif
>
> -#ifndef __ASSEMBLER__
> # define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
> index de12acf..738e749 100644
> --- a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
> @@ -23,210 +23,23 @@
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -/* NOTE: We do mark syscalls with unwind annotations, for the benefit of
> - cancellation; but they're really only accurate at the point of the
> - syscall. The ARM unwind directives are not rich enough without adding
> - a custom personality function. */
> -
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .text; \
> - ENTRY (__##syscall_name##_nocancel); \
> - CFI_SECTIONS; \
> - DO_CALL (syscall_name, args); \
> - cmn r0, $4096; \
> - PSEUDO_RET; \
> - END (__##syscall_name##_nocancel); \
> - ENTRY (name); \
> - SINGLE_THREAD_P; \
> - DOARGS_##args; \
> - bne .Lpseudo_cancel; \
> - cfi_remember_state; \
> - ldr r7, =SYS_ify (syscall_name); \
> - swi 0x0; \
> - UNDOARGS_##args; \
> - cmn r0, $4096; \
> - PSEUDO_RET; \
> - cfi_restore_state; \
> - .Lpseudo_cancel: \
> - .fnstart; /* matched by the .fnend in UNDOARGS below. */ \
> - DOCARGS_##args; /* save syscall args etc. around CENABLE. */ \
> - CENABLE; \
> - mov ip, r0; /* put mask in safe place. */ \
> - UNDOCARGS_##args; /* restore syscall args. */ \
> - ldr r7, =SYS_ify (syscall_name); \
> - swi 0x0; /* do the call. */ \
> - mov r7, r0; /* save syscall return value. */ \
> - mov r0, ip; /* get mask back. */ \
> - CDISABLE; \
> - mov r0, r7; /* retrieve return value. */ \
> - RESTORE_LR_##args; \
> - UNDOARGS_##args; \
> - cmn r0, $4096
> -
> -/* DOARGS pushes eight bytes on the stack for five arguments, twelve bytes for
> - six arguments, and four bytes for fewer. In order to preserve doubleword
> - alignment, sometimes we must save an extra register. */
> -
> -# define RESTART_UNWIND \
> - .fnend; \
> - .fnstart; \
> - .save {r7}; \
> - .save {lr}
> -
> -# define DOCARGS_0 \
> - .save {r7}; \
> - push {lr}; \
> - cfi_adjust_cfa_offset (4); \
> - cfi_rel_offset (lr, 0); \
> - .save {lr}
> -# define UNDOCARGS_0
> -# define RESTORE_LR_0 \
> - pop {lr}; \
> - cfi_adjust_cfa_offset (-4); \
> - cfi_restore (lr)
> -
> -# define DOCARGS_1 \
> - .save {r7}; \
> - push {r0, r1, lr}; \
> - cfi_adjust_cfa_offset (12); \
> - cfi_rel_offset (lr, 8); \
> - .save {lr}; \
> - .pad #8
> -# define UNDOCARGS_1 \
> - ldr r0, [sp], #8; \
> - cfi_adjust_cfa_offset (-8); \
> - RESTART_UNWIND
> -# define RESTORE_LR_1 \
> - RESTORE_LR_0
> -
> -# define DOCARGS_2 \
> - .save {r7}; \
> - push {r0, r1, lr}; \
> - cfi_adjust_cfa_offset (12); \
> - cfi_rel_offset (lr, 8); \
> - .save {lr}; \
> - .pad #8
> -# define UNDOCARGS_2 \
> - pop {r0, r1}; \
> - cfi_adjust_cfa_offset (-8); \
> - RESTART_UNWIND
> -# define RESTORE_LR_2 \
> - RESTORE_LR_0
> -
> -# define DOCARGS_3 \
> - .save {r7}; \
> - push {r0, r1, r2, r3, lr}; \
> - cfi_adjust_cfa_offset (20); \
> - cfi_rel_offset (lr, 16); \
> - .save {lr}; \
> - .pad #16
> -# define UNDOCARGS_3 \
> - pop {r0, r1, r2, r3}; \
> - cfi_adjust_cfa_offset (-16); \
> - RESTART_UNWIND
> -# define RESTORE_LR_3 \
> - RESTORE_LR_0
> -
> -# define DOCARGS_4 \
> - .save {r7}; \
> - push {r0, r1, r2, r3, lr}; \
> - cfi_adjust_cfa_offset (20); \
> - cfi_rel_offset (lr, 16); \
> - .save {lr}; \
> - .pad #16
> -# define UNDOCARGS_4 \
> - pop {r0, r1, r2, r3}; \
> - cfi_adjust_cfa_offset (-16); \
> - RESTART_UNWIND
> -# define RESTORE_LR_4 \
> - RESTORE_LR_0
> -
> -/* r4 is only stmfd'ed for correct stack alignment. */
> -# define DOCARGS_5 \
> - .save {r4, r7}; \
> - push {r0, r1, r2, r3, r4, lr}; \
> - cfi_adjust_cfa_offset (24); \
> - cfi_rel_offset (lr, 20); \
> - .save {lr}; \
> - .pad #20
> -# define UNDOCARGS_5 \
> - pop {r0, r1, r2, r3}; \
> - cfi_adjust_cfa_offset (-16); \
> - .fnend; \
> - .fnstart; \
> - .save {r4, r7}; \
> - .save {lr}; \
> - .pad #4
> -# define RESTORE_LR_5 \
> - pop {r4, lr}; \
> - cfi_adjust_cfa_offset (-8); \
> - /* r4 will be marked as restored later. */ \
> - cfi_restore (lr)
> -
> -# define DOCARGS_6 \
> - .save {r4, r5, r7}; \
> - push {r0, r1, r2, r3, lr}; \
> - cfi_adjust_cfa_offset (20); \
> - cfi_rel_offset (lr, 16); \
> - .save {lr}; \
> - .pad #16
> -# define UNDOCARGS_6 \
> - pop {r0, r1, r2, r3}; \
> - cfi_adjust_cfa_offset (-16); \
> - .fnend; \
> - .fnstart; \
> - .save {r4, r5, r7}; \
> - .save {lr};
> -# define RESTORE_LR_6 \
> - RESTORE_LR_0
> -
> # if IS_IN (libpthread)
> -# define CENABLE bl PLTJMP(__pthread_enable_asynccancel)
> -# define CDISABLE bl PLTJMP(__pthread_disable_asynccancel)
> # define __local_multiple_threads __pthread_multiple_threads
> # elif IS_IN (libc)
> -# define CENABLE bl PLTJMP(__libc_enable_asynccancel)
> -# define CDISABLE bl PLTJMP(__libc_disable_asynccancel)
> # define __local_multiple_threads __libc_multiple_threads
> -# elif IS_IN (librt)
> -# define CENABLE bl PLTJMP(__librt_enable_asynccancel)
> -# define CDISABLE bl PLTJMP(__librt_disable_asynccancel)
> -# else
> -# error Unsupported library
> # endif
>
> # if IS_IN (libpthread) || IS_IN (libc)
> -# ifndef __ASSEMBLER__
> extern int __local_multiple_threads attribute_hidden;
> -# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
> -# else
> -# define SINGLE_THREAD_P \
> - LDST_PCREL(ldr, ip, ip, __local_multiple_threads); \
> - teq ip, #0
> -# endif
> +# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
> # else
> /* There is no __local_multiple_threads for librt, so use the TCB. */
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P \
> - push {r0, lr}; \
> - cfi_adjust_cfa_offset (8); \
> - cfi_rel_offset (lr, 4); \
> - GET_TLS (lr); \
> - NEGOFF_ADJ_BASE (r0, MULTIPLE_THREADS_OFFSET); \
> - ldr ip, NEGOFF_OFF1 (r0, MULTIPLE_THREADS_OFFSET); \
> - pop {r0, lr}; \
> - cfi_adjust_cfa_offset (-8); \
> - cfi_restore (lr); \
> - teq ip, #0
> -# endif
> # endif
>
> -#elif !defined __ASSEMBLER__
> +#else
>
> /* For rtld, et cetera. */
> # define SINGLE_THREAD_P 1
> @@ -234,8 +47,6 @@ extern int __local_multiple_threads attribute_hidden;
>
> #endif
>
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> +#define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
> index 8b7f2b2..a6189a7 100644
> --- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
> @@ -23,215 +23,6 @@
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -# ifndef NO_ERROR
> -# define NO_ERROR -0x1000
> -# endif
> -
> -/* The syscall cancellation mechanism requires userspace
> - assistance, the following code does roughly this:
> -
> - do arguments (read arg5 and arg6 to registers)
> - setup frame
> -
> - check if there are threads, yes jump to pseudo_cancel
> -
> - unthreaded:
> - syscall
> - check syscall return (jump to pre_end)
> - set errno
> - set return to -1
> - (jump to pre_end)
> -
> - pseudo_cancel:
> - cenable
> - syscall
> - cdisable
> - check syscall return (jump to pre_end)
> - set errno
> - set return to -1
> -
> - pre_end
> - restore stack
> -
> - It is expected that 'ret' and 'END' macros will
> - append an 'undo arguments' and 'return' to the
> - this PSEUDO macro. */
> -
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - ENTRY (__##syscall_name##_nocancel) \
> - DOARGS_##args ASM_LINE_SEP \
> - stwm TREG, 64(%sp) ASM_LINE_SEP \
> - .cfi_def_cfa_offset -64 ASM_LINE_SEP \
> - .cfi_offset TREG, 0 ASM_LINE_SEP \
> - stw %sp, -4(%sp) ASM_LINE_SEP \
> - stw %r19, -32(%sp) ASM_LINE_SEP \
> - .cfi_offset 19, 32 ASM_LINE_SEP \
> - /* Save r19 */ ASM_LINE_SEP \
> - SAVE_PIC(TREG) ASM_LINE_SEP \
> - /* Do syscall, delay loads # */ ASM_LINE_SEP \
> - ble 0x100(%sr2,%r0) ASM_LINE_SEP \
> - ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \
> - ldi NO_ERROR,%r1 ASM_LINE_SEP \
> - cmpb,>>=,n %r1,%ret0,L(pre_nc_end) ASM_LINE_SEP \
> - /* Restore r19 from TREG */ ASM_LINE_SEP \
> - LOAD_PIC(TREG) /* delay */ ASM_LINE_SEP \
> - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \
> - /* Use TREG for temp storage */ ASM_LINE_SEP \
> - copy %ret0, TREG /* delay */ ASM_LINE_SEP \
> - /* OPTIMIZE: Don't reload r19 */ ASM_LINE_SEP \
> - /* do a -1*syscall_ret0 */ ASM_LINE_SEP \
> - sub %r0, TREG, TREG ASM_LINE_SEP \
> - /* Store into errno location */ ASM_LINE_SEP \
> - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \
> - /* return -1 as error */ ASM_LINE_SEP \
> - ldi -1, %ret0 ASM_LINE_SEP \
> -L(pre_nc_end): ASM_LINE_SEP \
> - /* No need to LOAD_PIC */ ASM_LINE_SEP \
> - /* Undo frame */ ASM_LINE_SEP \
> - ldwm -64(%sp),TREG ASM_LINE_SEP \
> - /* Restore rp before exit */ ASM_LINE_SEP \
> - ldw -20(%sp), %rp ASM_LINE_SEP \
> - ret ASM_LINE_SEP \
> - END(__##syscall_name##_nocancel) ASM_LINE_SEP \
> - /**********************************************/ASM_LINE_SEP \
> - ENTRY (name) \
> - DOARGS_##args ASM_LINE_SEP \
> - stwm TREG, 64(%sp) ASM_LINE_SEP \
> - .cfi_def_cfa_offset -64 ASM_LINE_SEP \
> - .cfi_offset TREG, 0 ASM_LINE_SEP \
> - stw %sp, -4(%sp) ASM_LINE_SEP \
> - stw %r19, -32(%sp) ASM_LINE_SEP \
> - .cfi_offset 19, 32 ASM_LINE_SEP \
> - /* Done setting up frame, continue... */ ASM_LINE_SEP \
> - SINGLE_THREAD_P ASM_LINE_SEP \
> - cmpib,<>,n 0,%ret0,L(pseudo_cancel) ASM_LINE_SEP \
> -L(unthreaded): ASM_LINE_SEP \
> - /* Save r19 */ ASM_LINE_SEP \
> - SAVE_PIC(TREG) ASM_LINE_SEP \
> - /* Do syscall, delay loads # */ ASM_LINE_SEP \
> - ble 0x100(%sr2,%r0) ASM_LINE_SEP \
> - ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \
> - ldi NO_ERROR,%r1 ASM_LINE_SEP \
> - cmpb,>>=,n %r1,%ret0,L(pre_end) ASM_LINE_SEP \
> - /* Restore r19 from TREG */ ASM_LINE_SEP \
> - LOAD_PIC(TREG) /* delay */ ASM_LINE_SEP \
> - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \
> - /* Use TREG for temp storage */ ASM_LINE_SEP \
> - copy %ret0, TREG /* delay */ ASM_LINE_SEP \
> - /* OPTIMIZE: Don't reload r19 */ ASM_LINE_SEP \
> - /* do a -1*syscall_ret0 */ ASM_LINE_SEP \
> - sub %r0, TREG, TREG ASM_LINE_SEP \
> - /* Store into errno location */ ASM_LINE_SEP \
> - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \
> - b L(pre_end) ASM_LINE_SEP \
> - /* return -1 as error */ ASM_LINE_SEP \
> - ldi -1, %ret0 /* delay */ ASM_LINE_SEP \
> -L(pseudo_cancel): ASM_LINE_SEP \
> - PUSHARGS_##args /* Save args */ ASM_LINE_SEP \
> - /* Save r19 into TREG */ ASM_LINE_SEP \
> - CENABLE /* FUNC CALL */ ASM_LINE_SEP \
> - SAVE_PIC(TREG) /* delay */ ASM_LINE_SEP \
> - /* restore syscall args */ ASM_LINE_SEP \
> - POPARGS_##args ASM_LINE_SEP \
> - /* save mask from cenable (use stub rp slot) */ ASM_LINE_SEP \
> - stw %ret0, -24(%sp) ASM_LINE_SEP \
> - /* ... SYSCALL ... */ ASM_LINE_SEP \
> - ble 0x100(%sr2,%r0) ASM_LINE_SEP \
> - ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \
> - /* ............... */ ASM_LINE_SEP \
> - LOAD_PIC(TREG) ASM_LINE_SEP \
> - /* pass mask as arg0 to cdisable */ ASM_LINE_SEP \
> - ldw -24(%sp), %r26 ASM_LINE_SEP \
> - CDISABLE ASM_LINE_SEP \
> - stw %ret0, -24(%sp) /* delay */ ASM_LINE_SEP \
> - /* Restore syscall return */ ASM_LINE_SEP \
> - ldw -24(%sp), %ret0 ASM_LINE_SEP \
> - /* compare error */ ASM_LINE_SEP \
> - ldi NO_ERROR,%r1 ASM_LINE_SEP \
> - /* branch if no error */ ASM_LINE_SEP \
> - cmpb,>>=,n %r1,%ret0,L(pre_end) ASM_LINE_SEP \
> - LOAD_PIC(TREG) /* cond. nullify */ ASM_LINE_SEP \
> - copy %ret0, TREG /* save syscall return */ ASM_LINE_SEP \
> - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \
> - /* make syscall res value positive */ ASM_LINE_SEP \
> - sub %r0, TREG, TREG /* delay */ ASM_LINE_SEP \
> - /* No need to LOAD_PIC */ ASM_LINE_SEP \
> - /* store into errno location */ ASM_LINE_SEP \
> - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \
> - /* return -1 */ ASM_LINE_SEP \
> - ldi -1, %ret0 ASM_LINE_SEP \
> -L(pre_end): ASM_LINE_SEP \
> - /* No need to LOAD_PIC */ ASM_LINE_SEP \
> - /* Undo frame */ ASM_LINE_SEP \
> - ldwm -64(%sp),TREG ASM_LINE_SEP \
> - /* Restore rp before exit */ ASM_LINE_SEP \
> - ldw -20(%sp), %rp ASM_LINE_SEP
> -
> -/* Save arguments into our frame */
> -# define PUSHARGS_0 /* nothing to do */
> -# define PUSHARGS_1 PUSHARGS_0 stw %r26, -36(%sr0,%sp) ASM_LINE_SEP \
> - .cfi_offset 26, 28 ASM_LINE_SEP
> -# define PUSHARGS_2 PUSHARGS_1 stw %r25, -40(%sr0,%sp) ASM_LINE_SEP \
> - .cfi_offset 25, 24 ASM_LINE_SEP
> -# define PUSHARGS_3 PUSHARGS_2 stw %r24, -44(%sr0,%sp) ASM_LINE_SEP \
> - .cfi_offset 24, 20 ASM_LINE_SEP
> -# define PUSHARGS_4 PUSHARGS_3 stw %r23, -48(%sr0,%sp) ASM_LINE_SEP \
> - .cfi_offset 23, 16 ASM_LINE_SEP
> -# define PUSHARGS_5 PUSHARGS_4 stw %r22, -52(%sr0,%sp) ASM_LINE_SEP \
> - .cfi_offset 22, 12 ASM_LINE_SEP
> -# define PUSHARGS_6 PUSHARGS_5 stw %r21, -56(%sr0,%sp) ASM_LINE_SEP \
> - .cfi_offset 21, 8 ASM_LINE_SEP
> -
> -/* Bring them back from the stack */
> -# define POPARGS_0 /* nothing to do */
> -# define POPARGS_1 POPARGS_0 ldw -36(%sr0,%sp), %r26 ASM_LINE_SEP
> -# define POPARGS_2 POPARGS_1 ldw -40(%sr0,%sp), %r25 ASM_LINE_SEP
> -# define POPARGS_3 POPARGS_2 ldw -44(%sr0,%sp), %r24 ASM_LINE_SEP
> -# define POPARGS_4 POPARGS_3 ldw -48(%sr0,%sp), %r23 ASM_LINE_SEP
> -# define POPARGS_5 POPARGS_4 ldw -52(%sr0,%sp), %r22 ASM_LINE_SEP
> -# define POPARGS_6 POPARGS_5 ldw -56(%sr0,%sp), %r21 ASM_LINE_SEP
> -
> -# if IS_IN (libpthread)
> -# ifdef PIC
> -# define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \
> - bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP
> -# define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \
> - bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP
> -# else
> -# define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \
> - bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP
> -# define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \
> - bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP
> -# endif
> -# elif IS_IN (libc)
> -# ifdef PIC
> -# define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \
> - bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP
> -# define CDISABLE .import __libc_disable_asynccancel,code ASM_LINE_SEP \
> - bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP
> -# else
> -# define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \
> - bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP
> -# define CDISABLE .import __libc_disable_asynccancel,code ASM_LINE_SEP \
> - bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP
> -# endif
> -# elif IS_IN (librt)
> -# ifdef PIC
> -# define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \
> - bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP
> -# define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \
> - bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP
> -# else
> -# define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \
> - bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP
> -# define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \
> - bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP
> -# endif
> -# else
> -# error Unsupported library
> -# endif
> -
> # if IS_IN (libpthread)
> # define __local_multiple_threads __pthread_multiple_threads
> # elif IS_IN (libc)
> @@ -242,17 +33,11 @@ L(pre_end): ASM_LINE_SEP \
> # error Unsupported library
> # endif
>
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -# else
> -/* Read the value of header.multiple_threads from the thread pointer */
> -# define SINGLE_THREAD_P \
> - mfctl %cr27, %ret0 ASM_LINE_SEP \
> - ldw MULTIPLE_THREADS_THREAD_OFFSET(%sr0,%ret0),%ret0 ASM_LINE_SEP
> -# endif
> -#elif !defined __ASSEMBLER__
> +
> +#else
>
> /* This code should never be used but we define it anyhow. */
> # define SINGLE_THREAD_P (1)
> @@ -261,8 +46,6 @@ L(pre_end): ASM_LINE_SEP \
> #endif
> /* IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) */
>
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> +#define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
> index ebf6019..34e2b6f 100644
> --- a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
> @@ -24,130 +24,17 @@
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .text; \
> - ENTRY (name) \
> - cmpl $0, %gs:MULTIPLE_THREADS_OFFSET; \
> - jne L(pseudo_cancel); \
> - .type __##syscall_name##_nocancel,@function; \
> - .globl __##syscall_name##_nocancel; \
> - __##syscall_name##_nocancel: \
> - DO_CALL (syscall_name, args); \
> - cmpl $-4095, %eax; \
> - jae SYSCALL_ERROR_LABEL; \
> - ret; \
> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
> - L(pseudo_cancel): \
> - CENABLE \
> - SAVE_OLDTYPE_##args \
> - PUSHCARGS_##args \
> - DOCARGS_##args \
> - movl $SYS_ify (syscall_name), %eax; \
> - ENTER_KERNEL; \
> - POPCARGS_##args; \
> - POPSTATE_##args \
> - cmpl $-4095, %eax; \
> - jae SYSCALL_ERROR_LABEL
> -
> -# define SAVE_OLDTYPE_0 movl %eax, %ecx;
> -# define SAVE_OLDTYPE_1 SAVE_OLDTYPE_0
> -# define SAVE_OLDTYPE_2 pushl %eax; cfi_adjust_cfa_offset (4);
> -# define SAVE_OLDTYPE_3 SAVE_OLDTYPE_2
> -# define SAVE_OLDTYPE_4 SAVE_OLDTYPE_2
> -# define SAVE_OLDTYPE_5 SAVE_OLDTYPE_2
> -# define SAVE_OLDTYPE_6 SAVE_OLDTYPE_2
> -
> -# define PUSHCARGS_0 /* No arguments to push. */
> -# define DOCARGS_0 /* No arguments to frob. */
> -# define POPCARGS_0 /* No arguments to pop. */
> -# define _PUSHCARGS_0 /* No arguments to push. */
> -# define _POPCARGS_0 /* No arguments to pop. */
> -
> -# define PUSHCARGS_1 movl %ebx, %edx; cfi_register (ebx, edx); PUSHCARGS_0
> -# define DOCARGS_1 _DOARGS_1 (4)
> -# define POPCARGS_1 POPCARGS_0; movl %edx, %ebx; cfi_restore (ebx);
> -# define _PUSHCARGS_1 pushl %ebx; cfi_adjust_cfa_offset (4); \
> - cfi_rel_offset (ebx, 0); _PUSHCARGS_0
> -# define _POPCARGS_1 _POPCARGS_0; popl %ebx; \
> - cfi_adjust_cfa_offset (-4); cfi_restore (ebx);
> -
> -# define PUSHCARGS_2 PUSHCARGS_1
> -# define DOCARGS_2 _DOARGS_2 (12)
> -# define POPCARGS_2 POPCARGS_1
> -# define _PUSHCARGS_2 _PUSHCARGS_1
> -# define _POPCARGS_2 _POPCARGS_1
> -
> -# define PUSHCARGS_3 _PUSHCARGS_2
> -# define DOCARGS_3 _DOARGS_3 (20)
> -# define POPCARGS_3 _POPCARGS_3
> -# define _PUSHCARGS_3 _PUSHCARGS_2
> -# define _POPCARGS_3 _POPCARGS_2
> -
> -# define PUSHCARGS_4 _PUSHCARGS_4
> -# define DOCARGS_4 _DOARGS_4 (28)
> -# define POPCARGS_4 _POPCARGS_4
> -# define _PUSHCARGS_4 pushl %esi; cfi_adjust_cfa_offset (4); \
> - cfi_rel_offset (esi, 0); _PUSHCARGS_3
> -# define _POPCARGS_4 _POPCARGS_3; popl %esi; \
> - cfi_adjust_cfa_offset (-4); cfi_restore (esi);
> -
> -# define PUSHCARGS_5 _PUSHCARGS_5
> -# define DOCARGS_5 _DOARGS_5 (36)
> -# define POPCARGS_5 _POPCARGS_5
> -# define _PUSHCARGS_5 pushl %edi; cfi_adjust_cfa_offset (4); \
> - cfi_rel_offset (edi, 0); _PUSHCARGS_4
> -# define _POPCARGS_5 _POPCARGS_4; popl %edi; \
> - cfi_adjust_cfa_offset (-4); cfi_restore (edi);
> -
> -# define PUSHCARGS_6 _PUSHCARGS_6
> -# define DOCARGS_6 _DOARGS_6 (44)
> -# define POPCARGS_6 _POPCARGS_6
> -# define _PUSHCARGS_6 pushl %ebp; cfi_adjust_cfa_offset (4); \
> - cfi_rel_offset (ebp, 0); _PUSHCARGS_5
> -# define _POPCARGS_6 _POPCARGS_5; popl %ebp; \
> - cfi_adjust_cfa_offset (-4); cfi_restore (ebp);
> -
> -# if IS_IN (libpthread)
> -# define CENABLE call __pthread_enable_asynccancel;
> -# define CDISABLE call __pthread_disable_asynccancel
> -# elif IS_IN (libc)
> -# define CENABLE call __libc_enable_asynccancel;
> -# define CDISABLE call __libc_disable_asynccancel
> -# elif IS_IN (librt)
> -# define CENABLE call __librt_enable_asynccancel;
> -# define CDISABLE call __librt_disable_asynccancel
> -# else
> -# error Unsupported library
> -# endif
> -# define POPSTATE_0 \
> - pushl %eax; cfi_adjust_cfa_offset (4); movl %ecx, %eax; \
> - CDISABLE; popl %eax; cfi_adjust_cfa_offset (-4);
> -# define POPSTATE_1 POPSTATE_0
> -# define POPSTATE_2 xchgl (%esp), %eax; CDISABLE; popl %eax; \
> - cfi_adjust_cfa_offset (-4);
> -# define POPSTATE_3 POPSTATE_2
> -# define POPSTATE_4 POPSTATE_3
> -# define POPSTATE_5 POPSTATE_4
> -# define POPSTATE_6 POPSTATE_5
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P cmpl $0, %gs:MULTIPLE_THREADS_OFFSET
> -# endif
>
> -#elif !defined __ASSEMBLER__
> +#else
>
> # define SINGLE_THREAD_P (1)
> # define NO_CANCELLATION 1
>
> #endif
>
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> +#define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
> index 7c7f619..96d04de 100644
> --- a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
> @@ -23,201 +23,13 @@
> #endif
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
> -
> -# undef PSEUDO
> -
> -# if IS_IN (libc)
> -# define SYSDEP_CANCEL_ERRNO __libc_errno
> -# else
> -# define SYSDEP_CANCEL_ERRNO errno
> -# endif
> -# define SYSDEP_CANCEL_ERROR(args) \
> -.section .gnu.linkonce.t.__syscall_error_##args, "ax"; \
> - .align 32; \
> - .proc __syscall_error_##args; \
> - .global __syscall_error_##args; \
> - .hidden __syscall_error_##args; \
> - .size __syscall_error_##args, 64; \
> -__syscall_error_##args: \
> - .prologue; \
> - .regstk args, 5, args, 0; \
> - .save ar.pfs, loc0; \
> - .save rp, loc1; \
> - .body; \
> - addl loc4 = @ltoff(@tprel(SYSDEP_CANCEL_ERRNO)), gp;; \
> - ld8 loc4 = [loc4]; \
> - mov rp = loc1;; \
> - mov r8 = -1; \
> - add loc4 = loc4, r13;; \
> - st4 [loc4] = loc3; \
> - mov ar.pfs = loc0
> -
> -# ifndef USE_DL_SYSINFO
> -
> -# define PSEUDO(name, syscall_name, args) \
> -.text; \
> -ENTRY (name) \
> - adds r14 = MULTIPLE_THREADS_OFFSET, r13;; \
> - ld4 r14 = [r14]; \
> - mov r15 = SYS_ify(syscall_name);; \
> - cmp4.ne p6, p7 = 0, r14; \
> -(p6) br.cond.spnt .Lpseudo_cancel;; \
> - break __BREAK_SYSCALL;; \
> - cmp.eq p6,p0=-1,r10; \
> -(p6) br.cond.spnt.few __syscall_error; \
> - ret;; \
> - .endp name; \
> - .proc __GC_##name; \
> - .globl __GC_##name; \
> - .hidden __GC_##name; \
> -__GC_##name: \
> -.Lpseudo_cancel: \
> - .prologue; \
> - .regstk args, 5, args, 0; \
> - .save ar.pfs, loc0; \
> - alloc loc0 = ar.pfs, args, 5, args, 0; \
> - .save rp, loc1; \
> - mov loc1 = rp;; \
> - .body; \
> - CENABLE;; \
> - mov loc2 = r8; \
> - COPY_ARGS_##args \
> - mov r15 = SYS_ify(syscall_name); \
> - break __BREAK_SYSCALL;; \
> - mov loc3 = r8; \
> - mov loc4 = r10; \
> - mov out0 = loc2; \
> - CDISABLE;; \
> - cmp.eq p6,p0=-1,loc4; \
> -(p6) br.cond.spnt.few __syscall_error_##args; \
> - mov r8 = loc3; \
> - mov rp = loc1; \
> - mov ar.pfs = loc0; \
> -.Lpseudo_end: \
> - ret; \
> - .endp __GC_##name; \
> - SYSDEP_CANCEL_ERROR(args)
> -
> -# else /* USE_DL_SYSINFO */
> -
> -# define PSEUDO(name, syscall_name, args) \
> -.text; \
> -ENTRY (name) \
> - .prologue; \
> - adds r2 = SYSINFO_OFFSET, r13; \
> - adds r14 = MULTIPLE_THREADS_OFFSET, r13; \
> - .save ar.pfs, r11; \
> - mov r11 = ar.pfs;; \
> - .body; \
> - ld4 r14 = [r14]; \
> - ld8 r2 = [r2]; \
> - mov r15 = SYS_ify(syscall_name);; \
> - cmp4.ne p6, p7 = 0, r14; \
> - mov b7 = r2; \
> -(p6) br.cond.spnt .Lpseudo_cancel; \
> - br.call.sptk.many b6 = b7;; \
> - mov ar.pfs = r11; \
> - cmp.eq p6,p0 = -1, r10; \
> -(p6) br.cond.spnt.few __syscall_error; \
> - ret;; \
> - .endp name; \
> - \
> - .proc __##syscall_name##_nocancel; \
> - .globl __##syscall_name##_nocancel; \
> -__##syscall_name##_nocancel: \
> - .prologue; \
> - adds r2 = SYSINFO_OFFSET, r13; \
> - .save ar.pfs, r11; \
> - mov r11 = ar.pfs;; \
> - .body; \
> - ld8 r2 = [r2]; \
> - mov r15 = SYS_ify(syscall_name);; \
> - mov b7 = r2; \
> - br.call.sptk.many b6 = b7;; \
> - mov ar.pfs = r11; \
> - cmp.eq p6,p0 = -1, r10; \
> -(p6) br.cond.spnt.few __syscall_error; \
> - ret;; \
> - .endp __##syscall_name##_nocancel; \
> - \
> - .proc __GC_##name; \
> - .globl __GC_##name; \
> - .hidden __GC_##name; \
> -__GC_##name: \
> -.Lpseudo_cancel: \
> - .prologue; \
> - .regstk args, 5, args, 0; \
> - .save ar.pfs, loc0; \
> - alloc loc0 = ar.pfs, args, 5, args, 0; \
> - adds loc4 = SYSINFO_OFFSET, r13; \
> - .save rp, loc1; \
> - mov loc1 = rp;; \
> - .body; \
> - ld8 loc4 = [loc4]; \
> - CENABLE;; \
> - mov loc2 = r8; \
> - mov b7 = loc4; \
> - COPY_ARGS_##args \
> - mov r15 = SYS_ify(syscall_name); \
> - br.call.sptk.many b6 = b7;; \
> - mov loc3 = r8; \
> - mov loc4 = r10; \
> - mov out0 = loc2; \
> - CDISABLE;; \
> - cmp.eq p6,p0=-1,loc4; \
> -(p6) br.cond.spnt.few __syscall_error_##args; \
> - mov r8 = loc3; \
> - mov rp = loc1; \
> - mov ar.pfs = loc0; \
> -.Lpseudo_end: \
> - ret; \
> - .endp __GC_##name; \
> - SYSDEP_CANCEL_ERROR(args)
> -
> -# endif /* USE_DL_SYSINFO */
> -
> -# undef PSEUDO_END
> -# define PSEUDO_END(name) .endp
> -
> -# if IS_IN (libpthread)
> -# define CENABLE br.call.sptk.many b0 = __pthread_enable_asynccancel
> -# define CDISABLE br.call.sptk.many b0 = __pthread_disable_asynccancel
> -# elif IS_IN (libc)
> -# define CENABLE br.call.sptk.many b0 = __libc_enable_asynccancel
> -# define CDISABLE br.call.sptk.many b0 = __libc_disable_asynccancel
> -# elif IS_IN (librt)
> -# define CENABLE br.call.sptk.many b0 = __librt_enable_asynccancel
> -# define CDISABLE br.call.sptk.many b0 = __librt_disable_asynccancel
> -# else
> -# error Unsupported library
> -# endif
> -
> -# define COPY_ARGS_0 /* Nothing */
> -# define COPY_ARGS_1 COPY_ARGS_0 mov out0 = in0;
> -# define COPY_ARGS_2 COPY_ARGS_1 mov out1 = in1;
> -# define COPY_ARGS_3 COPY_ARGS_2 mov out2 = in2;
> -# define COPY_ARGS_4 COPY_ARGS_3 mov out3 = in3;
> -# define COPY_ARGS_5 COPY_ARGS_4 mov out4 = in4;
> -# define COPY_ARGS_6 COPY_ARGS_5 mov out5 = in5;
> -# define COPY_ARGS_7 COPY_ARGS_6 mov out6 = in6;
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P \
> - adds r14 = MULTIPLE_THREADS_OFFSET, r13 ;; ld4 r14 = [r14] ;; cmp4.ne p6, p7 = 0, r14
> -# endif
> -
> -#elif !defined __ASSEMBLER__
> -
> +#else
> # define SINGLE_THREAD_P (1)
> # define NO_CANCELLATION 1
> -
> #endif
>
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> +#define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
> index 9bc9e13..1603c5f 100644
> --- a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
> @@ -18,121 +18,21 @@
>
> #include <sysdep.h>
> #include <tls.h>
> -#ifndef __ASSEMBLER__
> -# include <nptl/pthreadP.h>
> -#endif
> +#include <nptl/pthreadP.h>
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .text; \
> - ENTRY (name) \
> - SINGLE_THREAD_P; \
> - jne .Lpseudo_cancel; \
> - .type __##syscall_name##_nocancel,@function; \
> - .globl __##syscall_name##_nocancel; \
> - __##syscall_name##_nocancel: \
> - DO_CALL (syscall_name, args); \
> - cmp.l &-4095, %d0; \
> - jcc SYSCALL_ERROR_LABEL; \
> - rts; \
> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
> - .Lpseudo_cancel: \
> - CENABLE; \
> - DOCARGS_##args \
> - move.l %d0, -(%sp); /* Save result of CENABLE. */ \
> - cfi_adjust_cfa_offset (4); \
> - move.l &SYS_ify (syscall_name), %d0; \
> - trap &0; \
> - move.l %d0, %d2; \
> - CDISABLE; \
> - addq.l &4, %sp; /* Remove result of CENABLE from the stack. */ \
> - cfi_adjust_cfa_offset (-4); \
> - move.l %d2, %d0; \
> - UNDOCARGS_##args \
> - cmp.l &-4095, %d0; \
> - jcc SYSCALL_ERROR_LABEL
> -
> -/* Note: we use D2 to save syscall's return value as D0 will be clobbered in
> - CDISABLE. */
> -# define DOCARGS_0 move.l %d2, -(%sp); \
> - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d2, 0);
> -# define UNDOCARGS_0 move.l (%sp)+, %d2; \
> - cfi_adjust_cfa_offset (-4); cfi_restore (%d2);
> -
> -# define DOCARGS_1 _DOCARGS_1 (4); DOCARGS_0
> -# define _DOCARGS_1(n) move.l n(%sp), %d1;
> -# define UNDOCARGS_1 UNDOCARGS_0
> -
> -# define DOCARGS_2 _DOCARGS_2 (8)
> -# define _DOCARGS_2(n) DOCARGS_0 move.l n+4(%sp), %d2; _DOCARGS_1 (n)
> -# define UNDOCARGS_2 UNDOCARGS_0
> -
> -# define DOCARGS_3 _DOCARGS_3 (12)
> -# define _DOCARGS_3(n) move.l %d3, -(%sp); \
> - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d3, 0); \
> - move.l n+4(%sp), %d3; _DOCARGS_2 (n)
> -# define UNDOCARGS_3 UNDOCARGS_2 move.l (%sp)+, %d3; \
> - cfi_adjust_cfa_offset (-4); cfi_restore (%d3);
> -
> -# define DOCARGS_4 _DOCARGS_4 (16)
> -# define _DOCARGS_4(n) move.l %d4, -(%sp); \
> - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d4, 0); \
> - move.l n+4(%sp), %d4; _DOCARGS_3 (n)
> -# define UNDOCARGS_4 UNDOCARGS_3 move.l (%sp)+, %d4; \
> - cfi_adjust_cfa_offset (-4); cfi_restore (%d4);
> -
> -# define DOCARGS_5 _DOCARGS_5 (20)
> -# define _DOCARGS_5(n) move.l %d5, -(%sp); \
> - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d5, 0); \
> - move.l n+4(%sp), %d5; _DOCARGS_4 (n)
> -# define UNDOCARGS_5 UNDOCARGS_4 move.l (%sp)+, %d5; \
> - cfi_adjust_cfa_offset (-4); cfi_restore (%d5);
> -
> -# define DOCARGS_6 _DOCARGS_6 (24)
> -# define _DOCARGS_6(n) move.l n(%sp), %a0; _DOCARGS_5 (n-4)
> -# define UNDOCARGS_6 UNDOCARGS_5
> -
> -# ifdef PIC
> -# define PSEUDO_JMP(sym) jbsr sym ## @PLTPC
> -# else
> -# define PSEUDO_JMP(sym) jbsr sym
> -# endif
> -
> -# if IS_IN (libpthread)
> -# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
> -# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel)
> -# elif IS_IN (libc)
> -# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
> -# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel)
> -# elif IS_IN (librt)
> -# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
> -# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel)
> -# else
> -# error Unsupported library
> -# endif
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P \
> - PSEUDO_JMP (__m68k_read_tp); \
> - tst.l MULTIPLE_THREADS_OFFSET(%a0)
> -# endif
> -
> -#elif !defined __ASSEMBLER__
> +#else
>
> # define SINGLE_THREAD_P (1)
> # define NO_CANCELLATION (1)
>
> #endif
>
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> +#define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, \
> 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
> index dbcc2b2..7fe030b 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
> @@ -23,136 +23,28 @@
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -# if !IS_IN (librt) || !defined(PIC)
> -# define AC_STACK_SIZE 16 /* space for r15, async_cancel arg and 2 temp words */
> -# define AC_SET_GOT /* empty */
> -# define AC_RESTORE_GOT /* empty */
> -# else
> -# define AC_STACK_SIZE 20 /* extra 4 bytes for r20 */
> -# define AC_SET_GOT \
> - swi r20, r1, AC_STACK_SIZE-4; \
> - mfs r20, rpc; \
> - addik r20, r20, _GLOBAL_OFFSET_TABLE_+8;
> -# define AC_RESTORE_GOT \
> - lwi r20, r1, AC_STACK_SIZE-4;
> -# endif
> -
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .text; \
> - ENTRY (name) \
> - SINGLE_THREAD_P(r12); \
> - bnei r12, L(pseudo_cancel); \
> - .globl __##syscall_name##_nocancel; \
> - .type __##syscall_name##_nocancel,@function; \
> -__##syscall_name##_nocancel: \
> - DO_CALL (syscall_name, args); \
> - addik r4, r0, -4095; \
> - cmpu r4, r4, r3; \
> - bgei r4, SYSCALL_ERROR_LABEL; \
> - rtsd r15, 8; \
> - nop; \
> - .size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \
> -L(pseudo_cancel): \
> - addik r1, r1, -AC_STACK_SIZE; \
> - swi r15, r1, 0; \
> - AC_SET_GOT \
> - DOCARGS_##args \
> - CENABLE; \
> - swi r3, r1, 8; \
> - UNDOCARGS_##args \
> - DO_CALL (syscall_name, args); \
> - swi r3, r1, 12; \
> - lwi r5, r1, 8; \
> - CDISABLE; \
> - lwi r3, r1, 12; \
> - lwi r15, r1, 0; \
> - AC_RESTORE_GOT \
> - addik r1, r1, AC_STACK_SIZE; \
> - addik r4, r0, -4095; \
> - cmpu r4, r4, r3; \
> - bgei r4, SYSCALL_ERROR_LABEL; \
> - rtsd r15, 8; \
> - nop;
> -
> -/*
> - * Macros to save/restore syscall arguments across CENABLE
> - * The arguments are saved into the caller's stack (original r1 + 4)
> - */
> -
> -# define DOCARGS_0
> -# define DOCARGS_1 swi r5, r1, AC_STACK_SIZE + 4;
> -# define DOCARGS_2 swi r6, r1, AC_STACK_SIZE + 8; DOCARGS_1
> -# define DOCARGS_3 swi r7, r1, AC_STACK_SIZE + 12; DOCARGS_2
> -# define DOCARGS_4 swi r8, r1, AC_STACK_SIZE + 16; DOCARGS_3
> -# define DOCARGS_5 swi r9, r1, AC_STACK_SIZE + 20; DOCARGS_4
> -# define DOCARGS_6 swi r10, r1, AC_STACK_SIZE + 24; DOCARGS_5
> -
> -# define UNDOCARGS_0
> -# define UNDOCARGS_1 lwi r5, r1, AC_STACK_SIZE + 4;
> -# define UNDOCARGS_2 UNDOCARGS_1 lwi r6, r1, AC_STACK_SIZE + 8;
> -# define UNDOCARGS_3 UNDOCARGS_2 lwi r7, r1, AC_STACK_SIZE + 12;
> -# define UNDOCARGS_4 UNDOCARGS_3 lwi r8, r1, AC_STACK_SIZE + 16;
> -# define UNDOCARGS_5 UNDOCARGS_4 lwi r9, r1, AC_STACK_SIZE + 20;
> -# define UNDOCARGS_6 UNDOCARGS_5 lwi r10, r1, AC_STACK_SIZE + 24;
> -
> -# ifdef PIC
> -# define PSEUDO_JMP(sym) brlid r15, sym##@PLTPC; addk r0, r0, r0
> -# else
> -# define PSEUDO_JMP(sym) brlid r15, sym; addk r0, r0, r0
> -# endif
> -
> # if IS_IN (libpthread)
> -# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
> -# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel)
> # define __local_multiple_threads __pthread_multiple_threads
> # elif IS_IN (libc)
> -# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
> -# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel)
> # define __local_multiple_threads __libc_multiple_threads
> -# elif IS_IN (librt)
> -# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
> -# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel)
> -# else
> -# error Unsupported library
> # endif
>
> -
> # if IS_IN (libpthread) || IS_IN (libc)
> -# ifndef __ASSEMBLER__
> extern int __local_multiple_threads attribute_hidden;
> -# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
> -# else
> -# if !defined PIC
> -# define SINGLE_THREAD_P(reg) lwi reg, r0, __local_multiple_threads;
> -# else
> -# define SINGLE_THREAD_P(reg) \
> - mfs reg, rpc; \
> - addik reg, reg, _GLOBAL_OFFSET_TABLE_+8; \
> - lwi reg, reg, __local_multiple_threads@GOT; \
> - lwi reg, reg, 0;
> -# endif
> -# endif
> +# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
> # else
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P(reg) \
> - lwi reg, r0, MULTIPLE_THREADS_OFFSET(reg)
> -# endif
> # endif
>
> -#elif !defined __ASSEMBLER__
> +#else
>
> # define SINGLE_THREAD_P (1)
> # define NO_CANCELLATION (1)
>
> #endif
>
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> +#define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
> deleted file mode 100644
> index 0ed3e3d..0000000
> --- a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
> +++ /dev/null
> @@ -1,249 +0,0 @@
> -/* Copyright (C) 2003-2017 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 <sysdep.h>
> -#include <sysdeps/generic/sysdep.h>
> -#include <tls.h>
> -#ifndef __ASSEMBLER__
> -# include <nptl/pthreadP.h>
> -#endif
> -#include <sys/asm.h>
> -
> -/* Gas will put the initial save of $gp into the CIE, because it appears to
> - happen before any instructions. So we use cfi_same_value instead of
> - cfi_restore. */
> -
> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
> -
> -#ifdef __PIC__
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .align 2; \
> - L(pseudo_start): \
> - cfi_startproc; \
> - cfi_adjust_cfa_offset (STKSPACE); \
> - cfi_rel_offset (gp, STKOFF_GP); \
> - 99: PTR_LA t9,__syscall_error; \
> - /* manual cpreturn */ \
> - REG_L gp, STKOFF_GP(sp); \
> - cfi_same_value (gp); \
> - RESTORESTK; \
> - jr t9; \
> - .type __##syscall_name##_nocancel, @function; \
> - .globl __##syscall_name##_nocancel; \
> - __##syscall_name##_nocancel: \
> - SAVESTK; \
> - .cpsetup t9, STKOFF_GP, __##syscall_name##_nocancel; \
> - cfi_rel_offset (gp, STKOFF_GP); \
> - li v0, SYS_ify(syscall_name); \
> - syscall; \
> - bne a3, zero, SYSCALL_ERROR_LABEL; \
> - /* manual cpreturn */ \
> - REG_L gp, STKOFF_GP(sp); \
> - cfi_same_value (gp); \
> - RESTORESTK; \
> - ret; \
> - cfi_endproc; \
> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
> - ENTRY (name) \
> - SAVESTK; \
> - .cpsetup t9, STKOFF_GP, name; \
> - cfi_rel_offset (gp, STKOFF_GP); \
> - SINGLE_THREAD_P(v1); \
> - bne zero, v1, L(pseudo_cancel); \
> - .set noreorder; \
> - li v0, SYS_ify(syscall_name); \
> - syscall; \
> - .set reorder; \
> - bne a3, zero, SYSCALL_ERROR_LABEL; \
> - /* manual cpreturn */ \
> - REG_L gp, STKOFF_GP(sp); \
> - cfi_same_value (gp); \
> - RESTORESTK; \
> - ret; \
> - L(pseudo_cancel): \
> - cfi_adjust_cfa_offset (STKSPACE); \
> - cfi_rel_offset (gp, STKOFF_GP); \
> - REG_S ra, STKOFF_RA(sp); \
> - cfi_rel_offset (ra, STKOFF_RA); \
> - PUSHARGS_##args; /* save syscall args */ \
> - CENABLE; \
> - REG_S v0, STKOFF_SVMSK(sp); /* save mask */ \
> - POPARGS_##args; /* restore syscall args */ \
> - .set noreorder; \
> - li v0, SYS_ify (syscall_name); \
> - syscall; \
> - .set reorder; \
> - REG_S v0, STKOFF_SC_V0(sp); /* save syscall result */ \
> - REG_S a3, STKOFF_SC_ERR(sp); /* save syscall error flag */ \
> - REG_L a0, STKOFF_SVMSK(sp); /* pass mask as arg1 */ \
> - CDISABLE; \
> - REG_L a3, STKOFF_SC_ERR(sp); /* restore syscall error flag */ \
> - REG_L ra, STKOFF_RA(sp); /* restore return address */ \
> - REG_L v0, STKOFF_SC_V0(sp); /* restore syscall result */ \
> - bne a3, zero, SYSCALL_ERROR_LABEL; \
> - /* manual cpreturn */ \
> - REG_L gp, STKOFF_GP(sp); \
> - cfi_same_value (gp); \
> - RESTORESTK; \
> - L(pseudo_end):
> -#else
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .align 2; \
> - L(pseudo_start): \
> - cfi_startproc; \
> - cfi_adjust_cfa_offset (STKSPACE); \
> - 99: RESTORESTK; \
> - j __syscall_error; \
> - .type __##syscall_name##_nocancel, @function; \
> - .globl __##syscall_name##_nocancel; \
> - __##syscall_name##_nocancel: \
> - SAVESTK; \
> - li v0, SYS_ify(syscall_name); \
> - syscall; \
> - bne a3, zero, SYSCALL_ERROR_LABEL; \
> - RESTORESTK; \
> - ret; \
> - cfi_endproc; \
> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
> - ENTRY (name) \
> - SAVESTK; \
> - SINGLE_THREAD_P(v1); \
> - bne zero, v1, L(pseudo_cancel); \
> - .set noreorder; \
> - li v0, SYS_ify(syscall_name); \
> - syscall; \
> - .set reorder; \
> - bne a3, zero, SYSCALL_ERROR_LABEL; \
> - RESTORESTK; \
> - ret; \
> - L(pseudo_cancel): \
> - cfi_adjust_cfa_offset (STKSPACE); \
> - REG_S ra, STKOFF_RA(sp); \
> - cfi_rel_offset (ra, STKOFF_RA); \
> - PUSHARGS_##args; /* save syscall args */ \
> - CENABLE; \
> - REG_S v0, STKOFF_SVMSK(sp); /* save mask */ \
> - POPARGS_##args; /* restore syscall args */ \
> - .set noreorder; \
> - li v0, SYS_ify (syscall_name); \
> - syscall; \
> - .set reorder; \
> - REG_S v0, STKOFF_SC_V0(sp); /* save syscall result */ \
> - REG_S a3, STKOFF_SC_ERR(sp); /* save syscall error flag */ \
> - REG_L a0, STKOFF_SVMSK(sp); /* pass mask as arg1 */ \
> - CDISABLE; \
> - REG_L a3, STKOFF_SC_ERR(sp); /* restore syscall error flag */ \
> - REG_L ra, STKOFF_RA(sp); /* restore return address */ \
> - REG_L v0, STKOFF_SC_V0(sp); /* restore syscall result */ \
> - bne a3, zero, SYSCALL_ERROR_LABEL; \
> - RESTORESTK; \
> - L(pseudo_end):
> -#endif
> -
> -# undef PSEUDO_END
> -# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym
> -
> -# define PUSHARGS_0 /* nothing to do */
> -# define PUSHARGS_1 PUSHARGS_0 REG_S a0, STKOFF_A0(sp); cfi_rel_offset (a0, STKOFF_A0);
> -# define PUSHARGS_2 PUSHARGS_1 REG_S a1, STKOFF_A1(sp); cfi_rel_offset (a1, STKOFF_A1);
> -# define PUSHARGS_3 PUSHARGS_2 REG_S a2, STKOFF_A2(sp); cfi_rel_offset (a2, STKOFF_A2);
> -# define PUSHARGS_4 PUSHARGS_3 REG_S a3, STKOFF_A3(sp); cfi_rel_offset (a3, STKOFF_A3);
> -# define PUSHARGS_5 PUSHARGS_4 REG_S a4, STKOFF_A4(sp); cfi_rel_offset (a3, STKOFF_A4);
> -# define PUSHARGS_6 PUSHARGS_5 REG_S a5, STKOFF_A5(sp); cfi_rel_offset (a3, STKOFF_A5);
> -
> -# define POPARGS_0 /* nothing to do */
> -# define POPARGS_1 POPARGS_0 REG_L a0, STKOFF_A0(sp);
> -# define POPARGS_2 POPARGS_1 REG_L a1, STKOFF_A1(sp);
> -# define POPARGS_3 POPARGS_2 REG_L a2, STKOFF_A2(sp);
> -# define POPARGS_4 POPARGS_3 REG_L a3, STKOFF_A3(sp);
> -# define POPARGS_5 POPARGS_4 REG_L a4, STKOFF_A4(sp);
> -# define POPARGS_6 POPARGS_5 REG_L a5, STKOFF_A5(sp);
> -
> -/* Save an even number of slots. Should be 0 if an even number of slots
> - are used below, or SZREG if an odd number are used. */
> -# ifdef __PIC__
> -# define STK_PAD SZREG
> -# else
> -# define STK_PAD 0
> -# endif
> -
> -/* Place values that we are more likely to use later in this sequence, i.e.
> - closer to the SP at function entry. If you do that, the are more
> - likely to already be in your d-cache. */
> -# define STKOFF_A5 (STK_PAD)
> -# define STKOFF_A4 (STKOFF_A5 + SZREG)
> -# define STKOFF_A3 (STKOFF_A4 + SZREG)
> -# define STKOFF_A2 (STKOFF_A3 + SZREG) /* MT and more args. */
> -# define STKOFF_A1 (STKOFF_A2 + SZREG) /* MT and 2 args. */
> -# define STKOFF_A0 (STKOFF_A1 + SZREG) /* MT and 1 arg. */
> -# define STKOFF_RA (STKOFF_A0 + SZREG) /* Used if MT. */
> -# define STKOFF_SC_V0 (STKOFF_RA + SZREG) /* Used if MT. */
> -# define STKOFF_SC_ERR (STKOFF_SC_V0 + SZREG) /* Used if MT. */
> -# define STKOFF_SVMSK (STKOFF_SC_ERR + SZREG) /* Used if MT. */
> -
> -# ifdef __PIC__
> -# define STKOFF_GP (STKOFF_SVMSK + SZREG) /* Always used. */
> -# define STKSPACE (STKOFF_GP + SZREG)
> -# else
> -# define STKSPACE (STKOFF_SVMSK + SZREG)
> -# endif
> -
> -# define SAVESTK PTR_SUBU sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE)
> -# define RESTORESTK PTR_ADDU sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE)
> -
> -# ifdef __PIC__
> -# define PSEUDO_JMP(sym) PTR_LA t9, sym; jalr t9
> -# else
> -# define PSEUDO_JMP(sym) jal sym
> -# endif
> -
> -# if IS_IN (libpthread)
> -# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
> -# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel)
> -# elif IS_IN (librt)
> -# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
> -# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel)
> -# else
> -# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
> -# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel)
> -# endif
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> - header.multiple_threads) \
> - == 0, 1)
> -# else
> -# define SINGLE_THREAD_P(reg) \
> - READ_THREAD_POINTER(reg); \
> - lw reg, MULTIPLE_THREADS_OFFSET(reg)
> -#endif
> -
> -#elif !defined __ASSEMBLER__
> -
> -# define SINGLE_THREAD_P 1
> -# define NO_CANCELLATION 1
> -
> -#endif
> -
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> - header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
> index 0e45f00..fe9a3fc 100644
> --- a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
> @@ -18,173 +18,22 @@
> #include <sysdep.h>
> #include <sysdeps/generic/sysdep.h>
> #include <tls.h>
> -#ifndef __ASSEMBLER__
> -# include <nptl/pthreadP.h>
> -#endif
> +#include <nptl/pthreadP.h>
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -# ifdef __PIC__
> -# define PSEUDO_CPLOAD .cpload t9;
> -# define PSEUDO_ERRJMP la t9, __syscall_error; jr t9;
> -# define PSEUDO_SAVEGP sw gp, 32(sp); cfi_rel_offset (gp, 32);
> -# define PSEUDO_LOADGP lw gp, 32(sp);
> -# else
> -# define PSEUDO_CPLOAD
> -# define PSEUDO_ERRJMP j __syscall_error;
> -# define PSEUDO_SAVEGP
> -# define PSEUDO_LOADGP
> -# endif
> -
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .align 2; \
> - .set nomips16; \
> - L(pseudo_start): \
> - cfi_startproc; \
> - 99: PSEUDO_ERRJMP \
> - .type __##syscall_name##_nocancel, @function; \
> - .globl __##syscall_name##_nocancel; \
> - __##syscall_name##_nocancel: \
> - .set noreorder; \
> - PSEUDO_CPLOAD \
> - li v0, SYS_ify(syscall_name); \
> - syscall; \
> - .set reorder; \
> - bne a3, zero, 99b; \
> - ret; \
> - cfi_endproc; \
> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
> - ENTRY (name) \
> - .set noreorder; \
> - PSEUDO_CPLOAD \
> - .set reorder; \
> - SINGLE_THREAD_P(v1); \
> - bne zero, v1, L(pseudo_cancel); \
> - .set noreorder; \
> - li v0, SYS_ify(syscall_name); \
> - syscall; \
> - .set reorder; \
> - bne a3, zero, 99b; \
> - ret; \
> - L(pseudo_cancel): \
> - SAVESTK_##args; \
> - sw ra, 28(sp); \
> - cfi_rel_offset (ra, 28); \
> - PSEUDO_SAVEGP \
> - PUSHARGS_##args; /* save syscall args */ \
> - CENABLE; \
> - PSEUDO_LOADGP \
> - sw v0, 44(sp); /* save mask */ \
> - POPARGS_##args; /* restore syscall args */ \
> - .set noreorder; \
> - li v0, SYS_ify (syscall_name); \
> - syscall; \
> - .set reorder; \
> - sw v0, 36(sp); /* save syscall result */ \
> - sw a3, 40(sp); /* save syscall error flag */ \
> - lw a0, 44(sp); /* pass mask as arg1 */ \
> - CDISABLE; \
> - PSEUDO_LOADGP \
> - lw v0, 36(sp); /* restore syscall result */ \
> - lw a3, 40(sp); /* restore syscall error flag */ \
> - lw ra, 28(sp); /* restore return address */ \
> - .set noreorder; \
> - bne a3, zero, 99b; \
> - RESTORESTK; \
> - L(pseudo_end): \
> - .set reorder;
> -
> -# undef PSEUDO_END
> -# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym
> -
> -# define PUSHARGS_0 /* nothing to do */
> -# define PUSHARGS_1 PUSHARGS_0 sw a0, 0(sp); cfi_rel_offset (a0, 0);
> -# define PUSHARGS_2 PUSHARGS_1 sw a1, 4(sp); cfi_rel_offset (a1, 4);
> -# define PUSHARGS_3 PUSHARGS_2 sw a2, 8(sp); cfi_rel_offset (a2, 8);
> -# define PUSHARGS_4 PUSHARGS_3 sw a3, 12(sp); cfi_rel_offset (a3, 12);
> -# define PUSHARGS_5 PUSHARGS_4 /* handled by SAVESTK_## */
> -# define PUSHARGS_6 PUSHARGS_5
> -# define PUSHARGS_7 PUSHARGS_6
> -
> -# define POPARGS_0 /* nothing to do */
> -# define POPARGS_1 POPARGS_0 lw a0, 0(sp);
> -# define POPARGS_2 POPARGS_1 lw a1, 4(sp);
> -# define POPARGS_3 POPARGS_2 lw a2, 8(sp);
> -# define POPARGS_4 POPARGS_3 lw a3, 12(sp);
> -# define POPARGS_5 POPARGS_4 /* args already in new stackframe */
> -# define POPARGS_6 POPARGS_5
> -# define POPARGS_7 POPARGS_6
> -
> -
> -# define STKSPACE 48
> -# define SAVESTK_0 subu sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE)
> -# define SAVESTK_1 SAVESTK_0
> -# define SAVESTK_2 SAVESTK_1
> -# define SAVESTK_3 SAVESTK_2
> -# define SAVESTK_4 SAVESTK_3
> -# define SAVESTK_5 lw t0, 16(sp); \
> - SAVESTK_0; \
> - sw t0, 16(sp)
> -
> -# define SAVESTK_6 lw t0, 16(sp); \
> - lw t1, 20(sp); \
> - SAVESTK_0; \
> - sw t0, 16(sp); \
> - sw t1, 20(sp)
> -
> -# define SAVESTK_7 lw t0, 16(sp); \
> - lw t1, 20(sp); \
> - lw t2, 24(sp); \
> - SAVESTK_0; \
> - sw t0, 16(sp); \
> - sw t1, 20(sp); \
> - sw t2, 24(sp)
> -
> -# define RESTORESTK addu sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE)
> -
> -
> -# ifdef __PIC__
> -/* We use jalr rather than jal. This means that the assembler will not
> - automatically restore $gp (in case libc has multiple GOTs) so we must
> - do it manually - which we have to do anyway since we don't use .cprestore.
> - It also shuts up the assembler warning about not using .cprestore. */
> -# define PSEUDO_JMP(sym) la t9, sym; jalr t9;
> -# else
> -# define PSEUDO_JMP(sym) jal sym;
> -# endif
> -
> -# if IS_IN (libpthread)
> -# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
> -# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel)
> -# elif IS_IN (librt)
> -# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
> -# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel)
> -# else
> -# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
> -# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel)
> -# endif
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) \
> == 0, 1)
> -# else
> -# define SINGLE_THREAD_P(reg) \
> - READ_THREAD_POINTER(reg); \
> - lw reg, MULTIPLE_THREADS_OFFSET(reg)
> -#endif
>
> -#elif !defined __ASSEMBLER__
> +#else
>
> # define SINGLE_THREAD_P 1
> # define NO_CANCELLATION 1
>
> #endif
>
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> +#define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
> index 47b92d9..7647363 100644
> --- a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
> @@ -18,124 +18,22 @@
>
> #include <sysdep.h>
> #include <tls.h>
> -#ifndef __ASSEMBLER__
> -# include <nptl/pthreadP.h>
> -#endif
> +#include <nptl/pthreadP.h>
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .type __##syscall_name##_nocancel, @function; \
> - .globl __##syscall_name##_nocancel; \
> - __##syscall_name##_nocancel: \
> - cfi_startproc; \
> - DO_CALL (syscall_name, args); \
> - bne r7, zero, SYSCALL_ERROR_LABEL; \
> - ret; \
> - cfi_endproc; \
> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
> - ENTRY (name) \
> - SINGLE_THREAD_P(r2); \
> - bne r2, zero, pseudo_cancel; \
> - DO_CALL (syscall_name, args); \
> - bne r7, zero, SYSCALL_ERROR_LABEL; \
> - ret; \
> - pseudo_cancel: \
> - SAVESTK_##args; /* save syscall args and adjust stack */ \
> - SAVEREG(ra, 0); /* save return address */ \
> - SAVEREG(r22, 4); /* save GOT pointer */ \
> - nextpc r22; \
> -1: movhi r2, %hiadj(_gp_got - 1b); \
> - addi r2, r2, %lo(_gp_got - 1b); \
> - add r22, r22, r2; \
> - CENABLE; \
> - callr r3; \
> - stw r2, 8(sp); /* save mask */ \
> - LOADARGS_##args; \
> - movi r2, SYS_ify(syscall_name); \
> - trap; \
> - stw r2, 12(sp); /* save syscall result */ \
> - stw r7, 16(sp); /* save syscall error flag */ \
> - ldw r4, 8(sp); /* pass mask as argument 1 */ \
> - CDISABLE; \
> - callr r3; \
> - ldw r7, 16(sp); /* restore syscall error flag */ \
> - ldw r2, 12(sp); /* restore syscall result */ \
> - ldw ra, 0(sp); /* restore return address */ \
> - ldw r22, 4(sp); /* restore GOT pointer */ \
> - RESTORESTK_##args; \
> - bne r7, zero, SYSCALL_ERROR_LABEL;
> -
> -
> -# undef PSEUDO_END
> -# define PSEUDO_END(sym) \
> - SYSCALL_ERROR_HANDLER \
> - END (sym)
> -
> -#define SAVEREG(REG, LOC) stw REG, LOC(sp); cfi_rel_offset (REG, LOC)
> -#define SAVESTK(X) subi sp, sp, X; cfi_adjust_cfa_offset(X)
> -#define SAVESTK_0 SAVESTK(20)
> -#define SAVEARG_1 SAVEREG(r4, 20)
> -#define SAVESTK_1 SAVESTK(24); SAVEARG_1
> -#define SAVEARG_2 SAVEREG(r5, 24); SAVEARG_1
> -#define SAVESTK_2 SAVESTK(28); SAVEARG_2
> -#define SAVEARG_3 SAVEREG(r6, 28); SAVEARG_2
> -#define SAVESTK_3 SAVESTK(32); SAVEARG_3
> -#define SAVEARG_4 SAVEREG(r7, 32); SAVEARG_3
> -#define SAVESTK_4 SAVESTK(36); SAVEARG_4
> -#define SAVESTK_5 SAVESTK_4
> -#define SAVESTK_6 SAVESTK_5
> -
> -#define LOADARGS_0
> -#define LOADARGS_1 ldw r4, 20(sp)
> -#define LOADARGS_2 LOADARGS_1; ldw r5, 24(sp)
> -#define LOADARGS_3 LOADARGS_2; ldw r6, 28(sp)
> -#define LOADARGS_4 LOADARGS_3; ldw r7, 32(sp)
> -#define LOADARGS_5 LOADARGS_4; ldw r8, 36(sp)
> -#define LOADARGS_6 LOADARGS_5; ldw r9, 40(sp)
> -
> -#define RESTORESTK(X) addi sp, sp, X; cfi_adjust_cfa_offset(-X)
> -#define RESTORESTK_0 RESTORESTK(20)
> -#define RESTORESTK_1 RESTORESTK(24)
> -#define RESTORESTK_2 RESTORESTK(28)
> -#define RESTORESTK_3 RESTORESTK(32)
> -#define RESTORESTK_4 RESTORESTK(36)
> -#define RESTORESTK_5 RESTORESTK(36)
> -#define RESTORESTK_6 RESTORESTK(36)
> -
> -# if IS_IN (libpthread)
> -# define CENABLE ldw r3, %call(__pthread_enable_asynccancel)(r22)
> -# define CDISABLE ldw r3, %call(__pthread_disable_asynccancel)(r22)
> -# elif IS_IN (librt)
> -# define CENABLE ldw r3, %call(__librt_enable_asynccancel)(r22)
> -# define CDISABLE ldw r3, %call(__librt_disable_asynccancel)(r22)
> -# elif IS_IN (libc)
> -# define CENABLE ldw r3, %call(__libc_enable_asynccancel)(r22)
> -# define CDISABLE ldw r3, %call(__libc_disable_asynccancel)(r22)
> -# else
> -# error Unsupported library
> -# endif
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) \
> == 0, 1)
> -# else
> -# define SINGLE_THREAD_P(reg) \
> - ldw reg, MULTIPLE_THREADS_OFFSET(r23)
> -#endif
>
> -#elif !defined __ASSEMBLER__
> +#else
>
> # define SINGLE_THREAD_P 1
> # define NO_CANCELLATION 1
>
> #endif
>
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> +#define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
> deleted file mode 100644
> index 35d3f05..0000000
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
> +++ /dev/null
> @@ -1,118 +0,0 @@
> -/* Cancellable system call stubs. Linux/PowerPC version.
> - Copyright (C) 2003-2017 Free Software Foundation, Inc.
> - This file is part of the GNU C Library.
> - Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.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>
> -#include <tls.h>
> -#ifndef __ASSEMBLER__
> -# include <nptl/pthreadP.h>
> -#endif
> -
> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
> -
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .section ".text"; \
> - ENTRY (name) \
> - SINGLE_THREAD_P; \
> - bne- .Lpseudo_cancel; \
> - .type __##syscall_name##_nocancel,@function; \
> - .globl __##syscall_name##_nocancel; \
> - __##syscall_name##_nocancel: \
> - DO_CALL (SYS_ify (syscall_name)); \
> - PSEUDO_RET; \
> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
> - .Lpseudo_cancel: \
> - stwu 1,-48(1); \
> - cfi_adjust_cfa_offset (48); \
> - mflr 9; \
> - stw 9,52(1); \
> - cfi_offset (lr, 4); \
> - DOCARGS_##args; /* save syscall args around CENABLE. */ \
> - CENABLE; \
> - stw 3,16(1); /* store CENABLE return value (MASK). */ \
> - UNDOCARGS_##args; /* restore syscall args. */ \
> - DO_CALL (SYS_ify (syscall_name)); \
> - mfcr 0; /* save CR/R3 around CDISABLE. */ \
> - stw 3,8(1); \
> - stw 0,12(1); \
> - lwz 3,16(1); /* pass MASK to CDISABLE. */ \
> - CDISABLE; \
> - lwz 4,52(1); \
> - lwz 0,12(1); /* restore CR/R3. */ \
> - lwz 3,8(1); \
> - mtlr 4; \
> - mtcr 0; \
> - addi 1,1,48;
> -
> -# define DOCARGS_0
> -# define UNDOCARGS_0
> -
> -# define DOCARGS_1 stw 3,20(1); DOCARGS_0
> -# define UNDOCARGS_1 lwz 3,20(1); UNDOCARGS_0
> -
> -# define DOCARGS_2 stw 4,24(1); DOCARGS_1
> -# define UNDOCARGS_2 lwz 4,24(1); UNDOCARGS_1
> -
> -# define DOCARGS_3 stw 5,28(1); DOCARGS_2
> -# define UNDOCARGS_3 lwz 5,28(1); UNDOCARGS_2
> -
> -# define DOCARGS_4 stw 6,32(1); DOCARGS_3
> -# define UNDOCARGS_4 lwz 6,32(1); UNDOCARGS_3
> -
> -# define DOCARGS_5 stw 7,36(1); DOCARGS_4
> -# define UNDOCARGS_5 lwz 7,36(1); UNDOCARGS_4
> -
> -# define DOCARGS_6 stw 8,40(1); DOCARGS_5
> -# define UNDOCARGS_6 lwz 8,40(1); UNDOCARGS_5
> -
> -# if IS_IN (libpthread)
> -# define CENABLE bl __pthread_enable_asynccancel@local
> -# define CDISABLE bl __pthread_disable_asynccancel@local
> -# elif IS_IN (libc)
> -# define CENABLE bl __libc_enable_asynccancel@local
> -# define CDISABLE bl __libc_disable_asynccancel@local
> -# elif IS_IN (librt)
> -# define CENABLE bl __librt_enable_asynccancel@local
> -# define CDISABLE bl __librt_disable_asynccancel@local
> -# else
> -# error Unsupported library
> -# endif
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> - header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P \
> - lwz 10,MULTIPLE_THREADS_OFFSET(2); \
> - cmpwi 10,0
> -# endif
> -
> -#elif !defined __ASSEMBLER__
> -
> -# define SINGLE_THREAD_P (1)
> -# define NO_CANCELLATION 1
> -
> -#endif
> -
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> - header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
> deleted file mode 100644
> index cad13da..0000000
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
> +++ /dev/null
> @@ -1,147 +0,0 @@
> -/* Cancellable system call stubs. Linux/PowerPC64 version.
> - Copyright (C) 2003-2017 Free Software Foundation, Inc.
> - This file is part of the GNU C Library.
> - Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.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>
> -#include <tls.h>
> -#ifndef __ASSEMBLER__
> -# include <nptl/pthreadP.h>
> -#endif
> -
> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
> -
> -# define DASHDASHPFX(str) __##str
> -
> -#if _CALL_ELF == 2
> -#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16+48)
> -#define CANCEL_PARM_SAVE (FRAME_MIN_SIZE+16)
> -#else
> -#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16)
> -#define CANCEL_PARM_SAVE (CANCEL_FRAMESIZE+FRAME_PARM_SAVE)
> -#endif
> -
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .section ".text"; \
> - ENTRY (name) \
> - SINGLE_THREAD_P; \
> - bne- .Lpseudo_cancel; \
> - .type DASHDASHPFX(syscall_name##_nocancel),@function; \
> - .globl DASHDASHPFX(syscall_name##_nocancel); \
> - DASHDASHPFX(syscall_name##_nocancel): \
> - DO_CALL (SYS_ify (syscall_name)); \
> - PSEUDO_RET; \
> - .size DASHDASHPFX(syscall_name##_nocancel),.-DASHDASHPFX(syscall_name##_nocancel); \
> - .Lpseudo_cancel: \
> - stdu 1,-CANCEL_FRAMESIZE(1); \
> - cfi_adjust_cfa_offset (CANCEL_FRAMESIZE); \
> - mflr 9; \
> - std 9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1); \
> - cfi_offset (lr, FRAME_LR_SAVE); \
> - DOCARGS_##args; /* save syscall args around CENABLE. */ \
> - CENABLE; \
> - std 3,FRAME_MIN_SIZE(1); /* store CENABLE return value (MASK). */ \
> - UNDOCARGS_##args; /* restore syscall args. */ \
> - DO_CALL (SYS_ify (syscall_name)); \
> - mfcr 0; /* save CR/R3 around CDISABLE. */ \
> - std 3,FRAME_MIN_SIZE+8(1); \
> - std 0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1); \
> - cfi_offset (cr, FRAME_CR_SAVE); \
> - ld 3,FRAME_MIN_SIZE(1); /* pass MASK to CDISABLE. */ \
> - CDISABLE; \
> - ld 9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1); \
> - ld 0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1); /* restore CR/R3. */ \
> - ld 3,FRAME_MIN_SIZE+8(1); \
> - mtlr 9; \
> - mtcr 0; \
> - addi 1,1,CANCEL_FRAMESIZE; \
> - cfi_adjust_cfa_offset (-CANCEL_FRAMESIZE); \
> - cfi_restore (lr); \
> - cfi_restore (cr)
> -
> -# define DOCARGS_0
> -# define UNDOCARGS_0
> -
> -# define DOCARGS_1 std 3,CANCEL_PARM_SAVE(1); DOCARGS_0
> -# define UNDOCARGS_1 ld 3,CANCEL_PARM_SAVE(1); UNDOCARGS_0
> -
> -# define DOCARGS_2 std 4,CANCEL_PARM_SAVE+8(1); DOCARGS_1
> -# define UNDOCARGS_2 ld 4,CANCEL_PARM_SAVE+8(1); UNDOCARGS_1
> -
> -# define DOCARGS_3 std 5,CANCEL_PARM_SAVE+16(1); DOCARGS_2
> -# define UNDOCARGS_3 ld 5,CANCEL_PARM_SAVE+16(1); UNDOCARGS_2
> -
> -# define DOCARGS_4 std 6,CANCEL_PARM_SAVE+24(1); DOCARGS_3
> -# define UNDOCARGS_4 ld 6,CANCEL_PARM_SAVE+24(1); UNDOCARGS_3
> -
> -# define DOCARGS_5 std 7,CANCEL_PARM_SAVE+32(1); DOCARGS_4
> -# define UNDOCARGS_5 ld 7,CANCEL_PARM_SAVE+32(1); UNDOCARGS_4
> -
> -# define DOCARGS_6 std 8,CANCEL_PARM_SAVE+40(1); DOCARGS_5
> -# define UNDOCARGS_6 ld 8,CANCEL_PARM_SAVE+40(1); UNDOCARGS_5
> -
> -# if IS_IN (libpthread)
> -# ifdef SHARED
> -# define CENABLE bl JUMPTARGET(__pthread_enable_asynccancel)
> -# define CDISABLE bl JUMPTARGET(__pthread_disable_asynccancel)
> -# else
> -# define CENABLE bl JUMPTARGET(__pthread_enable_asynccancel); nop
> -# define CDISABLE bl JUMPTARGET(__pthread_disable_asynccancel); nop
> -# endif
> -# elif IS_IN (libc)
> -# ifdef SHARED
> -# define CENABLE bl JUMPTARGET(__libc_enable_asynccancel)
> -# define CDISABLE bl JUMPTARGET(__libc_disable_asynccancel)
> -# else
> -# define CENABLE bl JUMPTARGET(__libc_enable_asynccancel); nop
> -# define CDISABLE bl JUMPTARGET(__libc_disable_asynccancel); nop
> -# endif
> -# elif IS_IN (librt)
> -# ifdef SHARED
> -# define CENABLE bl JUMPTARGET(__librt_enable_asynccancel)
> -# define CDISABLE bl JUMPTARGET(__librt_disable_asynccancel)
> -# else
> -# define CENABLE bl JUMPTARGET(__librt_enable_asynccancel); nop
> -# define CDISABLE bl JUMPTARGET(__librt_disable_asynccancel); nop
> -# endif
> -# else
> -# error Unsupported library
> -# endif
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> - header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P \
> - lwz 10,MULTIPLE_THREADS_OFFSET(13); \
> - cmpwi 10,0
> -# endif
> -
> -#elif !defined __ASSEMBLER__
> -
> -# define SINGLE_THREAD_P (1)
> -# define NO_CANCELLATION 1
> -
> -#endif
> -
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> - header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
> new file mode 100644
> index 0000000..85af880
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
> @@ -0,0 +1,38 @@
> +/* Cancellable system call stubs. Linux/PowerPC version.
> + Copyright (C) 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/>. */
> +
> +#include <sysdep.h>
> +#include <tls.h>
> +#include <nptl/pthreadP.h>
> +
> +#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
> +
> +# define SINGLE_THREAD_P \
> + __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> + header.multiple_threads) == 0, 1)
> +
> +#else
> +
> +# define SINGLE_THREAD_P (1)
> +# define NO_CANCELLATION 1
> +
> +#endif
> +
> +#define RTLD_SINGLE_THREAD_P \
> + __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> + header.multiple_threads) == 0, 1)
> 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 b1e80bc..82763b7 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
> @@ -24,116 +24,17 @@
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .text; \
> -L(pseudo_cancel): \
> - cfi_startproc; \
> - STM_##args \
> - stm %r12,%r15,48(%r15); \
> - cfi_offset (%r15, -36); \
> - cfi_offset (%r14, -40); \
> - cfi_offset (%r13, -44); \
> - cfi_offset (%r12, -48); \
> - lr %r14,%r15; \
> - ahi %r15,-96; \
> - cfi_adjust_cfa_offset (96); \
> - st %r14,0(%r15); \
> - basr %r13,0; \
> -0: l %r1,1f-0b(%r13); \
> - bas %r14,0(%r1,%r13); \
> - lr %r0,%r2; \
> - LM_##args \
> - .if SYS_ify (syscall_name) < 256; \
> - svc SYS_ify (syscall_name); \
> - .else; \
> - lhi %r1,SYS_ify (syscall_name); \
> - svc 0; \
> - .endif; \
> - LR7_##args \
> - l %r1,2f-0b(%r13); \
> - lr %r12,%r2; \
> - lr %r2,%r0; \
> - bas %r14,0(%r1,%r13); \
> - lr %r2,%r12; \
> - lm %r12,%r15,48+96(%r15); \
> - cfi_endproc; \
> - j L(pseudo_check); \
> -1: .long CENABLE-0b; \
> -2: .long CDISABLE-0b; \
> -ENTRY(name) \
> - SINGLE_THREAD_P(%r1) \
> - jne L(pseudo_cancel); \
> -.type __##syscall_name##_nocancel,@function; \
> -.globl __##syscall_name##_nocancel; \
> -__##syscall_name##_nocancel: \
> - DO_CALL(syscall_name, args); \
> -L(pseudo_check): \
> - lhi %r4,-4095; \
> - clr %r2,%r4; \
> - jnl SYSCALL_ERROR_LABEL; \
> -.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
> -L(pseudo_end):
> -
> -# if IS_IN (libpthread)
> -# define CENABLE __pthread_enable_asynccancel
> -# define CDISABLE __pthread_disable_asynccancel
> -# elif IS_IN (libc)
> -# define CENABLE __libc_enable_asynccancel
> -# define CDISABLE __libc_disable_asynccancel
> -# elif IS_IN (librt)
> -# define CENABLE __librt_enable_asynccancel
> -# define CDISABLE __librt_disable_asynccancel
> -# else
> -# error Unsupported library
> -# endif
> -
> -#define STM_0 /* Nothing */
> -#define STM_1 st %r2,8(%r15);
> -#define STM_2 stm %r2,%r3,8(%r15);
> -#define STM_3 stm %r2,%r4,8(%r15);
> -#define STM_4 stm %r2,%r5,8(%r15);
> -#define STM_5 stm %r2,%r5,8(%r15);
> -#define STM_6 stm %r2,%r7,8(%r15);
> -
> -#define LM_0 /* Nothing */
> -#define LM_1 l %r2,8+96(%r15);
> -#define LM_2 lm %r2,%r3,8+96(%r15);
> -#define LM_3 lm %r2,%r4,8+96(%r15);
> -#define LM_4 lm %r2,%r5,8+96(%r15);
> -#define LM_5 lm %r2,%r5,8+96(%r15);
> -#define LM_6 lm %r2,%r5,8+96(%r15); \
> - cfi_offset (%r7, -68); \
> - l %r7,96+96(%r15);
> -
> -#define LR7_0 /* Nothing */
> -#define LR7_1 /* Nothing */
> -#define LR7_2 /* Nothing */
> -#define LR7_3 /* Nothing */
> -#define LR7_4 /* Nothing */
> -#define LR7_5 /* Nothing */
> -#define LR7_6 l %r7,28+96(%r15); \
> - cfi_restore (%r7);
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P(reg) \
> - ear reg,%a0; \
> - icm reg,15,MULTIPLE_THREADS_OFFSET(reg);
> -# endif
>
> -#elif !defined __ASSEMBLER__
> +#else
>
> # define SINGLE_THREAD_P (1)
> # define NO_CANCELLATION 1
>
> #endif
>
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> +#define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 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 9b2c546..952d2af 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
> @@ -18,135 +18,36 @@
>
> #include <sysdep.h>
> #include <tls.h>
> -#ifndef __ASSEMBLER__
> -# include <nptl/pthreadP.h>
> -#endif
> +#include <nptl/pthreadP.h>
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .text; \
> -L(pseudo_cancel): \
> - cfi_startproc; \
> - STM_##args \
> - stmg %r13,%r15,104(%r15); \
> - cfi_offset (%r15,-40); \
> - cfi_offset (%r14,-48); \
> - cfi_offset (%r13,-56); \
> - lgr %r14,%r15; \
> - aghi %r15,-160; \
> - cfi_adjust_cfa_offset (160); \
> - stg %r14,0(%r15); \
> - brasl %r14,CENABLE; \
> - lgr %r0,%r2; \
> - LM_##args \
> - .if SYS_ify (syscall_name) < 256; \
> - svc SYS_ify (syscall_name); \
> - .else; \
> - lghi %r1,SYS_ify (syscall_name); \
> - svc 0; \
> - .endif; \
> - LR7_##args \
> - lgr %r13,%r2; \
> - lgr %r2,%r0; \
> - brasl %r14,CDISABLE; \
> - lgr %r2,%r13; \
> - lmg %r13,%r15,104+160(%r15); \
> - cfi_endproc; \
> - j L(pseudo_check); \
> -ENTRY(name) \
> - SINGLE_THREAD_P \
> - jne L(pseudo_cancel); \
> -.type __##syscall_name##_nocancel,@function; \
> -.globl __##syscall_name##_nocancel; \
> -__##syscall_name##_nocancel: \
> - DO_CALL(syscall_name, args); \
> -L(pseudo_check): \
> - lghi %r4,-4095; \
> - clgr %r2,%r4; \
> - jgnl SYSCALL_ERROR_LABEL; \
> -.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
> -L(pseudo_end):
> -
> # if IS_IN (libpthread)
> -# define CENABLE __pthread_enable_asynccancel
> -# define CDISABLE __pthread_disable_asynccancel
> # define __local_multiple_threads __pthread_multiple_threads
> # elif IS_IN (libc)
> -# define CENABLE __libc_enable_asynccancel
> -# define CDISABLE __libc_disable_asynccancel
> # define __local_multiple_threads __libc_multiple_threads
> -# elif IS_IN (librt)
> -# define CENABLE __librt_enable_asynccancel
> -# define CDISABLE __librt_disable_asynccancel
> -# else
> -# error Unsupported library
> # endif
>
> -#define STM_0 /* Nothing */
> -#define STM_1 stg %r2,16(%r15);
> -#define STM_2 stmg %r2,%r3,16(%r15);
> -#define STM_3 stmg %r2,%r4,16(%r15);
> -#define STM_4 stmg %r2,%r5,16(%r15);
> -#define STM_5 stmg %r2,%r5,16(%r15);
> -#define STM_6 stmg %r2,%r7,16(%r15);
> -
> -#define LM_0 /* Nothing */
> -#define LM_1 lg %r2,16+160(%r15);
> -#define LM_2 lmg %r2,%r3,16+160(%r15);
> -#define LM_3 lmg %r2,%r4,16+160(%r15);
> -#define LM_4 lmg %r2,%r5,16+160(%r15);
> -#define LM_5 lmg %r2,%r5,16+160(%r15);
> -#define LM_6 lmg %r2,%r5,16+160(%r15); \
> - cfi_offset (%r7, -104); \
> - lg %r7,160+160(%r15);
> -
> -#define LR7_0 /* Nothing */
> -#define LR7_1 /* Nothing */
> -#define LR7_2 /* Nothing */
> -#define LR7_3 /* Nothing */
> -#define LR7_4 /* Nothing */
> -#define LR7_5 /* Nothing */
> -#define LR7_6 lg %r7,56+160(%r15); \
> - cfi_restore (%r7);
> -
> # if IS_IN (libpthread) || IS_IN (libc)
> -# ifndef __ASSEMBLER__
> extern int __local_multiple_threads attribute_hidden;
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (__local_multiple_threads == 0, 1)
> -# else
> -# define SINGLE_THREAD_P \
> - larl %r1,__local_multiple_threads; \
> - icm %r0,15,0(%r1);
> -# endif
>
> # else
>
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P \
> - ear %r1,%a0; \
> - sllg %r1,%r1,32; \
> - ear %r1,%a1; \
> - icm %r1,15,MULTIPLE_THREADS_OFFSET(%r1);
> -# endif
>
> # endif
>
> -#elif !defined __ASSEMBLER__
> +#else
>
> # define SINGLE_THREAD_P (1)
> # define NO_CANCELLATION 1
>
> #endif
>
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> +#define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
> index 5645cad..1ea501b 100644
> --- a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
> @@ -23,147 +23,17 @@
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -# define _IMM12 #-12
> -# define _IMM16 #-16
> -# define _IMP16 #16
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .text; \
> - ENTRY (name); \
> - .Lpseudo_start: \
> - SINGLE_THREAD_P; \
> - bf .Lpseudo_cancel; \
> - .type __##syscall_name##_nocancel,@function; \
> - .globl __##syscall_name##_nocancel; \
> - __##syscall_name##_nocancel: \
> - DO_CALL (syscall_name, args); \
> - mov r0,r1; \
> - mov _IMM12,r2; \
> - shad r2,r1; \
> - not r1,r1; \
> - tst r1,r1; \
> - bt .Lsyscall_error; \
> - bra .Lpseudo_end; \
> - nop; \
> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
> - .Lpseudo_cancel: \
> - sts.l pr,@-r15; \
> - cfi_adjust_cfa_offset (4); \
> - cfi_rel_offset (pr, 0); \
> - add _IMM16,r15; \
> - cfi_adjust_cfa_offset (16); \
> - SAVE_ARGS_##args; \
> - CENABLE; \
> - LOAD_ARGS_##args; \
> - add _IMP16,r15; \
> - cfi_adjust_cfa_offset (-16); \
> - lds.l @r15+,pr; \
> - cfi_adjust_cfa_offset (-4); \
> - cfi_restore (pr); \
> - DO_CALL(syscall_name, args); \
> - SYSCALL_INST_PAD; \
> - sts.l pr,@-r15; \
> - cfi_adjust_cfa_offset (4); \
> - cfi_rel_offset (pr, 0); \
> - mov.l r0,@-r15; \
> - cfi_adjust_cfa_offset (4); \
> - cfi_rel_offset (r0, 0); \
> - CDISABLE; \
> - mov.l @r15+,r0; \
> - cfi_adjust_cfa_offset (-4); \
> - cfi_restore (r0); \
> - lds.l @r15+,pr; \
> - cfi_adjust_cfa_offset (-4); \
> - cfi_restore (pr); \
> - mov r0,r1; \
> - mov _IMM12,r2; \
> - shad r2,r1; \
> - not r1,r1; \
> - tst r1,r1; \
> - bf .Lpseudo_end; \
> - .Lsyscall_error: \
> - SYSCALL_ERROR_HANDLER; \
> - .Lpseudo_end:
> -
> -# undef PSEUDO_END
> -# define PSEUDO_END(sym) \
> - END (sym)
> -
> -# define SAVE_ARGS_0 /* Nothing. */
> -# define SAVE_ARGS_1 SAVE_ARGS_0; mov.l r4,@(0,r15); cfi_offset (r4,-4)
> -# define SAVE_ARGS_2 SAVE_ARGS_1; mov.l r5,@(4,r15); cfi_offset (r5,-8)
> -# define SAVE_ARGS_3 SAVE_ARGS_2; mov.l r6,@(8,r15); cfi_offset (r6,-12)
> -# define SAVE_ARGS_4 SAVE_ARGS_3; mov.l r7,@(12,r15); cfi_offset (r7,-16)
> -# define SAVE_ARGS_5 SAVE_ARGS_4
> -# define SAVE_ARGS_6 SAVE_ARGS_5
> -
> -# define LOAD_ARGS_0 /* Nothing. */
> -# define LOAD_ARGS_1 LOAD_ARGS_0; mov.l @(0,r15),r4; cfi_restore (r4)
> -# define LOAD_ARGS_2 LOAD_ARGS_1; mov.l @(4,r15),r5; cfi_restore (r5)
> -# define LOAD_ARGS_3 LOAD_ARGS_2; mov.l @(8,r15),r6; cfi_restore (r6)
> -# define LOAD_ARGS_4 LOAD_ARGS_3; mov.l @(12,r15),r7; cfi_restore (r7)
> -# define LOAD_ARGS_5 LOAD_ARGS_4
> -# define LOAD_ARGS_6 LOAD_ARGS_5
> -
> -# if IS_IN (libpthread)
> -# define __local_enable_asynccancel __pthread_enable_asynccancel
> -# define __local_disable_asynccancel __pthread_disable_asynccancel
> -# elif IS_IN (libc)
> -# define __local_enable_asynccancel __libc_enable_asynccancel
> -# define __local_disable_asynccancel __libc_disable_asynccancel
> -# elif IS_IN (librt)
> -# define __local_enable_asynccancel __librt_enable_asynccancel
> -# define __local_disable_asynccancel __librt_disable_asynccancel
> -# else
> -# error Unsupported library
> -# endif
> -
> -# define CENABLE \
> - mov.l 1f,r0; \
> - bsrf r0; \
> - nop; \
> - 0: bra 2f; \
> - mov r0,r2; \
> - .align 2; \
> - 1: .long __local_enable_asynccancel - 0b; \
> - 2:
> -
> -# define CDISABLE \
> - mov.l 1f,r0; \
> - bsrf r0; \
> - mov r2,r4; \
> - 0: bra 2f; \
> - nop; \
> - .align 2; \
> - 1: .long __local_disable_asynccancel - 0b; \
> - 2:
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P \
> - stc gbr,r0; \
> - mov.w 0f,r1; \
> - sub r1,r0; \
> - mov.l @(MULTIPLE_THREADS_OFFSET,r0),r0; \
> - bra 1f; \
> - tst r0,r0; \
> - 0: .word TLS_PRE_TCB_SIZE; \
> - 1:
> -
> -# endif
>
> -#elif !defined __ASSEMBLER__
> +#else
>
> # define SINGLE_THREAD_P (1)
> # define NO_CANCELLATION 1
>
> #endif
>
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> +#define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
> deleted file mode 100644
> index c513212..0000000
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
> +++ /dev/null
> @@ -1,111 +0,0 @@
> -/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
> - This file is part of the GNU C Library.
> - Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
> -
> - 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>
> -#include <tls.h>
> -#ifndef __ASSEMBLER__
> -# include <nptl/pthreadP.h>
> -#endif
> -
> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
> -
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .text; \
> - .globl __syscall_error; \
> -ENTRY(name) \
> - ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\
> - cmp %g1, 0; \
> - bne 1f; \
> -.type __##syscall_name##_nocancel,@function; \
> -.globl __##syscall_name##_nocancel; \
> -__##syscall_name##_nocancel: \
> - mov SYS_ify(syscall_name), %g1; \
> - ta 0x10; \
> - bcc 8f; \
> - mov %o7, %g1; \
> - call __syscall_error; \
> - mov %g1, %o7; \
> -8: jmpl %o7 + 8, %g0; \
> - nop; \
> -.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\
> -1: save %sp, -96, %sp; \
> - cfi_def_cfa_register(%fp); \
> - cfi_window_save; \
> - cfi_register(%o7, %i7); \
> - CENABLE; \
> - nop; \
> - mov %o0, %l0; \
> - COPY_ARGS_##args \
> - mov SYS_ify(syscall_name), %g1; \
> - ta 0x10; \
> - bcc 1f; \
> - mov %o0, %l1; \
> - CDISABLE; \
> - mov %l0, %o0; \
> - call __syscall_error; \
> - mov %l1, %o0; \
> - b 2f; \
> - mov -1, %l1; \
> -1: CDISABLE; \
> - mov %l0, %o0; \
> -2: jmpl %i7 + 8, %g0; \
> - restore %g0, %l1, %o0;
> -
> -
> -# if IS_IN (libpthread)
> -# define CENABLE call __pthread_enable_asynccancel
> -# define CDISABLE call __pthread_disable_asynccancel
> -# elif IS_IN (libc)
> -# define CENABLE call __libc_enable_asynccancel
> -# define CDISABLE call __libc_disable_asynccancel
> -# elif IS_IN (librt)
> -# define CENABLE call __librt_enable_asynccancel
> -# define CDISABLE call __librt_disable_asynccancel
> -# else
> -# error Unsupported library
> -# endif
> -
> -#define COPY_ARGS_0 /* Nothing */
> -#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0;
> -#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1;
> -#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2;
> -#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3;
> -#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4;
> -#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5;
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> - header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1
> -# endif
> -
> -#elif !defined __ASSEMBLER__
> -
> -# define SINGLE_THREAD_P (1)
> -# define NO_CANCELLATION 1
> -
> -#endif
> -
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> - header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
> deleted file mode 100644
> index 45fbd73..0000000
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
> +++ /dev/null
> @@ -1,109 +0,0 @@
> -/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
> - This file is part of the GNU C Library.
> - Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
> -
> - 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>
> -#include <tls.h>
> -#ifndef __ASSEMBLER__
> -# include <nptl/pthreadP.h>
> -#endif
> -
> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
> -
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .text; \
> - .globl __syscall_error; \
> -ENTRY(name) \
> - ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\
> - brnz,pn %g1, 1f; \
> -.type __##syscall_name##_nocancel,@function; \
> -.globl __##syscall_name##_nocancel; \
> -__##syscall_name##_nocancel: \
> - mov SYS_ify(syscall_name), %g1; \
> - ta 0x6d; \
> - bcc,pt %xcc, 8f; \
> - mov %o7, %g1; \
> - call __syscall_error; \
> - mov %g1, %o7; \
> -8: jmpl %o7 + 8, %g0; \
> - nop; \
> -.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\
> -1: save %sp, -192, %sp; \
> - cfi_def_cfa_register(%fp); \
> - cfi_window_save; \
> - cfi_register(%o7, %i7); \
> - CENABLE; \
> - nop; \
> - mov %o0, %l0; \
> - COPY_ARGS_##args \
> - mov SYS_ify(syscall_name), %g1; \
> - ta 0x6d; \
> - bcc,pt %xcc, 1f; \
> - mov %o0, %l1; \
> - CDISABLE; \
> - mov %l0, %o0; \
> - call __syscall_error; \
> - mov %l1, %o0; \
> - ba,pt %xcc, 2f; \
> - mov -1, %l1; \
> -1: CDISABLE; \
> - mov %l0, %o0; \
> -2: jmpl %i7 + 8, %g0; \
> - restore %g0, %l1, %o0;
> -
> -# if IS_IN (libpthread)
> -# define CENABLE call __pthread_enable_asynccancel
> -# define CDISABLE call __pthread_disable_asynccancel
> -# elif IS_IN (libc)
> -# define CENABLE call __libc_enable_asynccancel
> -# define CDISABLE call __libc_disable_asynccancel
> -# elif IS_IN (librt)
> -# define CENABLE call __librt_enable_asynccancel
> -# define CDISABLE call __librt_disable_asynccancel
> -# else
> -# error Unsupported library
> -# endif
> -
> -#define COPY_ARGS_0 /* Nothing */
> -#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0;
> -#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1;
> -#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2;
> -#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3;
> -#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4;
> -#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5;
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> - header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1
> -# endif
> -
> -#elif !defined __ASSEMBLER__
> -
> -# define SINGLE_THREAD_P (1)
> -# define NO_CANCELLATION 1
> -
> -#endif
> -
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> - header.multiple_threads) == 0, 1)
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
> new file mode 100644
> index 0000000..61bfa33
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
> @@ -0,0 +1,38 @@
> +/* Copyright (C) 2002-2015 Free Software Foundation, Inc.
> + This file is part of the GNU C Library.
> + Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
> +
> + 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>
> +#include <tls.h>
> +#include <nptl/pthreadP.h>
> +
> +#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
> +
> +# define SINGLE_THREAD_P \
> + __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> + header.multiple_threads) == 0, 1)
> +
> +#else
> +
> +# define SINGLE_THREAD_P (1)
> +# define NO_CANCELLATION 1
> +
> +#endif
> +
> +#define RTLD_SINGLE_THREAD_P \
> + __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> + header.multiple_threads) == 0, 1)
> diff --git a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
> index 092a90c..c8994db 100644
> --- a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
> @@ -18,137 +18,22 @@
>
> #include <sysdep.h>
> #include <tls.h>
> -#ifndef __ASSEMBLER__
> -# include <nptl/pthreadP.h>
> -#endif
> +#include <nptl/pthreadP.h>
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -/* Allow hacking in some extra code if desired. */
> -#ifndef PSEUDO_EXTRA
> -#define PSEUDO_EXTRA
> -#endif
> -
> -#undef PSEUDO
> -#define PSEUDO(name, syscall_name, args) \
> - ENTRY(__##syscall_name##_nocancel); \
> - PSEUDO_EXTRA \
> - moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name); \
> - swint1; \
> - BNEZ r1, 0f; \
> - jrp lr; \
> - END(__##syscall_name##_nocancel); \
> - ENTRY (name) \
> - SINGLE_THREAD_P(r11); \
> - BEQZ r11, L(pseudo_cancel); \
> - PSEUDO_EXTRA \
> - moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name); \
> - swint1; \
> - BNEZ r1, 0f; \
> - jrp lr; \
> - L(pseudo_cancel): \
> - { \
> - move r11, sp; \
> - ST sp, lr; \
> - ADDI_PTR sp, sp, -STKSPACE; \
> - }; \
> - cfi_offset (lr, 0); \
> - cfi_def_cfa_offset (STKSPACE); \
> - { \
> - ADDI_PTR r12, sp, REGSIZE; \
> - ADDI_PTR r13, sp, 2 * REGSIZE; /* set up for PUSHARGS_0 */ \
> - }; \
> - ST r12, r11; \
> - PUSHARGS_##args /* save syscall args */ \
> - CENABLE; \
> - ADDI_PTR r12, sp, 10 * REGSIZE; \
> - { \
> - ST r12, r0; /* save mask */ \
> - ADDI_PTR r13, sp, 2 * REGSIZE; /* set up for POPARGS_0 */ \
> - }; \
> - POPARGS_##args /* restore syscall args */ \
> - PSEUDO_EXTRA \
> - moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name); \
> - swint1; \
> - ADDI_PTR r12, sp, 12 * REGSIZE; \
> - { \
> - ST r12, r1; /* save syscall result */ \
> - ADDI_PTR r12, sp, 11 * REGSIZE; \
> - }; \
> - { \
> - ST r12, r0; \
> - ADDI_PTR r13, sp, 10 * REGSIZE; \
> - }; \
> - LD r0, r13; /* pass mask as arg1 */ \
> - CDISABLE; \
> - { \
> - ADDI_PTR lr, sp, STKSPACE; \
> - ADDI_PTR r0, sp, 11 * REGSIZE; \
> - }; \
> - { \
> - LD r0, r0; \
> - ADDI_PTR r1, sp, 12 * REGSIZE; \
> - }; \
> - LD r1, r1; \
> - { \
> - LD lr, lr; \
> - ADDI_PTR sp, sp, STKSPACE; \
> - }; \
> - cfi_def_cfa_offset (0); \
> - BNEZ r1, 0f
> -
> -# define PUSHARGS_0 /* nothing to do */
> -# define PUSHARGS_1 PUSHARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; ST r13, r0 };
> -# define PUSHARGS_2 PUSHARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; ST r14, r1 };
> -# define PUSHARGS_3 PUSHARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; ST r13, r2 };
> -# define PUSHARGS_4 PUSHARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; ST r14, r3 };
> -# define PUSHARGS_5 PUSHARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; ST r13, r4 };
> -# define PUSHARGS_6 PUSHARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; ST r14, r5 };
> -# define PUSHARGS_7 PUSHARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; ST r13, r6 };
> -
> -# define POPARGS_0 /* nothing to do */
> -# define POPARGS_1 POPARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; LD r0, r13 };
> -# define POPARGS_2 POPARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; LD r1, r14 };
> -# define POPARGS_3 POPARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; LD r2, r13 };
> -# define POPARGS_4 POPARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; LD r3, r14 };
> -# define POPARGS_5 POPARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; LD r4, r13 };
> -# define POPARGS_6 POPARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; LD r5, r14 };
> -# define POPARGS_7 POPARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; LD r6, r13 };
> -
> -# define STKSPACE (13 * REGSIZE)
> -
> -# if IS_IN (libpthread)
> -# define CENABLE jal __pthread_enable_asynccancel
> -# define CDISABLE jal __pthread_disable_asynccancel
> -# elif IS_IN (librt)
> -# define CENABLE jal __librt_enable_asynccancel
> -# define CDISABLE jal __librt_disable_asynccancel
> -# else
> -# define CENABLE jal __libc_enable_asynccancel
> -# define CDISABLE jal __libc_disable_asynccancel
> -# endif
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) \
> == 0, 1)
> -# else
> -# define SINGLE_THREAD_P(reg) \
> - ADDLI_PTR reg, tp, MULTIPLE_THREADS_OFFSET; \
> - LD reg, reg; \
> - CMPEQI reg, reg, 0
> -#endif
>
> -#elif !defined __ASSEMBLER__
> +#else
>
> # define SINGLE_THREAD_P 1
> # define NO_CANCELLATION 1
>
> #endif
>
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> +#define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 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 6598010..0979bde 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
> +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
> @@ -24,86 +24,32 @@
>
> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>
> -/* The code to disable cancellation depends on the fact that the called
> - functions are special. They don't modify registers other than %rax
> - and %r11 if they return. Therefore we don't have to preserve other
> - registers around these calls. */
> -# undef PSEUDO
> -# define PSEUDO(name, syscall_name, args) \
> - .text; \
> - ENTRY (name) \
> - SINGLE_THREAD_P; \
> - jne L(pseudo_cancel); \
> - .type __##syscall_name##_nocancel,@function; \
> - .globl __##syscall_name##_nocancel; \
> - __##syscall_name##_nocancel: \
> - DO_CALL (syscall_name, args); \
> - cmpq $-4095, %rax; \
> - jae SYSCALL_ERROR_LABEL; \
> - ret; \
> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
> - L(pseudo_cancel): \
> - /* We always have to align the stack before calling a function. */ \
> - subq $8, %rsp; cfi_adjust_cfa_offset (8); \
> - CENABLE \
> - /* The return value from CENABLE is argument for CDISABLE. */ \
> - movq %rax, (%rsp); \
> - DO_CALL (syscall_name, args); \
> - movq (%rsp), %rdi; \
> - /* Save %rax since it's the error code from the syscall. */ \
> - movq %rax, %rdx; \
> - CDISABLE \
> - movq %rdx, %rax; \
> - addq $8,%rsp; cfi_adjust_cfa_offset (-8); \
> - cmpq $-4095, %rax; \
> - jae SYSCALL_ERROR_LABEL
> -
> -
> # if IS_IN (libpthread)
> -# define CENABLE call __pthread_enable_asynccancel;
> -# define CDISABLE call __pthread_disable_asynccancel;
> # define __local_multiple_threads __pthread_multiple_threads
> # elif IS_IN (libc)
> -# define CENABLE call __libc_enable_asynccancel;
> -# define CDISABLE call __libc_disable_asynccancel;
> # define __local_multiple_threads __libc_multiple_threads
> # elif IS_IN (librt)
> -# define CENABLE call __librt_enable_asynccancel;
> -# define CDISABLE call __librt_disable_asynccancel;
> # else
> # error Unsupported library
> # endif
>
> # if IS_IN (libpthread) || IS_IN (libc)
> -# ifndef __ASSEMBLER__
> extern int __local_multiple_threads attribute_hidden;
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (__local_multiple_threads == 0, 1)
> -# else
> -# define SINGLE_THREAD_P cmpl $0, __local_multiple_threads(%rip)
> -# endif
> -
> # else
> -
> -# ifndef __ASSEMBLER__
> -# define SINGLE_THREAD_P \
> +# define SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -# else
> -# define SINGLE_THREAD_P cmpl $0, %fs:MULTIPLE_THREADS_OFFSET
> -# endif
> -
> # endif
>
> -#elif !defined __ASSEMBLER__
> +#else
>
> # define SINGLE_THREAD_P (1)
> # define NO_CANCELLATION 1
>
> #endif
>
> -#ifndef __ASSEMBLER__
> -# define RTLD_SINGLE_THREAD_P \
> +#define RTLD_SINGLE_THREAD_P \
> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
> header.multiple_threads) == 0, 1)
> -#endif
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 14/14] Remove cancellation support for syscall generation
2017-08-23 17:23 ` Adhemerval Zanella
@ 2017-08-24 18:04 ` Adhemerval Zanella
0 siblings, 0 replies; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-24 18:04 UTC (permalink / raw)
To: libc-alpha
I pushed the below just some minor cleanups:
* __builtin_expect replaced by __glibc_likely;
* Adjusted comment in syscall-template.S about cancellable syscall;
* Fixed new files description and dates.
I also updated the syscall wiki [1] to reflect current code convention
and examples.
[1] https://sourceware.org/glibc/wiki/SyscallWrappers
On 23/08/2017 14:23, Adhemerval Zanella wrote:
> Now with both 78ca091cdd2 and b70b6026a05 pushed upstream no linux port
> actually uess the sysdep-cancel.h assembly macro for syscall generation,
> so it should be safe to remove all their definition and just define
> cancellable syscalls using SYSCALL_CANCEL C macro.
>
> I have tested this patch with build-many-glibc.py for the all affected
> ports and it shows not build failures. I take this is an extensive patch,
> but it a cleanup one that aims to code simplicity.
>
> I plan to commit this shortly if no one opposes it.
>
> On 03/08/2017 10:11, Adhemerval Zanella wrote:
>> This patch removes the cancellation mark from the auto-generation syscall
>> script. Now all the cancellable syscalls are done throught C code using
>> the SYSCALL_CANCEL macro. It simplifies the assembly required to each
>> architecture port, since the SYSCALL_CANCEL uses the already defined
>> INLINE_SYSCALL macros, and allows a more straigh fix on cancellation
>> machanism (since no more specific assembly fixes will be required).
>>
>> Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
>> aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.
>>
>> * sysdeps/unix/make-syscalls.sh: Remove cancellable tagging for
>> syscall definitions.
>> * sysdeps/unix/syscall-template.S (SYSCALL_CANCELLABLE): Remove
>> definition.
>> * sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (__local_enable_asynccancel): Likewise.
>> [IS_IN (libpthread)] (__local_disable_asynccancel): Likewise.
>> [IS_IN (libc)] (__local_enable_asynccancel): Likewise.
>> [IS_IN (libc)] (__local_enable_asynccancel): Likewise.
>> [IS_IN (librt)] (__local_disable_asynccancel): Likewise.
>> [IS_IN (librt)] (__local_disable_asynccancel): Likewise.
>> (CENABLE): Likewise.
>> (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (PSEUDO): Remove
>> defintion.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h (PSEUDO):
>> Remove definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/mips/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Remove file.
>> * sysdeps/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.
>> * sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: New file.
>> * sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Remove file.
>> * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.
>> * sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: New file.
>> * sysdeps/unix/sysv/linux/tile/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> * sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h (PSEUDO): Remove
>> definition.
>> (PSEUDO_END): Likewise.
>> [IS_IN (libpthread)] (CENABLE): Likewise.
>> [IS_IN (libpthread)] (CDISABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (libc)] (CENABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [IS_IN (librt)] (CDISABLE): Likewise.
>> [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> ---
>> ChangeLog | 173 ++++++++++++++
>> sysdeps/unix/make-syscalls.sh | 4 -
>> sysdeps/unix/syscall-template.S | 7 +-
>> sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h | 87 +------
>> sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h | 131 +----------
>> sysdeps/unix/sysv/linux/arm/sysdep-cancel.h | 197 +---------------
>> sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h | 225 +------------------
>> sysdeps/unix/sysv/linux/i386/sysdep-cancel.h | 119 +---------
>> sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h | 194 +---------------
>> sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h | 108 +--------
>> sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h | 116 +---------
>> .../unix/sysv/linux/mips/mips64/sysdep-cancel.h | 249 ---------------------
>> sysdeps/unix/sysv/linux/mips/sysdep-cancel.h | 159 +------------
>> sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h | 110 +--------
>> .../sysv/linux/powerpc/powerpc32/sysdep-cancel.h | 118 ----------
>> .../sysv/linux/powerpc/powerpc64/sysdep-cancel.h | 147 ------------
>> sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h | 38 ++++
>> .../unix/sysv/linux/s390/s390-32/sysdep-cancel.h | 105 +--------
>> .../unix/sysv/linux/s390/s390-64/sysdep-cancel.h | 109 +--------
>> sysdeps/unix/sysv/linux/sh/sysdep-cancel.h | 136 +----------
>> .../unix/sysv/linux/sparc/sparc32/sysdep-cancel.h | 111 ---------
>> .../unix/sysv/linux/sparc/sparc64/sysdep-cancel.h | 109 ---------
>> sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h | 38 ++++
>> sysdeps/unix/sysv/linux/tile/sysdep-cancel.h | 123 +---------
>> sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h | 62 +----
>> 25 files changed, 305 insertions(+), 2670 deletions(-)
>> delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
>> delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
>> delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
>> create mode 100644 sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
>> delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
>> delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
>> create mode 100644 sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
>>
>> diff --git a/ChangeLog b/ChangeLog
>> index d0a78a1..a84bd55 100644
>> --- a/ChangeLog
>> +++ b/ChangeLog
>> @@ -1,5 +1,178 @@
>> 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>>
>> + * sysdeps/unix/make-syscalls.sh: Remove cancellable tagging for
>> + syscall definitions.
>> + * sysdeps/unix/syscall-template.S (SYSCALL_CANCELLABLE): Remove
>> + definition.
>> + * sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (__local_enable_asynccancel): Likewise.
>> + [IS_IN (libpthread)] (__local_disable_asynccancel): Likewise.
>> + [IS_IN (libc)] (__local_enable_asynccancel): Likewise.
>> + [IS_IN (libc)] (__local_enable_asynccancel): Likewise.
>> + [IS_IN (librt)] (__local_disable_asynccancel): Likewise.
>> + [IS_IN (librt)] (__local_disable_asynccancel): Likewise.
>> + (CENABLE): Likewise.
>> + (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (PSEUDO): Remove
>> + defintion.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h (PSEUDO):
>> + Remove definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/mips/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Remove file.
>> + * sysdeps/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.
>> + * sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: New file.
>> + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Remove file.
>> + * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.
>> + * sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: New file.
>> + * sysdeps/unix/sysv/linux/tile/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> + * sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h (PSEUDO): Remove
>> + definition.
>> + (PSEUDO_END): Likewise.
>> + [IS_IN (libpthread)] (CENABLE): Likewise.
>> + [IS_IN (libpthread)] (CDISABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (libc)] (CENABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [IS_IN (librt)] (CDISABLE): Likewise.
>> + [__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
>> +
>> * sysdeps/unix/sysv/linux/x86_64/syscalls.list (pread64): Remove.
>> (preadv64): Likewise.
>> (pwrite64(: Likewise.
>> diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh
>> index 123553c..042cfac 100644
>> --- a/sysdeps/unix/make-syscalls.sh
>> +++ b/sysdeps/unix/make-syscalls.sh
>> @@ -12,7 +12,6 @@
>> #
>> # Syscall Signature Prefixes:
>> #
>> -# C: cancellable (i.e., this syscall is a cancellation point)
>> # E: errno and return value are not set by the call
>> # V: errno is not set, but errno or zero (success) is returned from the call
>> #
>> @@ -171,11 +170,9 @@ while read file srcfile caller syscall args strong weak; do
>> ;;
>> esac
>>
>> - cancellable=0
>> noerrno=0
>> errval=0
>> case $args in
>> - C*) cancellable=1; args=`echo $args | sed 's/C:\?//'`;;
>> E*) noerrno=1; args=`echo $args | sed 's/E:\?//'`;;
>> V*) errval=1; args=`echo $args | sed 's/V:\?//'`;;
>> esac
>> @@ -258,7 +255,6 @@ while read file srcfile caller syscall args strong weak; do
>> (echo '#define SYSCALL_NAME $syscall'; \\
>> echo '#define SYSCALL_NARGS $nargs'; \\
>> echo '#define SYSCALL_SYMBOL $strong'; \\
>> - echo '#define SYSCALL_CANCELLABLE $cancellable'; \\
>> echo '#define SYSCALL_NOERRNO $noerrno'; \\
>> echo '#define SYSCALL_ERRVAL $errval'; \\
>> echo '#include <syscall-template.S>'; \\"
>> diff --git a/sysdeps/unix/syscall-template.S b/sysdeps/unix/syscall-template.S
>> index 4993ff5..d4584a9 100644
>> --- a/sysdeps/unix/syscall-template.S
>> +++ b/sysdeps/unix/syscall-template.S
>> @@ -27,7 +27,6 @@
>> SYSCALL_NAME syscall name
>> SYSCALL_NARGS number of arguments this call takes
>> SYSCALL_SYMBOL primary symbol name
>> - SYSCALL_CANCELLABLE 1 if the call is a cancelation point
>> SYSCALL_NOERRNO 1 to define a no-errno version (see below)
>> SYSCALL_ERRVAL 1 to define an error-value version (see below)
>>
>> @@ -41,11 +40,7 @@
>> instructions long and the untrained eye might not distinguish them from
>> some compiled code that inexplicably lacks source line information. */
>>
>> -#if SYSCALL_CANCELLABLE
>> -# include <sysdep-cancel.h>
>> -#else
>> -# include <sysdep.h>
>> -#endif
>> +#include <sysdep.h>
>>
>> /* This indirection is needed so that SYMBOL gets macro-expanded. */
>> #define syscall_hidden_def(SYMBOL) hidden_def (SYMBOL)
>> diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
>> index 4be2259..d39b6a2 100644
>> --- a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
>> @@ -24,102 +24,23 @@
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .section ".text"; \
>> -ENTRY (__##syscall_name##_nocancel); \
>> -.Lpseudo_nocancel: \
>> - DO_CALL (syscall_name, args); \
>> -.Lpseudo_finish: \
>> - cmn x0, 4095; \
>> - b.cs .Lsyscall_error; \
>> - .subsection 2; \
>> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
>> -ENTRY (name); \
>> - SINGLE_THREAD_P(16); \
>> - cbz w16, .Lpseudo_nocancel; \
>> - /* Setup common stack frame no matter the number of args. \
>> - Also save the first arg, since it's basically free. */ \
>> - stp x30, x0, [sp, -64]!; \
>> - cfi_adjust_cfa_offset (64); \
>> - cfi_rel_offset (x30, 0); \
>> - DOCARGS_##args; /* save syscall args around CENABLE. */ \
>> - CENABLE; \
>> - mov x16, x0; /* save mask around syscall. */ \
>> - UNDOCARGS_##args; /* restore syscall args. */ \
>> - DO_CALL (syscall_name, args); \
>> - str x0, [sp, 8]; /* save result around CDISABLE. */ \
>> - mov x0, x16; /* restore mask for CDISABLE. */ \
>> - CDISABLE; \
>> - /* Break down the stack frame, restoring result at once. */ \
>> - ldp x30, x0, [sp], 64; \
>> - cfi_adjust_cfa_offset (-64); \
>> - cfi_restore (x30); \
>> - b .Lpseudo_finish; \
>> - cfi_endproc; \
>> - .size name, .-name; \
>> - .previous
>> -
>> -# undef PSEUDO_END
>> -# define PSEUDO_END(name) \
>> - SYSCALL_ERROR_HANDLER; \
>> - cfi_endproc
>> -
>> -# define DOCARGS_0
>> -# define DOCARGS_1
>> -# define DOCARGS_2 str x1, [sp, 16]
>> -# define DOCARGS_3 stp x1, x2, [sp, 16]
>> -# define DOCARGS_4 DOCARGS_3; str x3, [sp, 32]
>> -# define DOCARGS_5 DOCARGS_3; stp x3, x4, [sp, 32]
>> -# define DOCARGS_6 DOCARGS_5; str x5, [sp, 48]
>> -
>> -# define UNDOCARGS_0
>> -# define UNDOCARGS_1 ldr x0, [sp, 8]
>> -# define UNDOCARGS_2 ldp x0, x1, [sp, 8]
>> -# define UNDOCARGS_3 UNDOCARGS_1; ldp x1, x2, [sp, 16]
>> -# define UNDOCARGS_4 UNDOCARGS_2; ldp x2, x3, [sp, 24]
>> -# define UNDOCARGS_5 UNDOCARGS_3; ldp x3, x4, [sp, 32]
>> -# define UNDOCARGS_6 UNDOCARGS_4; ldp x4, x5, [sp, 40]
>> -
>> # if IS_IN (libpthread)
>> -# define CENABLE bl __pthread_enable_asynccancel
>> -# define CDISABLE bl __pthread_disable_asynccancel
>> # define __local_multiple_threads __pthread_multiple_threads
>> # elif IS_IN (libc)
>> -# define CENABLE bl __libc_enable_asynccancel
>> -# define CDISABLE bl __libc_disable_asynccancel
>> # define __local_multiple_threads __libc_multiple_threads
>> -# elif IS_IN (librt)
>> -# define CENABLE bl __librt_enable_asynccancel
>> -# define CDISABLE bl __librt_disable_asynccancel
>> -# else
>> -# error Unsupported library
>> # endif
>>
>> # if IS_IN (libpthread) || IS_IN (libc)
>> -# ifndef __ASSEMBLER__
>> extern int __local_multiple_threads attribute_hidden;
>> -# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P(R) \
>> - adrp x##R, __local_multiple_threads; \
>> - ldr w##R, [x##R, :lo12:__local_multiple_threads]
>> -# endif
>> +# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
>> # else
>> /* There is no __local_multiple_threads for librt, so use the TCB. */
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P(R) \
>> - mrs x##R, tpidr_el0; \
>> - sub x##R, x##R, PTHREAD_SIZEOF; \
>> - ldr w##R, [x##R, PTHREAD_MULTIPLE_THREADS_OFFSET]
>> -# endif
>> # endif
>>
>> -#elif !defined __ASSEMBLER__
>> +#else
>>
>> /* For rtld, et cetera. */
>> # define SINGLE_THREAD_P 1
>> @@ -127,8 +48,6 @@ extern int __local_multiple_threads attribute_hidden;
>>
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> # define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
>> index 66d6962..366cf31 100644
>> --- a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
>> @@ -17,147 +17,24 @@
>>
>> #include <sysdep.h>
>> #include <tls.h>
>> -#ifndef __ASSEMBLER__
>> -# include <nptl/pthreadP.h>
>> -#endif
>> +#include <nptl/pthreadP.h>
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -/* ??? Assumes that nothing comes between PSEUDO and PSEUDO_END
>> - besides "ret". */
>> -
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .globl __##syscall_name##_nocancel; \
>> - .type __##syscall_name##_nocancel, @function; \
>> - .usepv __##syscall_name##_nocancel, std; \
>> - .align 4; \
>> - cfi_startproc; \
>> -__LABEL(__##syscall_name##_nocancel) \
>> - ldgp gp, 0(pv); \
>> - PSEUDO_PROF; \
>> -__LABEL($pseudo_nocancel) \
>> - PSEUDO_PREPARE_ARGS; \
>> - lda v0, SYS_ify(syscall_name); \
>> - call_pal PAL_callsys; \
>> - bne a3, SYSCALL_ERROR_LABEL; \
>> -__LABEL($pseudo_ret) \
>> - .subsection 2; \
>> - .size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \
>> - .globl name; \
>> - .type name, @function; \
>> - .usepv name, std; \
>> - .align 4; \
>> - cfi_startproc; \
>> -__LABEL(name) \
>> - ldgp gp, 0(pv); \
>> - PSEUDO_PROF; \
>> - SINGLE_THREAD_P(t0); \
>> - beq t0, $pseudo_nocancel; \
>> - subq sp, 64, sp; \
>> - cfi_def_cfa_offset(64); \
>> - stq ra, 0(sp); \
>> - cfi_offset(ra, -64); \
>> - SAVE_ARGS_##args; \
>> - CENABLE; \
>> - LOAD_ARGS_##args; \
>> - /* Save the CENABLE return value in RA. That register \
>> - is preserved across syscall and the real return \
>> - address is saved on the stack. */ \
>> - mov v0, ra; \
>> - lda v0, SYS_ify(syscall_name); \
>> - call_pal PAL_callsys; \
>> - stq v0, 8(sp); \
>> - mov ra, a0; \
>> - bne a3, $multi_error; \
>> - CDISABLE; \
>> - ldq ra, 0(sp); \
>> - ldq v0, 8(sp); \
>> - addq sp, 64, sp; \
>> - cfi_remember_state; \
>> - cfi_restore(ra); \
>> - cfi_def_cfa_offset(0); \
>> - ret; \
>> - cfi_restore_state; \
>> -__LABEL($multi_error) \
>> - CDISABLE; \
>> - ldq ra, 0(sp); \
>> - ldq v0, 8(sp); \
>> - addq sp, 64, sp; \
>> - cfi_restore(ra); \
>> - cfi_def_cfa_offset(0); \
>> - SYSCALL_ERROR_FALLTHRU; \
>> - SYSCALL_ERROR_HANDLER; \
>> - cfi_endproc; \
>> - .previous
>> -
>> -# undef PSEUDO_END
>> -# define PSEUDO_END(sym) \
>> - cfi_endproc; \
>> - .subsection 2; \
>> - .size sym, .-sym
>> -
>> -# define SAVE_ARGS_0 /* Nothing. */
>> -# define SAVE_ARGS_1 SAVE_ARGS_0; stq a0, 8(sp)
>> -# define SAVE_ARGS_2 SAVE_ARGS_1; stq a1, 16(sp)
>> -# define SAVE_ARGS_3 SAVE_ARGS_2; stq a2, 24(sp)
>> -# define SAVE_ARGS_4 SAVE_ARGS_3; stq a3, 32(sp)
>> -# define SAVE_ARGS_5 SAVE_ARGS_4; stq a4, 40(sp)
>> -# define SAVE_ARGS_6 SAVE_ARGS_5; stq a5, 48(sp)
>> -
>> -# define LOAD_ARGS_0 /* Nothing. */
>> -# define LOAD_ARGS_1 LOAD_ARGS_0; ldq a0, 8(sp)
>> -# define LOAD_ARGS_2 LOAD_ARGS_1; ldq a1, 16(sp)
>> -# define LOAD_ARGS_3 LOAD_ARGS_2; ldq a2, 24(sp)
>> -# define LOAD_ARGS_4 LOAD_ARGS_3; ldq a3, 32(sp)
>> -# define LOAD_ARGS_5 LOAD_ARGS_4; ldq a4, 40(sp)
>> -# define LOAD_ARGS_6 LOAD_ARGS_5; ldq a5, 48(sp)
>> -
>> # if IS_IN (libpthread)
>> -# define __local_enable_asynccancel __pthread_enable_asynccancel
>> -# define __local_disable_asynccancel __pthread_disable_asynccancel
>> # define __local_multiple_threads __pthread_multiple_threads
>> # elif IS_IN (libc)
>> -# define __local_enable_asynccancel __libc_enable_asynccancel
>> -# define __local_disable_asynccancel __libc_disable_asynccancel
>> # define __local_multiple_threads __libc_multiple_threads
>> -# elif IS_IN (librt)
>> -# define __local_enable_asynccancel __librt_enable_asynccancel
>> -# define __local_disable_asynccancel __librt_disable_asynccancel
>> -# else
>> -# error Unsupported library
>> -# endif
>> -
>> -# ifdef PIC
>> -# define CENABLE bsr ra, __local_enable_asynccancel !samegp
>> -# define CDISABLE bsr ra, __local_disable_asynccancel !samegp
>> -# else
>> -# define CENABLE jsr ra, __local_enable_asynccancel; ldgp ra, 0(gp)
>> -# define CDISABLE jsr ra, __local_disable_asynccancel; ldgp ra, 0(gp)
>> # endif
>>
>> # if IS_IN (libpthread) || IS_IN (libc)
>> -# ifndef __ASSEMBLER__
>> extern int __local_multiple_threads attribute_hidden;
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (__local_multiple_threads == 0, 1)
>> -# elif defined(PIC)
>> -# define SINGLE_THREAD_P(reg) ldl reg, __local_multiple_threads(gp) !gprel
>> -# else
>> -# define SINGLE_THREAD_P(reg) \
>> - ldah reg, __local_multiple_threads(gp) !gprelhigh; \
>> - ldl reg, __local_multiple_threads(reg) !gprellow
>> -# endif
>> # else
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P(reg) \
>> - call_pal PAL_rduniq; \
>> - ldl reg, MULTIPLE_THREADS_OFFSET($0)
>> -# endif
>> # endif
>>
>> #else
>> @@ -167,8 +44,6 @@ extern int __local_multiple_threads attribute_hidden;
>>
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> # define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
>> index de12acf..738e749 100644
>> --- a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
>> @@ -23,210 +23,23 @@
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -/* NOTE: We do mark syscalls with unwind annotations, for the benefit of
>> - cancellation; but they're really only accurate at the point of the
>> - syscall. The ARM unwind directives are not rich enough without adding
>> - a custom personality function. */
>> -
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .text; \
>> - ENTRY (__##syscall_name##_nocancel); \
>> - CFI_SECTIONS; \
>> - DO_CALL (syscall_name, args); \
>> - cmn r0, $4096; \
>> - PSEUDO_RET; \
>> - END (__##syscall_name##_nocancel); \
>> - ENTRY (name); \
>> - SINGLE_THREAD_P; \
>> - DOARGS_##args; \
>> - bne .Lpseudo_cancel; \
>> - cfi_remember_state; \
>> - ldr r7, =SYS_ify (syscall_name); \
>> - swi 0x0; \
>> - UNDOARGS_##args; \
>> - cmn r0, $4096; \
>> - PSEUDO_RET; \
>> - cfi_restore_state; \
>> - .Lpseudo_cancel: \
>> - .fnstart; /* matched by the .fnend in UNDOARGS below. */ \
>> - DOCARGS_##args; /* save syscall args etc. around CENABLE. */ \
>> - CENABLE; \
>> - mov ip, r0; /* put mask in safe place. */ \
>> - UNDOCARGS_##args; /* restore syscall args. */ \
>> - ldr r7, =SYS_ify (syscall_name); \
>> - swi 0x0; /* do the call. */ \
>> - mov r7, r0; /* save syscall return value. */ \
>> - mov r0, ip; /* get mask back. */ \
>> - CDISABLE; \
>> - mov r0, r7; /* retrieve return value. */ \
>> - RESTORE_LR_##args; \
>> - UNDOARGS_##args; \
>> - cmn r0, $4096
>> -
>> -/* DOARGS pushes eight bytes on the stack for five arguments, twelve bytes for
>> - six arguments, and four bytes for fewer. In order to preserve doubleword
>> - alignment, sometimes we must save an extra register. */
>> -
>> -# define RESTART_UNWIND \
>> - .fnend; \
>> - .fnstart; \
>> - .save {r7}; \
>> - .save {lr}
>> -
>> -# define DOCARGS_0 \
>> - .save {r7}; \
>> - push {lr}; \
>> - cfi_adjust_cfa_offset (4); \
>> - cfi_rel_offset (lr, 0); \
>> - .save {lr}
>> -# define UNDOCARGS_0
>> -# define RESTORE_LR_0 \
>> - pop {lr}; \
>> - cfi_adjust_cfa_offset (-4); \
>> - cfi_restore (lr)
>> -
>> -# define DOCARGS_1 \
>> - .save {r7}; \
>> - push {r0, r1, lr}; \
>> - cfi_adjust_cfa_offset (12); \
>> - cfi_rel_offset (lr, 8); \
>> - .save {lr}; \
>> - .pad #8
>> -# define UNDOCARGS_1 \
>> - ldr r0, [sp], #8; \
>> - cfi_adjust_cfa_offset (-8); \
>> - RESTART_UNWIND
>> -# define RESTORE_LR_1 \
>> - RESTORE_LR_0
>> -
>> -# define DOCARGS_2 \
>> - .save {r7}; \
>> - push {r0, r1, lr}; \
>> - cfi_adjust_cfa_offset (12); \
>> - cfi_rel_offset (lr, 8); \
>> - .save {lr}; \
>> - .pad #8
>> -# define UNDOCARGS_2 \
>> - pop {r0, r1}; \
>> - cfi_adjust_cfa_offset (-8); \
>> - RESTART_UNWIND
>> -# define RESTORE_LR_2 \
>> - RESTORE_LR_0
>> -
>> -# define DOCARGS_3 \
>> - .save {r7}; \
>> - push {r0, r1, r2, r3, lr}; \
>> - cfi_adjust_cfa_offset (20); \
>> - cfi_rel_offset (lr, 16); \
>> - .save {lr}; \
>> - .pad #16
>> -# define UNDOCARGS_3 \
>> - pop {r0, r1, r2, r3}; \
>> - cfi_adjust_cfa_offset (-16); \
>> - RESTART_UNWIND
>> -# define RESTORE_LR_3 \
>> - RESTORE_LR_0
>> -
>> -# define DOCARGS_4 \
>> - .save {r7}; \
>> - push {r0, r1, r2, r3, lr}; \
>> - cfi_adjust_cfa_offset (20); \
>> - cfi_rel_offset (lr, 16); \
>> - .save {lr}; \
>> - .pad #16
>> -# define UNDOCARGS_4 \
>> - pop {r0, r1, r2, r3}; \
>> - cfi_adjust_cfa_offset (-16); \
>> - RESTART_UNWIND
>> -# define RESTORE_LR_4 \
>> - RESTORE_LR_0
>> -
>> -/* r4 is only stmfd'ed for correct stack alignment. */
>> -# define DOCARGS_5 \
>> - .save {r4, r7}; \
>> - push {r0, r1, r2, r3, r4, lr}; \
>> - cfi_adjust_cfa_offset (24); \
>> - cfi_rel_offset (lr, 20); \
>> - .save {lr}; \
>> - .pad #20
>> -# define UNDOCARGS_5 \
>> - pop {r0, r1, r2, r3}; \
>> - cfi_adjust_cfa_offset (-16); \
>> - .fnend; \
>> - .fnstart; \
>> - .save {r4, r7}; \
>> - .save {lr}; \
>> - .pad #4
>> -# define RESTORE_LR_5 \
>> - pop {r4, lr}; \
>> - cfi_adjust_cfa_offset (-8); \
>> - /* r4 will be marked as restored later. */ \
>> - cfi_restore (lr)
>> -
>> -# define DOCARGS_6 \
>> - .save {r4, r5, r7}; \
>> - push {r0, r1, r2, r3, lr}; \
>> - cfi_adjust_cfa_offset (20); \
>> - cfi_rel_offset (lr, 16); \
>> - .save {lr}; \
>> - .pad #16
>> -# define UNDOCARGS_6 \
>> - pop {r0, r1, r2, r3}; \
>> - cfi_adjust_cfa_offset (-16); \
>> - .fnend; \
>> - .fnstart; \
>> - .save {r4, r5, r7}; \
>> - .save {lr};
>> -# define RESTORE_LR_6 \
>> - RESTORE_LR_0
>> -
>> # if IS_IN (libpthread)
>> -# define CENABLE bl PLTJMP(__pthread_enable_asynccancel)
>> -# define CDISABLE bl PLTJMP(__pthread_disable_asynccancel)
>> # define __local_multiple_threads __pthread_multiple_threads
>> # elif IS_IN (libc)
>> -# define CENABLE bl PLTJMP(__libc_enable_asynccancel)
>> -# define CDISABLE bl PLTJMP(__libc_disable_asynccancel)
>> # define __local_multiple_threads __libc_multiple_threads
>> -# elif IS_IN (librt)
>> -# define CENABLE bl PLTJMP(__librt_enable_asynccancel)
>> -# define CDISABLE bl PLTJMP(__librt_disable_asynccancel)
>> -# else
>> -# error Unsupported library
>> # endif
>>
>> # if IS_IN (libpthread) || IS_IN (libc)
>> -# ifndef __ASSEMBLER__
>> extern int __local_multiple_threads attribute_hidden;
>> -# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P \
>> - LDST_PCREL(ldr, ip, ip, __local_multiple_threads); \
>> - teq ip, #0
>> -# endif
>> +# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
>> # else
>> /* There is no __local_multiple_threads for librt, so use the TCB. */
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P \
>> - push {r0, lr}; \
>> - cfi_adjust_cfa_offset (8); \
>> - cfi_rel_offset (lr, 4); \
>> - GET_TLS (lr); \
>> - NEGOFF_ADJ_BASE (r0, MULTIPLE_THREADS_OFFSET); \
>> - ldr ip, NEGOFF_OFF1 (r0, MULTIPLE_THREADS_OFFSET); \
>> - pop {r0, lr}; \
>> - cfi_adjust_cfa_offset (-8); \
>> - cfi_restore (lr); \
>> - teq ip, #0
>> -# endif
>> # endif
>>
>> -#elif !defined __ASSEMBLER__
>> +#else
>>
>> /* For rtld, et cetera. */
>> # define SINGLE_THREAD_P 1
>> @@ -234,8 +47,6 @@ extern int __local_multiple_threads attribute_hidden;
>>
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> +#define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
>> index 8b7f2b2..a6189a7 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
>> @@ -23,215 +23,6 @@
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -# ifndef NO_ERROR
>> -# define NO_ERROR -0x1000
>> -# endif
>> -
>> -/* The syscall cancellation mechanism requires userspace
>> - assistance, the following code does roughly this:
>> -
>> - do arguments (read arg5 and arg6 to registers)
>> - setup frame
>> -
>> - check if there are threads, yes jump to pseudo_cancel
>> -
>> - unthreaded:
>> - syscall
>> - check syscall return (jump to pre_end)
>> - set errno
>> - set return to -1
>> - (jump to pre_end)
>> -
>> - pseudo_cancel:
>> - cenable
>> - syscall
>> - cdisable
>> - check syscall return (jump to pre_end)
>> - set errno
>> - set return to -1
>> -
>> - pre_end
>> - restore stack
>> -
>> - It is expected that 'ret' and 'END' macros will
>> - append an 'undo arguments' and 'return' to the
>> - this PSEUDO macro. */
>> -
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - ENTRY (__##syscall_name##_nocancel) \
>> - DOARGS_##args ASM_LINE_SEP \
>> - stwm TREG, 64(%sp) ASM_LINE_SEP \
>> - .cfi_def_cfa_offset -64 ASM_LINE_SEP \
>> - .cfi_offset TREG, 0 ASM_LINE_SEP \
>> - stw %sp, -4(%sp) ASM_LINE_SEP \
>> - stw %r19, -32(%sp) ASM_LINE_SEP \
>> - .cfi_offset 19, 32 ASM_LINE_SEP \
>> - /* Save r19 */ ASM_LINE_SEP \
>> - SAVE_PIC(TREG) ASM_LINE_SEP \
>> - /* Do syscall, delay loads # */ ASM_LINE_SEP \
>> - ble 0x100(%sr2,%r0) ASM_LINE_SEP \
>> - ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \
>> - ldi NO_ERROR,%r1 ASM_LINE_SEP \
>> - cmpb,>>=,n %r1,%ret0,L(pre_nc_end) ASM_LINE_SEP \
>> - /* Restore r19 from TREG */ ASM_LINE_SEP \
>> - LOAD_PIC(TREG) /* delay */ ASM_LINE_SEP \
>> - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \
>> - /* Use TREG for temp storage */ ASM_LINE_SEP \
>> - copy %ret0, TREG /* delay */ ASM_LINE_SEP \
>> - /* OPTIMIZE: Don't reload r19 */ ASM_LINE_SEP \
>> - /* do a -1*syscall_ret0 */ ASM_LINE_SEP \
>> - sub %r0, TREG, TREG ASM_LINE_SEP \
>> - /* Store into errno location */ ASM_LINE_SEP \
>> - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \
>> - /* return -1 as error */ ASM_LINE_SEP \
>> - ldi -1, %ret0 ASM_LINE_SEP \
>> -L(pre_nc_end): ASM_LINE_SEP \
>> - /* No need to LOAD_PIC */ ASM_LINE_SEP \
>> - /* Undo frame */ ASM_LINE_SEP \
>> - ldwm -64(%sp),TREG ASM_LINE_SEP \
>> - /* Restore rp before exit */ ASM_LINE_SEP \
>> - ldw -20(%sp), %rp ASM_LINE_SEP \
>> - ret ASM_LINE_SEP \
>> - END(__##syscall_name##_nocancel) ASM_LINE_SEP \
>> - /**********************************************/ASM_LINE_SEP \
>> - ENTRY (name) \
>> - DOARGS_##args ASM_LINE_SEP \
>> - stwm TREG, 64(%sp) ASM_LINE_SEP \
>> - .cfi_def_cfa_offset -64 ASM_LINE_SEP \
>> - .cfi_offset TREG, 0 ASM_LINE_SEP \
>> - stw %sp, -4(%sp) ASM_LINE_SEP \
>> - stw %r19, -32(%sp) ASM_LINE_SEP \
>> - .cfi_offset 19, 32 ASM_LINE_SEP \
>> - /* Done setting up frame, continue... */ ASM_LINE_SEP \
>> - SINGLE_THREAD_P ASM_LINE_SEP \
>> - cmpib,<>,n 0,%ret0,L(pseudo_cancel) ASM_LINE_SEP \
>> -L(unthreaded): ASM_LINE_SEP \
>> - /* Save r19 */ ASM_LINE_SEP \
>> - SAVE_PIC(TREG) ASM_LINE_SEP \
>> - /* Do syscall, delay loads # */ ASM_LINE_SEP \
>> - ble 0x100(%sr2,%r0) ASM_LINE_SEP \
>> - ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \
>> - ldi NO_ERROR,%r1 ASM_LINE_SEP \
>> - cmpb,>>=,n %r1,%ret0,L(pre_end) ASM_LINE_SEP \
>> - /* Restore r19 from TREG */ ASM_LINE_SEP \
>> - LOAD_PIC(TREG) /* delay */ ASM_LINE_SEP \
>> - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \
>> - /* Use TREG for temp storage */ ASM_LINE_SEP \
>> - copy %ret0, TREG /* delay */ ASM_LINE_SEP \
>> - /* OPTIMIZE: Don't reload r19 */ ASM_LINE_SEP \
>> - /* do a -1*syscall_ret0 */ ASM_LINE_SEP \
>> - sub %r0, TREG, TREG ASM_LINE_SEP \
>> - /* Store into errno location */ ASM_LINE_SEP \
>> - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \
>> - b L(pre_end) ASM_LINE_SEP \
>> - /* return -1 as error */ ASM_LINE_SEP \
>> - ldi -1, %ret0 /* delay */ ASM_LINE_SEP \
>> -L(pseudo_cancel): ASM_LINE_SEP \
>> - PUSHARGS_##args /* Save args */ ASM_LINE_SEP \
>> - /* Save r19 into TREG */ ASM_LINE_SEP \
>> - CENABLE /* FUNC CALL */ ASM_LINE_SEP \
>> - SAVE_PIC(TREG) /* delay */ ASM_LINE_SEP \
>> - /* restore syscall args */ ASM_LINE_SEP \
>> - POPARGS_##args ASM_LINE_SEP \
>> - /* save mask from cenable (use stub rp slot) */ ASM_LINE_SEP \
>> - stw %ret0, -24(%sp) ASM_LINE_SEP \
>> - /* ... SYSCALL ... */ ASM_LINE_SEP \
>> - ble 0x100(%sr2,%r0) ASM_LINE_SEP \
>> - ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \
>> - /* ............... */ ASM_LINE_SEP \
>> - LOAD_PIC(TREG) ASM_LINE_SEP \
>> - /* pass mask as arg0 to cdisable */ ASM_LINE_SEP \
>> - ldw -24(%sp), %r26 ASM_LINE_SEP \
>> - CDISABLE ASM_LINE_SEP \
>> - stw %ret0, -24(%sp) /* delay */ ASM_LINE_SEP \
>> - /* Restore syscall return */ ASM_LINE_SEP \
>> - ldw -24(%sp), %ret0 ASM_LINE_SEP \
>> - /* compare error */ ASM_LINE_SEP \
>> - ldi NO_ERROR,%r1 ASM_LINE_SEP \
>> - /* branch if no error */ ASM_LINE_SEP \
>> - cmpb,>>=,n %r1,%ret0,L(pre_end) ASM_LINE_SEP \
>> - LOAD_PIC(TREG) /* cond. nullify */ ASM_LINE_SEP \
>> - copy %ret0, TREG /* save syscall return */ ASM_LINE_SEP \
>> - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \
>> - /* make syscall res value positive */ ASM_LINE_SEP \
>> - sub %r0, TREG, TREG /* delay */ ASM_LINE_SEP \
>> - /* No need to LOAD_PIC */ ASM_LINE_SEP \
>> - /* store into errno location */ ASM_LINE_SEP \
>> - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \
>> - /* return -1 */ ASM_LINE_SEP \
>> - ldi -1, %ret0 ASM_LINE_SEP \
>> -L(pre_end): ASM_LINE_SEP \
>> - /* No need to LOAD_PIC */ ASM_LINE_SEP \
>> - /* Undo frame */ ASM_LINE_SEP \
>> - ldwm -64(%sp),TREG ASM_LINE_SEP \
>> - /* Restore rp before exit */ ASM_LINE_SEP \
>> - ldw -20(%sp), %rp ASM_LINE_SEP
>> -
>> -/* Save arguments into our frame */
>> -# define PUSHARGS_0 /* nothing to do */
>> -# define PUSHARGS_1 PUSHARGS_0 stw %r26, -36(%sr0,%sp) ASM_LINE_SEP \
>> - .cfi_offset 26, 28 ASM_LINE_SEP
>> -# define PUSHARGS_2 PUSHARGS_1 stw %r25, -40(%sr0,%sp) ASM_LINE_SEP \
>> - .cfi_offset 25, 24 ASM_LINE_SEP
>> -# define PUSHARGS_3 PUSHARGS_2 stw %r24, -44(%sr0,%sp) ASM_LINE_SEP \
>> - .cfi_offset 24, 20 ASM_LINE_SEP
>> -# define PUSHARGS_4 PUSHARGS_3 stw %r23, -48(%sr0,%sp) ASM_LINE_SEP \
>> - .cfi_offset 23, 16 ASM_LINE_SEP
>> -# define PUSHARGS_5 PUSHARGS_4 stw %r22, -52(%sr0,%sp) ASM_LINE_SEP \
>> - .cfi_offset 22, 12 ASM_LINE_SEP
>> -# define PUSHARGS_6 PUSHARGS_5 stw %r21, -56(%sr0,%sp) ASM_LINE_SEP \
>> - .cfi_offset 21, 8 ASM_LINE_SEP
>> -
>> -/* Bring them back from the stack */
>> -# define POPARGS_0 /* nothing to do */
>> -# define POPARGS_1 POPARGS_0 ldw -36(%sr0,%sp), %r26 ASM_LINE_SEP
>> -# define POPARGS_2 POPARGS_1 ldw -40(%sr0,%sp), %r25 ASM_LINE_SEP
>> -# define POPARGS_3 POPARGS_2 ldw -44(%sr0,%sp), %r24 ASM_LINE_SEP
>> -# define POPARGS_4 POPARGS_3 ldw -48(%sr0,%sp), %r23 ASM_LINE_SEP
>> -# define POPARGS_5 POPARGS_4 ldw -52(%sr0,%sp), %r22 ASM_LINE_SEP
>> -# define POPARGS_6 POPARGS_5 ldw -56(%sr0,%sp), %r21 ASM_LINE_SEP
>> -
>> -# if IS_IN (libpthread)
>> -# ifdef PIC
>> -# define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \
>> - bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP
>> -# define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \
>> - bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP
>> -# else
>> -# define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \
>> - bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP
>> -# define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \
>> - bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP
>> -# endif
>> -# elif IS_IN (libc)
>> -# ifdef PIC
>> -# define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \
>> - bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP
>> -# define CDISABLE .import __libc_disable_asynccancel,code ASM_LINE_SEP \
>> - bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP
>> -# else
>> -# define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \
>> - bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP
>> -# define CDISABLE .import __libc_disable_asynccancel,code ASM_LINE_SEP \
>> - bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP
>> -# endif
>> -# elif IS_IN (librt)
>> -# ifdef PIC
>> -# define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \
>> - bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP
>> -# define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \
>> - bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP
>> -# else
>> -# define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \
>> - bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP
>> -# define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \
>> - bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP
>> -# endif
>> -# else
>> -# error Unsupported library
>> -# endif
>> -
>> # if IS_IN (libpthread)
>> # define __local_multiple_threads __pthread_multiple_threads
>> # elif IS_IN (libc)
>> @@ -242,17 +33,11 @@ L(pre_end): ASM_LINE_SEP \
>> # error Unsupported library
>> # endif
>>
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -# else
>> -/* Read the value of header.multiple_threads from the thread pointer */
>> -# define SINGLE_THREAD_P \
>> - mfctl %cr27, %ret0 ASM_LINE_SEP \
>> - ldw MULTIPLE_THREADS_THREAD_OFFSET(%sr0,%ret0),%ret0 ASM_LINE_SEP
>> -# endif
>> -#elif !defined __ASSEMBLER__
>> +
>> +#else
>>
>> /* This code should never be used but we define it anyhow. */
>> # define SINGLE_THREAD_P (1)
>> @@ -261,8 +46,6 @@ L(pre_end): ASM_LINE_SEP \
>> #endif
>> /* IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) */
>>
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> +#define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
>> index ebf6019..34e2b6f 100644
>> --- a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
>> @@ -24,130 +24,17 @@
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .text; \
>> - ENTRY (name) \
>> - cmpl $0, %gs:MULTIPLE_THREADS_OFFSET; \
>> - jne L(pseudo_cancel); \
>> - .type __##syscall_name##_nocancel,@function; \
>> - .globl __##syscall_name##_nocancel; \
>> - __##syscall_name##_nocancel: \
>> - DO_CALL (syscall_name, args); \
>> - cmpl $-4095, %eax; \
>> - jae SYSCALL_ERROR_LABEL; \
>> - ret; \
>> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
>> - L(pseudo_cancel): \
>> - CENABLE \
>> - SAVE_OLDTYPE_##args \
>> - PUSHCARGS_##args \
>> - DOCARGS_##args \
>> - movl $SYS_ify (syscall_name), %eax; \
>> - ENTER_KERNEL; \
>> - POPCARGS_##args; \
>> - POPSTATE_##args \
>> - cmpl $-4095, %eax; \
>> - jae SYSCALL_ERROR_LABEL
>> -
>> -# define SAVE_OLDTYPE_0 movl %eax, %ecx;
>> -# define SAVE_OLDTYPE_1 SAVE_OLDTYPE_0
>> -# define SAVE_OLDTYPE_2 pushl %eax; cfi_adjust_cfa_offset (4);
>> -# define SAVE_OLDTYPE_3 SAVE_OLDTYPE_2
>> -# define SAVE_OLDTYPE_4 SAVE_OLDTYPE_2
>> -# define SAVE_OLDTYPE_5 SAVE_OLDTYPE_2
>> -# define SAVE_OLDTYPE_6 SAVE_OLDTYPE_2
>> -
>> -# define PUSHCARGS_0 /* No arguments to push. */
>> -# define DOCARGS_0 /* No arguments to frob. */
>> -# define POPCARGS_0 /* No arguments to pop. */
>> -# define _PUSHCARGS_0 /* No arguments to push. */
>> -# define _POPCARGS_0 /* No arguments to pop. */
>> -
>> -# define PUSHCARGS_1 movl %ebx, %edx; cfi_register (ebx, edx); PUSHCARGS_0
>> -# define DOCARGS_1 _DOARGS_1 (4)
>> -# define POPCARGS_1 POPCARGS_0; movl %edx, %ebx; cfi_restore (ebx);
>> -# define _PUSHCARGS_1 pushl %ebx; cfi_adjust_cfa_offset (4); \
>> - cfi_rel_offset (ebx, 0); _PUSHCARGS_0
>> -# define _POPCARGS_1 _POPCARGS_0; popl %ebx; \
>> - cfi_adjust_cfa_offset (-4); cfi_restore (ebx);
>> -
>> -# define PUSHCARGS_2 PUSHCARGS_1
>> -# define DOCARGS_2 _DOARGS_2 (12)
>> -# define POPCARGS_2 POPCARGS_1
>> -# define _PUSHCARGS_2 _PUSHCARGS_1
>> -# define _POPCARGS_2 _POPCARGS_1
>> -
>> -# define PUSHCARGS_3 _PUSHCARGS_2
>> -# define DOCARGS_3 _DOARGS_3 (20)
>> -# define POPCARGS_3 _POPCARGS_3
>> -# define _PUSHCARGS_3 _PUSHCARGS_2
>> -# define _POPCARGS_3 _POPCARGS_2
>> -
>> -# define PUSHCARGS_4 _PUSHCARGS_4
>> -# define DOCARGS_4 _DOARGS_4 (28)
>> -# define POPCARGS_4 _POPCARGS_4
>> -# define _PUSHCARGS_4 pushl %esi; cfi_adjust_cfa_offset (4); \
>> - cfi_rel_offset (esi, 0); _PUSHCARGS_3
>> -# define _POPCARGS_4 _POPCARGS_3; popl %esi; \
>> - cfi_adjust_cfa_offset (-4); cfi_restore (esi);
>> -
>> -# define PUSHCARGS_5 _PUSHCARGS_5
>> -# define DOCARGS_5 _DOARGS_5 (36)
>> -# define POPCARGS_5 _POPCARGS_5
>> -# define _PUSHCARGS_5 pushl %edi; cfi_adjust_cfa_offset (4); \
>> - cfi_rel_offset (edi, 0); _PUSHCARGS_4
>> -# define _POPCARGS_5 _POPCARGS_4; popl %edi; \
>> - cfi_adjust_cfa_offset (-4); cfi_restore (edi);
>> -
>> -# define PUSHCARGS_6 _PUSHCARGS_6
>> -# define DOCARGS_6 _DOARGS_6 (44)
>> -# define POPCARGS_6 _POPCARGS_6
>> -# define _PUSHCARGS_6 pushl %ebp; cfi_adjust_cfa_offset (4); \
>> - cfi_rel_offset (ebp, 0); _PUSHCARGS_5
>> -# define _POPCARGS_6 _POPCARGS_5; popl %ebp; \
>> - cfi_adjust_cfa_offset (-4); cfi_restore (ebp);
>> -
>> -# if IS_IN (libpthread)
>> -# define CENABLE call __pthread_enable_asynccancel;
>> -# define CDISABLE call __pthread_disable_asynccancel
>> -# elif IS_IN (libc)
>> -# define CENABLE call __libc_enable_asynccancel;
>> -# define CDISABLE call __libc_disable_asynccancel
>> -# elif IS_IN (librt)
>> -# define CENABLE call __librt_enable_asynccancel;
>> -# define CDISABLE call __librt_disable_asynccancel
>> -# else
>> -# error Unsupported library
>> -# endif
>> -# define POPSTATE_0 \
>> - pushl %eax; cfi_adjust_cfa_offset (4); movl %ecx, %eax; \
>> - CDISABLE; popl %eax; cfi_adjust_cfa_offset (-4);
>> -# define POPSTATE_1 POPSTATE_0
>> -# define POPSTATE_2 xchgl (%esp), %eax; CDISABLE; popl %eax; \
>> - cfi_adjust_cfa_offset (-4);
>> -# define POPSTATE_3 POPSTATE_2
>> -# define POPSTATE_4 POPSTATE_3
>> -# define POPSTATE_5 POPSTATE_4
>> -# define POPSTATE_6 POPSTATE_5
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P cmpl $0, %gs:MULTIPLE_THREADS_OFFSET
>> -# endif
>>
>> -#elif !defined __ASSEMBLER__
>> +#else
>>
>> # define SINGLE_THREAD_P (1)
>> # define NO_CANCELLATION 1
>>
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> +#define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
>> index 7c7f619..96d04de 100644
>> --- a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
>> @@ -23,201 +23,13 @@
>> #endif
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>> -
>> -# undef PSEUDO
>> -
>> -# if IS_IN (libc)
>> -# define SYSDEP_CANCEL_ERRNO __libc_errno
>> -# else
>> -# define SYSDEP_CANCEL_ERRNO errno
>> -# endif
>> -# define SYSDEP_CANCEL_ERROR(args) \
>> -.section .gnu.linkonce.t.__syscall_error_##args, "ax"; \
>> - .align 32; \
>> - .proc __syscall_error_##args; \
>> - .global __syscall_error_##args; \
>> - .hidden __syscall_error_##args; \
>> - .size __syscall_error_##args, 64; \
>> -__syscall_error_##args: \
>> - .prologue; \
>> - .regstk args, 5, args, 0; \
>> - .save ar.pfs, loc0; \
>> - .save rp, loc1; \
>> - .body; \
>> - addl loc4 = @ltoff(@tprel(SYSDEP_CANCEL_ERRNO)), gp;; \
>> - ld8 loc4 = [loc4]; \
>> - mov rp = loc1;; \
>> - mov r8 = -1; \
>> - add loc4 = loc4, r13;; \
>> - st4 [loc4] = loc3; \
>> - mov ar.pfs = loc0
>> -
>> -# ifndef USE_DL_SYSINFO
>> -
>> -# define PSEUDO(name, syscall_name, args) \
>> -.text; \
>> -ENTRY (name) \
>> - adds r14 = MULTIPLE_THREADS_OFFSET, r13;; \
>> - ld4 r14 = [r14]; \
>> - mov r15 = SYS_ify(syscall_name);; \
>> - cmp4.ne p6, p7 = 0, r14; \
>> -(p6) br.cond.spnt .Lpseudo_cancel;; \
>> - break __BREAK_SYSCALL;; \
>> - cmp.eq p6,p0=-1,r10; \
>> -(p6) br.cond.spnt.few __syscall_error; \
>> - ret;; \
>> - .endp name; \
>> - .proc __GC_##name; \
>> - .globl __GC_##name; \
>> - .hidden __GC_##name; \
>> -__GC_##name: \
>> -.Lpseudo_cancel: \
>> - .prologue; \
>> - .regstk args, 5, args, 0; \
>> - .save ar.pfs, loc0; \
>> - alloc loc0 = ar.pfs, args, 5, args, 0; \
>> - .save rp, loc1; \
>> - mov loc1 = rp;; \
>> - .body; \
>> - CENABLE;; \
>> - mov loc2 = r8; \
>> - COPY_ARGS_##args \
>> - mov r15 = SYS_ify(syscall_name); \
>> - break __BREAK_SYSCALL;; \
>> - mov loc3 = r8; \
>> - mov loc4 = r10; \
>> - mov out0 = loc2; \
>> - CDISABLE;; \
>> - cmp.eq p6,p0=-1,loc4; \
>> -(p6) br.cond.spnt.few __syscall_error_##args; \
>> - mov r8 = loc3; \
>> - mov rp = loc1; \
>> - mov ar.pfs = loc0; \
>> -.Lpseudo_end: \
>> - ret; \
>> - .endp __GC_##name; \
>> - SYSDEP_CANCEL_ERROR(args)
>> -
>> -# else /* USE_DL_SYSINFO */
>> -
>> -# define PSEUDO(name, syscall_name, args) \
>> -.text; \
>> -ENTRY (name) \
>> - .prologue; \
>> - adds r2 = SYSINFO_OFFSET, r13; \
>> - adds r14 = MULTIPLE_THREADS_OFFSET, r13; \
>> - .save ar.pfs, r11; \
>> - mov r11 = ar.pfs;; \
>> - .body; \
>> - ld4 r14 = [r14]; \
>> - ld8 r2 = [r2]; \
>> - mov r15 = SYS_ify(syscall_name);; \
>> - cmp4.ne p6, p7 = 0, r14; \
>> - mov b7 = r2; \
>> -(p6) br.cond.spnt .Lpseudo_cancel; \
>> - br.call.sptk.many b6 = b7;; \
>> - mov ar.pfs = r11; \
>> - cmp.eq p6,p0 = -1, r10; \
>> -(p6) br.cond.spnt.few __syscall_error; \
>> - ret;; \
>> - .endp name; \
>> - \
>> - .proc __##syscall_name##_nocancel; \
>> - .globl __##syscall_name##_nocancel; \
>> -__##syscall_name##_nocancel: \
>> - .prologue; \
>> - adds r2 = SYSINFO_OFFSET, r13; \
>> - .save ar.pfs, r11; \
>> - mov r11 = ar.pfs;; \
>> - .body; \
>> - ld8 r2 = [r2]; \
>> - mov r15 = SYS_ify(syscall_name);; \
>> - mov b7 = r2; \
>> - br.call.sptk.many b6 = b7;; \
>> - mov ar.pfs = r11; \
>> - cmp.eq p6,p0 = -1, r10; \
>> -(p6) br.cond.spnt.few __syscall_error; \
>> - ret;; \
>> - .endp __##syscall_name##_nocancel; \
>> - \
>> - .proc __GC_##name; \
>> - .globl __GC_##name; \
>> - .hidden __GC_##name; \
>> -__GC_##name: \
>> -.Lpseudo_cancel: \
>> - .prologue; \
>> - .regstk args, 5, args, 0; \
>> - .save ar.pfs, loc0; \
>> - alloc loc0 = ar.pfs, args, 5, args, 0; \
>> - adds loc4 = SYSINFO_OFFSET, r13; \
>> - .save rp, loc1; \
>> - mov loc1 = rp;; \
>> - .body; \
>> - ld8 loc4 = [loc4]; \
>> - CENABLE;; \
>> - mov loc2 = r8; \
>> - mov b7 = loc4; \
>> - COPY_ARGS_##args \
>> - mov r15 = SYS_ify(syscall_name); \
>> - br.call.sptk.many b6 = b7;; \
>> - mov loc3 = r8; \
>> - mov loc4 = r10; \
>> - mov out0 = loc2; \
>> - CDISABLE;; \
>> - cmp.eq p6,p0=-1,loc4; \
>> -(p6) br.cond.spnt.few __syscall_error_##args; \
>> - mov r8 = loc3; \
>> - mov rp = loc1; \
>> - mov ar.pfs = loc0; \
>> -.Lpseudo_end: \
>> - ret; \
>> - .endp __GC_##name; \
>> - SYSDEP_CANCEL_ERROR(args)
>> -
>> -# endif /* USE_DL_SYSINFO */
>> -
>> -# undef PSEUDO_END
>> -# define PSEUDO_END(name) .endp
>> -
>> -# if IS_IN (libpthread)
>> -# define CENABLE br.call.sptk.many b0 = __pthread_enable_asynccancel
>> -# define CDISABLE br.call.sptk.many b0 = __pthread_disable_asynccancel
>> -# elif IS_IN (libc)
>> -# define CENABLE br.call.sptk.many b0 = __libc_enable_asynccancel
>> -# define CDISABLE br.call.sptk.many b0 = __libc_disable_asynccancel
>> -# elif IS_IN (librt)
>> -# define CENABLE br.call.sptk.many b0 = __librt_enable_asynccancel
>> -# define CDISABLE br.call.sptk.many b0 = __librt_disable_asynccancel
>> -# else
>> -# error Unsupported library
>> -# endif
>> -
>> -# define COPY_ARGS_0 /* Nothing */
>> -# define COPY_ARGS_1 COPY_ARGS_0 mov out0 = in0;
>> -# define COPY_ARGS_2 COPY_ARGS_1 mov out1 = in1;
>> -# define COPY_ARGS_3 COPY_ARGS_2 mov out2 = in2;
>> -# define COPY_ARGS_4 COPY_ARGS_3 mov out3 = in3;
>> -# define COPY_ARGS_5 COPY_ARGS_4 mov out4 = in4;
>> -# define COPY_ARGS_6 COPY_ARGS_5 mov out5 = in5;
>> -# define COPY_ARGS_7 COPY_ARGS_6 mov out6 = in6;
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P \
>> - adds r14 = MULTIPLE_THREADS_OFFSET, r13 ;; ld4 r14 = [r14] ;; cmp4.ne p6, p7 = 0, r14
>> -# endif
>> -
>> -#elif !defined __ASSEMBLER__
>> -
>> +#else
>> # define SINGLE_THREAD_P (1)
>> # define NO_CANCELLATION 1
>> -
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> +#define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
>> index 9bc9e13..1603c5f 100644
>> --- a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
>> @@ -18,121 +18,21 @@
>>
>> #include <sysdep.h>
>> #include <tls.h>
>> -#ifndef __ASSEMBLER__
>> -# include <nptl/pthreadP.h>
>> -#endif
>> +#include <nptl/pthreadP.h>
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .text; \
>> - ENTRY (name) \
>> - SINGLE_THREAD_P; \
>> - jne .Lpseudo_cancel; \
>> - .type __##syscall_name##_nocancel,@function; \
>> - .globl __##syscall_name##_nocancel; \
>> - __##syscall_name##_nocancel: \
>> - DO_CALL (syscall_name, args); \
>> - cmp.l &-4095, %d0; \
>> - jcc SYSCALL_ERROR_LABEL; \
>> - rts; \
>> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
>> - .Lpseudo_cancel: \
>> - CENABLE; \
>> - DOCARGS_##args \
>> - move.l %d0, -(%sp); /* Save result of CENABLE. */ \
>> - cfi_adjust_cfa_offset (4); \
>> - move.l &SYS_ify (syscall_name), %d0; \
>> - trap &0; \
>> - move.l %d0, %d2; \
>> - CDISABLE; \
>> - addq.l &4, %sp; /* Remove result of CENABLE from the stack. */ \
>> - cfi_adjust_cfa_offset (-4); \
>> - move.l %d2, %d0; \
>> - UNDOCARGS_##args \
>> - cmp.l &-4095, %d0; \
>> - jcc SYSCALL_ERROR_LABEL
>> -
>> -/* Note: we use D2 to save syscall's return value as D0 will be clobbered in
>> - CDISABLE. */
>> -# define DOCARGS_0 move.l %d2, -(%sp); \
>> - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d2, 0);
>> -# define UNDOCARGS_0 move.l (%sp)+, %d2; \
>> - cfi_adjust_cfa_offset (-4); cfi_restore (%d2);
>> -
>> -# define DOCARGS_1 _DOCARGS_1 (4); DOCARGS_0
>> -# define _DOCARGS_1(n) move.l n(%sp), %d1;
>> -# define UNDOCARGS_1 UNDOCARGS_0
>> -
>> -# define DOCARGS_2 _DOCARGS_2 (8)
>> -# define _DOCARGS_2(n) DOCARGS_0 move.l n+4(%sp), %d2; _DOCARGS_1 (n)
>> -# define UNDOCARGS_2 UNDOCARGS_0
>> -
>> -# define DOCARGS_3 _DOCARGS_3 (12)
>> -# define _DOCARGS_3(n) move.l %d3, -(%sp); \
>> - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d3, 0); \
>> - move.l n+4(%sp), %d3; _DOCARGS_2 (n)
>> -# define UNDOCARGS_3 UNDOCARGS_2 move.l (%sp)+, %d3; \
>> - cfi_adjust_cfa_offset (-4); cfi_restore (%d3);
>> -
>> -# define DOCARGS_4 _DOCARGS_4 (16)
>> -# define _DOCARGS_4(n) move.l %d4, -(%sp); \
>> - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d4, 0); \
>> - move.l n+4(%sp), %d4; _DOCARGS_3 (n)
>> -# define UNDOCARGS_4 UNDOCARGS_3 move.l (%sp)+, %d4; \
>> - cfi_adjust_cfa_offset (-4); cfi_restore (%d4);
>> -
>> -# define DOCARGS_5 _DOCARGS_5 (20)
>> -# define _DOCARGS_5(n) move.l %d5, -(%sp); \
>> - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d5, 0); \
>> - move.l n+4(%sp), %d5; _DOCARGS_4 (n)
>> -# define UNDOCARGS_5 UNDOCARGS_4 move.l (%sp)+, %d5; \
>> - cfi_adjust_cfa_offset (-4); cfi_restore (%d5);
>> -
>> -# define DOCARGS_6 _DOCARGS_6 (24)
>> -# define _DOCARGS_6(n) move.l n(%sp), %a0; _DOCARGS_5 (n-4)
>> -# define UNDOCARGS_6 UNDOCARGS_5
>> -
>> -# ifdef PIC
>> -# define PSEUDO_JMP(sym) jbsr sym ## @PLTPC
>> -# else
>> -# define PSEUDO_JMP(sym) jbsr sym
>> -# endif
>> -
>> -# if IS_IN (libpthread)
>> -# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
>> -# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel)
>> -# elif IS_IN (libc)
>> -# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
>> -# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel)
>> -# elif IS_IN (librt)
>> -# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
>> -# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel)
>> -# else
>> -# error Unsupported library
>> -# endif
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P \
>> - PSEUDO_JMP (__m68k_read_tp); \
>> - tst.l MULTIPLE_THREADS_OFFSET(%a0)
>> -# endif
>> -
>> -#elif !defined __ASSEMBLER__
>> +#else
>>
>> # define SINGLE_THREAD_P (1)
>> # define NO_CANCELLATION (1)
>>
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> +#define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, \
>> 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
>> index dbcc2b2..7fe030b 100644
>> --- a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
>> @@ -23,136 +23,28 @@
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -# if !IS_IN (librt) || !defined(PIC)
>> -# define AC_STACK_SIZE 16 /* space for r15, async_cancel arg and 2 temp words */
>> -# define AC_SET_GOT /* empty */
>> -# define AC_RESTORE_GOT /* empty */
>> -# else
>> -# define AC_STACK_SIZE 20 /* extra 4 bytes for r20 */
>> -# define AC_SET_GOT \
>> - swi r20, r1, AC_STACK_SIZE-4; \
>> - mfs r20, rpc; \
>> - addik r20, r20, _GLOBAL_OFFSET_TABLE_+8;
>> -# define AC_RESTORE_GOT \
>> - lwi r20, r1, AC_STACK_SIZE-4;
>> -# endif
>> -
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .text; \
>> - ENTRY (name) \
>> - SINGLE_THREAD_P(r12); \
>> - bnei r12, L(pseudo_cancel); \
>> - .globl __##syscall_name##_nocancel; \
>> - .type __##syscall_name##_nocancel,@function; \
>> -__##syscall_name##_nocancel: \
>> - DO_CALL (syscall_name, args); \
>> - addik r4, r0, -4095; \
>> - cmpu r4, r4, r3; \
>> - bgei r4, SYSCALL_ERROR_LABEL; \
>> - rtsd r15, 8; \
>> - nop; \
>> - .size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \
>> -L(pseudo_cancel): \
>> - addik r1, r1, -AC_STACK_SIZE; \
>> - swi r15, r1, 0; \
>> - AC_SET_GOT \
>> - DOCARGS_##args \
>> - CENABLE; \
>> - swi r3, r1, 8; \
>> - UNDOCARGS_##args \
>> - DO_CALL (syscall_name, args); \
>> - swi r3, r1, 12; \
>> - lwi r5, r1, 8; \
>> - CDISABLE; \
>> - lwi r3, r1, 12; \
>> - lwi r15, r1, 0; \
>> - AC_RESTORE_GOT \
>> - addik r1, r1, AC_STACK_SIZE; \
>> - addik r4, r0, -4095; \
>> - cmpu r4, r4, r3; \
>> - bgei r4, SYSCALL_ERROR_LABEL; \
>> - rtsd r15, 8; \
>> - nop;
>> -
>> -/*
>> - * Macros to save/restore syscall arguments across CENABLE
>> - * The arguments are saved into the caller's stack (original r1 + 4)
>> - */
>> -
>> -# define DOCARGS_0
>> -# define DOCARGS_1 swi r5, r1, AC_STACK_SIZE + 4;
>> -# define DOCARGS_2 swi r6, r1, AC_STACK_SIZE + 8; DOCARGS_1
>> -# define DOCARGS_3 swi r7, r1, AC_STACK_SIZE + 12; DOCARGS_2
>> -# define DOCARGS_4 swi r8, r1, AC_STACK_SIZE + 16; DOCARGS_3
>> -# define DOCARGS_5 swi r9, r1, AC_STACK_SIZE + 20; DOCARGS_4
>> -# define DOCARGS_6 swi r10, r1, AC_STACK_SIZE + 24; DOCARGS_5
>> -
>> -# define UNDOCARGS_0
>> -# define UNDOCARGS_1 lwi r5, r1, AC_STACK_SIZE + 4;
>> -# define UNDOCARGS_2 UNDOCARGS_1 lwi r6, r1, AC_STACK_SIZE + 8;
>> -# define UNDOCARGS_3 UNDOCARGS_2 lwi r7, r1, AC_STACK_SIZE + 12;
>> -# define UNDOCARGS_4 UNDOCARGS_3 lwi r8, r1, AC_STACK_SIZE + 16;
>> -# define UNDOCARGS_5 UNDOCARGS_4 lwi r9, r1, AC_STACK_SIZE + 20;
>> -# define UNDOCARGS_6 UNDOCARGS_5 lwi r10, r1, AC_STACK_SIZE + 24;
>> -
>> -# ifdef PIC
>> -# define PSEUDO_JMP(sym) brlid r15, sym##@PLTPC; addk r0, r0, r0
>> -# else
>> -# define PSEUDO_JMP(sym) brlid r15, sym; addk r0, r0, r0
>> -# endif
>> -
>> # if IS_IN (libpthread)
>> -# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
>> -# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel)
>> # define __local_multiple_threads __pthread_multiple_threads
>> # elif IS_IN (libc)
>> -# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
>> -# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel)
>> # define __local_multiple_threads __libc_multiple_threads
>> -# elif IS_IN (librt)
>> -# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
>> -# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel)
>> -# else
>> -# error Unsupported library
>> # endif
>>
>> -
>> # if IS_IN (libpthread) || IS_IN (libc)
>> -# ifndef __ASSEMBLER__
>> extern int __local_multiple_threads attribute_hidden;
>> -# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
>> -# else
>> -# if !defined PIC
>> -# define SINGLE_THREAD_P(reg) lwi reg, r0, __local_multiple_threads;
>> -# else
>> -# define SINGLE_THREAD_P(reg) \
>> - mfs reg, rpc; \
>> - addik reg, reg, _GLOBAL_OFFSET_TABLE_+8; \
>> - lwi reg, reg, __local_multiple_threads@GOT; \
>> - lwi reg, reg, 0;
>> -# endif
>> -# endif
>> +# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
>> # else
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P(reg) \
>> - lwi reg, r0, MULTIPLE_THREADS_OFFSET(reg)
>> -# endif
>> # endif
>>
>> -#elif !defined __ASSEMBLER__
>> +#else
>>
>> # define SINGLE_THREAD_P (1)
>> # define NO_CANCELLATION (1)
>>
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> +#define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
>> deleted file mode 100644
>> index 0ed3e3d..0000000
>> --- a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
>> +++ /dev/null
>> @@ -1,249 +0,0 @@
>> -/* Copyright (C) 2003-2017 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 <sysdep.h>
>> -#include <sysdeps/generic/sysdep.h>
>> -#include <tls.h>
>> -#ifndef __ASSEMBLER__
>> -# include <nptl/pthreadP.h>
>> -#endif
>> -#include <sys/asm.h>
>> -
>> -/* Gas will put the initial save of $gp into the CIE, because it appears to
>> - happen before any instructions. So we use cfi_same_value instead of
>> - cfi_restore. */
>> -
>> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>> -
>> -#ifdef __PIC__
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .align 2; \
>> - L(pseudo_start): \
>> - cfi_startproc; \
>> - cfi_adjust_cfa_offset (STKSPACE); \
>> - cfi_rel_offset (gp, STKOFF_GP); \
>> - 99: PTR_LA t9,__syscall_error; \
>> - /* manual cpreturn */ \
>> - REG_L gp, STKOFF_GP(sp); \
>> - cfi_same_value (gp); \
>> - RESTORESTK; \
>> - jr t9; \
>> - .type __##syscall_name##_nocancel, @function; \
>> - .globl __##syscall_name##_nocancel; \
>> - __##syscall_name##_nocancel: \
>> - SAVESTK; \
>> - .cpsetup t9, STKOFF_GP, __##syscall_name##_nocancel; \
>> - cfi_rel_offset (gp, STKOFF_GP); \
>> - li v0, SYS_ify(syscall_name); \
>> - syscall; \
>> - bne a3, zero, SYSCALL_ERROR_LABEL; \
>> - /* manual cpreturn */ \
>> - REG_L gp, STKOFF_GP(sp); \
>> - cfi_same_value (gp); \
>> - RESTORESTK; \
>> - ret; \
>> - cfi_endproc; \
>> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
>> - ENTRY (name) \
>> - SAVESTK; \
>> - .cpsetup t9, STKOFF_GP, name; \
>> - cfi_rel_offset (gp, STKOFF_GP); \
>> - SINGLE_THREAD_P(v1); \
>> - bne zero, v1, L(pseudo_cancel); \
>> - .set noreorder; \
>> - li v0, SYS_ify(syscall_name); \
>> - syscall; \
>> - .set reorder; \
>> - bne a3, zero, SYSCALL_ERROR_LABEL; \
>> - /* manual cpreturn */ \
>> - REG_L gp, STKOFF_GP(sp); \
>> - cfi_same_value (gp); \
>> - RESTORESTK; \
>> - ret; \
>> - L(pseudo_cancel): \
>> - cfi_adjust_cfa_offset (STKSPACE); \
>> - cfi_rel_offset (gp, STKOFF_GP); \
>> - REG_S ra, STKOFF_RA(sp); \
>> - cfi_rel_offset (ra, STKOFF_RA); \
>> - PUSHARGS_##args; /* save syscall args */ \
>> - CENABLE; \
>> - REG_S v0, STKOFF_SVMSK(sp); /* save mask */ \
>> - POPARGS_##args; /* restore syscall args */ \
>> - .set noreorder; \
>> - li v0, SYS_ify (syscall_name); \
>> - syscall; \
>> - .set reorder; \
>> - REG_S v0, STKOFF_SC_V0(sp); /* save syscall result */ \
>> - REG_S a3, STKOFF_SC_ERR(sp); /* save syscall error flag */ \
>> - REG_L a0, STKOFF_SVMSK(sp); /* pass mask as arg1 */ \
>> - CDISABLE; \
>> - REG_L a3, STKOFF_SC_ERR(sp); /* restore syscall error flag */ \
>> - REG_L ra, STKOFF_RA(sp); /* restore return address */ \
>> - REG_L v0, STKOFF_SC_V0(sp); /* restore syscall result */ \
>> - bne a3, zero, SYSCALL_ERROR_LABEL; \
>> - /* manual cpreturn */ \
>> - REG_L gp, STKOFF_GP(sp); \
>> - cfi_same_value (gp); \
>> - RESTORESTK; \
>> - L(pseudo_end):
>> -#else
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .align 2; \
>> - L(pseudo_start): \
>> - cfi_startproc; \
>> - cfi_adjust_cfa_offset (STKSPACE); \
>> - 99: RESTORESTK; \
>> - j __syscall_error; \
>> - .type __##syscall_name##_nocancel, @function; \
>> - .globl __##syscall_name##_nocancel; \
>> - __##syscall_name##_nocancel: \
>> - SAVESTK; \
>> - li v0, SYS_ify(syscall_name); \
>> - syscall; \
>> - bne a3, zero, SYSCALL_ERROR_LABEL; \
>> - RESTORESTK; \
>> - ret; \
>> - cfi_endproc; \
>> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
>> - ENTRY (name) \
>> - SAVESTK; \
>> - SINGLE_THREAD_P(v1); \
>> - bne zero, v1, L(pseudo_cancel); \
>> - .set noreorder; \
>> - li v0, SYS_ify(syscall_name); \
>> - syscall; \
>> - .set reorder; \
>> - bne a3, zero, SYSCALL_ERROR_LABEL; \
>> - RESTORESTK; \
>> - ret; \
>> - L(pseudo_cancel): \
>> - cfi_adjust_cfa_offset (STKSPACE); \
>> - REG_S ra, STKOFF_RA(sp); \
>> - cfi_rel_offset (ra, STKOFF_RA); \
>> - PUSHARGS_##args; /* save syscall args */ \
>> - CENABLE; \
>> - REG_S v0, STKOFF_SVMSK(sp); /* save mask */ \
>> - POPARGS_##args; /* restore syscall args */ \
>> - .set noreorder; \
>> - li v0, SYS_ify (syscall_name); \
>> - syscall; \
>> - .set reorder; \
>> - REG_S v0, STKOFF_SC_V0(sp); /* save syscall result */ \
>> - REG_S a3, STKOFF_SC_ERR(sp); /* save syscall error flag */ \
>> - REG_L a0, STKOFF_SVMSK(sp); /* pass mask as arg1 */ \
>> - CDISABLE; \
>> - REG_L a3, STKOFF_SC_ERR(sp); /* restore syscall error flag */ \
>> - REG_L ra, STKOFF_RA(sp); /* restore return address */ \
>> - REG_L v0, STKOFF_SC_V0(sp); /* restore syscall result */ \
>> - bne a3, zero, SYSCALL_ERROR_LABEL; \
>> - RESTORESTK; \
>> - L(pseudo_end):
>> -#endif
>> -
>> -# undef PSEUDO_END
>> -# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym
>> -
>> -# define PUSHARGS_0 /* nothing to do */
>> -# define PUSHARGS_1 PUSHARGS_0 REG_S a0, STKOFF_A0(sp); cfi_rel_offset (a0, STKOFF_A0);
>> -# define PUSHARGS_2 PUSHARGS_1 REG_S a1, STKOFF_A1(sp); cfi_rel_offset (a1, STKOFF_A1);
>> -# define PUSHARGS_3 PUSHARGS_2 REG_S a2, STKOFF_A2(sp); cfi_rel_offset (a2, STKOFF_A2);
>> -# define PUSHARGS_4 PUSHARGS_3 REG_S a3, STKOFF_A3(sp); cfi_rel_offset (a3, STKOFF_A3);
>> -# define PUSHARGS_5 PUSHARGS_4 REG_S a4, STKOFF_A4(sp); cfi_rel_offset (a3, STKOFF_A4);
>> -# define PUSHARGS_6 PUSHARGS_5 REG_S a5, STKOFF_A5(sp); cfi_rel_offset (a3, STKOFF_A5);
>> -
>> -# define POPARGS_0 /* nothing to do */
>> -# define POPARGS_1 POPARGS_0 REG_L a0, STKOFF_A0(sp);
>> -# define POPARGS_2 POPARGS_1 REG_L a1, STKOFF_A1(sp);
>> -# define POPARGS_3 POPARGS_2 REG_L a2, STKOFF_A2(sp);
>> -# define POPARGS_4 POPARGS_3 REG_L a3, STKOFF_A3(sp);
>> -# define POPARGS_5 POPARGS_4 REG_L a4, STKOFF_A4(sp);
>> -# define POPARGS_6 POPARGS_5 REG_L a5, STKOFF_A5(sp);
>> -
>> -/* Save an even number of slots. Should be 0 if an even number of slots
>> - are used below, or SZREG if an odd number are used. */
>> -# ifdef __PIC__
>> -# define STK_PAD SZREG
>> -# else
>> -# define STK_PAD 0
>> -# endif
>> -
>> -/* Place values that we are more likely to use later in this sequence, i.e.
>> - closer to the SP at function entry. If you do that, the are more
>> - likely to already be in your d-cache. */
>> -# define STKOFF_A5 (STK_PAD)
>> -# define STKOFF_A4 (STKOFF_A5 + SZREG)
>> -# define STKOFF_A3 (STKOFF_A4 + SZREG)
>> -# define STKOFF_A2 (STKOFF_A3 + SZREG) /* MT and more args. */
>> -# define STKOFF_A1 (STKOFF_A2 + SZREG) /* MT and 2 args. */
>> -# define STKOFF_A0 (STKOFF_A1 + SZREG) /* MT and 1 arg. */
>> -# define STKOFF_RA (STKOFF_A0 + SZREG) /* Used if MT. */
>> -# define STKOFF_SC_V0 (STKOFF_RA + SZREG) /* Used if MT. */
>> -# define STKOFF_SC_ERR (STKOFF_SC_V0 + SZREG) /* Used if MT. */
>> -# define STKOFF_SVMSK (STKOFF_SC_ERR + SZREG) /* Used if MT. */
>> -
>> -# ifdef __PIC__
>> -# define STKOFF_GP (STKOFF_SVMSK + SZREG) /* Always used. */
>> -# define STKSPACE (STKOFF_GP + SZREG)
>> -# else
>> -# define STKSPACE (STKOFF_SVMSK + SZREG)
>> -# endif
>> -
>> -# define SAVESTK PTR_SUBU sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE)
>> -# define RESTORESTK PTR_ADDU sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE)
>> -
>> -# ifdef __PIC__
>> -# define PSEUDO_JMP(sym) PTR_LA t9, sym; jalr t9
>> -# else
>> -# define PSEUDO_JMP(sym) jal sym
>> -# endif
>> -
>> -# if IS_IN (libpthread)
>> -# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
>> -# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel)
>> -# elif IS_IN (librt)
>> -# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
>> -# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel)
>> -# else
>> -# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
>> -# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel)
>> -# endif
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> - header.multiple_threads) \
>> - == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P(reg) \
>> - READ_THREAD_POINTER(reg); \
>> - lw reg, MULTIPLE_THREADS_OFFSET(reg)
>> -#endif
>> -
>> -#elif !defined __ASSEMBLER__
>> -
>> -# define SINGLE_THREAD_P 1
>> -# define NO_CANCELLATION 1
>> -
>> -#endif
>> -
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> - header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
>> index 0e45f00..fe9a3fc 100644
>> --- a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
>> @@ -18,173 +18,22 @@
>> #include <sysdep.h>
>> #include <sysdeps/generic/sysdep.h>
>> #include <tls.h>
>> -#ifndef __ASSEMBLER__
>> -# include <nptl/pthreadP.h>
>> -#endif
>> +#include <nptl/pthreadP.h>
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -# ifdef __PIC__
>> -# define PSEUDO_CPLOAD .cpload t9;
>> -# define PSEUDO_ERRJMP la t9, __syscall_error; jr t9;
>> -# define PSEUDO_SAVEGP sw gp, 32(sp); cfi_rel_offset (gp, 32);
>> -# define PSEUDO_LOADGP lw gp, 32(sp);
>> -# else
>> -# define PSEUDO_CPLOAD
>> -# define PSEUDO_ERRJMP j __syscall_error;
>> -# define PSEUDO_SAVEGP
>> -# define PSEUDO_LOADGP
>> -# endif
>> -
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .align 2; \
>> - .set nomips16; \
>> - L(pseudo_start): \
>> - cfi_startproc; \
>> - 99: PSEUDO_ERRJMP \
>> - .type __##syscall_name##_nocancel, @function; \
>> - .globl __##syscall_name##_nocancel; \
>> - __##syscall_name##_nocancel: \
>> - .set noreorder; \
>> - PSEUDO_CPLOAD \
>> - li v0, SYS_ify(syscall_name); \
>> - syscall; \
>> - .set reorder; \
>> - bne a3, zero, 99b; \
>> - ret; \
>> - cfi_endproc; \
>> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
>> - ENTRY (name) \
>> - .set noreorder; \
>> - PSEUDO_CPLOAD \
>> - .set reorder; \
>> - SINGLE_THREAD_P(v1); \
>> - bne zero, v1, L(pseudo_cancel); \
>> - .set noreorder; \
>> - li v0, SYS_ify(syscall_name); \
>> - syscall; \
>> - .set reorder; \
>> - bne a3, zero, 99b; \
>> - ret; \
>> - L(pseudo_cancel): \
>> - SAVESTK_##args; \
>> - sw ra, 28(sp); \
>> - cfi_rel_offset (ra, 28); \
>> - PSEUDO_SAVEGP \
>> - PUSHARGS_##args; /* save syscall args */ \
>> - CENABLE; \
>> - PSEUDO_LOADGP \
>> - sw v0, 44(sp); /* save mask */ \
>> - POPARGS_##args; /* restore syscall args */ \
>> - .set noreorder; \
>> - li v0, SYS_ify (syscall_name); \
>> - syscall; \
>> - .set reorder; \
>> - sw v0, 36(sp); /* save syscall result */ \
>> - sw a3, 40(sp); /* save syscall error flag */ \
>> - lw a0, 44(sp); /* pass mask as arg1 */ \
>> - CDISABLE; \
>> - PSEUDO_LOADGP \
>> - lw v0, 36(sp); /* restore syscall result */ \
>> - lw a3, 40(sp); /* restore syscall error flag */ \
>> - lw ra, 28(sp); /* restore return address */ \
>> - .set noreorder; \
>> - bne a3, zero, 99b; \
>> - RESTORESTK; \
>> - L(pseudo_end): \
>> - .set reorder;
>> -
>> -# undef PSEUDO_END
>> -# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym
>> -
>> -# define PUSHARGS_0 /* nothing to do */
>> -# define PUSHARGS_1 PUSHARGS_0 sw a0, 0(sp); cfi_rel_offset (a0, 0);
>> -# define PUSHARGS_2 PUSHARGS_1 sw a1, 4(sp); cfi_rel_offset (a1, 4);
>> -# define PUSHARGS_3 PUSHARGS_2 sw a2, 8(sp); cfi_rel_offset (a2, 8);
>> -# define PUSHARGS_4 PUSHARGS_3 sw a3, 12(sp); cfi_rel_offset (a3, 12);
>> -# define PUSHARGS_5 PUSHARGS_4 /* handled by SAVESTK_## */
>> -# define PUSHARGS_6 PUSHARGS_5
>> -# define PUSHARGS_7 PUSHARGS_6
>> -
>> -# define POPARGS_0 /* nothing to do */
>> -# define POPARGS_1 POPARGS_0 lw a0, 0(sp);
>> -# define POPARGS_2 POPARGS_1 lw a1, 4(sp);
>> -# define POPARGS_3 POPARGS_2 lw a2, 8(sp);
>> -# define POPARGS_4 POPARGS_3 lw a3, 12(sp);
>> -# define POPARGS_5 POPARGS_4 /* args already in new stackframe */
>> -# define POPARGS_6 POPARGS_5
>> -# define POPARGS_7 POPARGS_6
>> -
>> -
>> -# define STKSPACE 48
>> -# define SAVESTK_0 subu sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE)
>> -# define SAVESTK_1 SAVESTK_0
>> -# define SAVESTK_2 SAVESTK_1
>> -# define SAVESTK_3 SAVESTK_2
>> -# define SAVESTK_4 SAVESTK_3
>> -# define SAVESTK_5 lw t0, 16(sp); \
>> - SAVESTK_0; \
>> - sw t0, 16(sp)
>> -
>> -# define SAVESTK_6 lw t0, 16(sp); \
>> - lw t1, 20(sp); \
>> - SAVESTK_0; \
>> - sw t0, 16(sp); \
>> - sw t1, 20(sp)
>> -
>> -# define SAVESTK_7 lw t0, 16(sp); \
>> - lw t1, 20(sp); \
>> - lw t2, 24(sp); \
>> - SAVESTK_0; \
>> - sw t0, 16(sp); \
>> - sw t1, 20(sp); \
>> - sw t2, 24(sp)
>> -
>> -# define RESTORESTK addu sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE)
>> -
>> -
>> -# ifdef __PIC__
>> -/* We use jalr rather than jal. This means that the assembler will not
>> - automatically restore $gp (in case libc has multiple GOTs) so we must
>> - do it manually - which we have to do anyway since we don't use .cprestore.
>> - It also shuts up the assembler warning about not using .cprestore. */
>> -# define PSEUDO_JMP(sym) la t9, sym; jalr t9;
>> -# else
>> -# define PSEUDO_JMP(sym) jal sym;
>> -# endif
>> -
>> -# if IS_IN (libpthread)
>> -# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
>> -# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel)
>> -# elif IS_IN (librt)
>> -# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
>> -# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel)
>> -# else
>> -# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
>> -# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel)
>> -# endif
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) \
>> == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P(reg) \
>> - READ_THREAD_POINTER(reg); \
>> - lw reg, MULTIPLE_THREADS_OFFSET(reg)
>> -#endif
>>
>> -#elif !defined __ASSEMBLER__
>> +#else
>>
>> # define SINGLE_THREAD_P 1
>> # define NO_CANCELLATION 1
>>
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> +#define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
>> index 47b92d9..7647363 100644
>> --- a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
>> @@ -18,124 +18,22 @@
>>
>> #include <sysdep.h>
>> #include <tls.h>
>> -#ifndef __ASSEMBLER__
>> -# include <nptl/pthreadP.h>
>> -#endif
>> +#include <nptl/pthreadP.h>
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .type __##syscall_name##_nocancel, @function; \
>> - .globl __##syscall_name##_nocancel; \
>> - __##syscall_name##_nocancel: \
>> - cfi_startproc; \
>> - DO_CALL (syscall_name, args); \
>> - bne r7, zero, SYSCALL_ERROR_LABEL; \
>> - ret; \
>> - cfi_endproc; \
>> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
>> - ENTRY (name) \
>> - SINGLE_THREAD_P(r2); \
>> - bne r2, zero, pseudo_cancel; \
>> - DO_CALL (syscall_name, args); \
>> - bne r7, zero, SYSCALL_ERROR_LABEL; \
>> - ret; \
>> - pseudo_cancel: \
>> - SAVESTK_##args; /* save syscall args and adjust stack */ \
>> - SAVEREG(ra, 0); /* save return address */ \
>> - SAVEREG(r22, 4); /* save GOT pointer */ \
>> - nextpc r22; \
>> -1: movhi r2, %hiadj(_gp_got - 1b); \
>> - addi r2, r2, %lo(_gp_got - 1b); \
>> - add r22, r22, r2; \
>> - CENABLE; \
>> - callr r3; \
>> - stw r2, 8(sp); /* save mask */ \
>> - LOADARGS_##args; \
>> - movi r2, SYS_ify(syscall_name); \
>> - trap; \
>> - stw r2, 12(sp); /* save syscall result */ \
>> - stw r7, 16(sp); /* save syscall error flag */ \
>> - ldw r4, 8(sp); /* pass mask as argument 1 */ \
>> - CDISABLE; \
>> - callr r3; \
>> - ldw r7, 16(sp); /* restore syscall error flag */ \
>> - ldw r2, 12(sp); /* restore syscall result */ \
>> - ldw ra, 0(sp); /* restore return address */ \
>> - ldw r22, 4(sp); /* restore GOT pointer */ \
>> - RESTORESTK_##args; \
>> - bne r7, zero, SYSCALL_ERROR_LABEL;
>> -
>> -
>> -# undef PSEUDO_END
>> -# define PSEUDO_END(sym) \
>> - SYSCALL_ERROR_HANDLER \
>> - END (sym)
>> -
>> -#define SAVEREG(REG, LOC) stw REG, LOC(sp); cfi_rel_offset (REG, LOC)
>> -#define SAVESTK(X) subi sp, sp, X; cfi_adjust_cfa_offset(X)
>> -#define SAVESTK_0 SAVESTK(20)
>> -#define SAVEARG_1 SAVEREG(r4, 20)
>> -#define SAVESTK_1 SAVESTK(24); SAVEARG_1
>> -#define SAVEARG_2 SAVEREG(r5, 24); SAVEARG_1
>> -#define SAVESTK_2 SAVESTK(28); SAVEARG_2
>> -#define SAVEARG_3 SAVEREG(r6, 28); SAVEARG_2
>> -#define SAVESTK_3 SAVESTK(32); SAVEARG_3
>> -#define SAVEARG_4 SAVEREG(r7, 32); SAVEARG_3
>> -#define SAVESTK_4 SAVESTK(36); SAVEARG_4
>> -#define SAVESTK_5 SAVESTK_4
>> -#define SAVESTK_6 SAVESTK_5
>> -
>> -#define LOADARGS_0
>> -#define LOADARGS_1 ldw r4, 20(sp)
>> -#define LOADARGS_2 LOADARGS_1; ldw r5, 24(sp)
>> -#define LOADARGS_3 LOADARGS_2; ldw r6, 28(sp)
>> -#define LOADARGS_4 LOADARGS_3; ldw r7, 32(sp)
>> -#define LOADARGS_5 LOADARGS_4; ldw r8, 36(sp)
>> -#define LOADARGS_6 LOADARGS_5; ldw r9, 40(sp)
>> -
>> -#define RESTORESTK(X) addi sp, sp, X; cfi_adjust_cfa_offset(-X)
>> -#define RESTORESTK_0 RESTORESTK(20)
>> -#define RESTORESTK_1 RESTORESTK(24)
>> -#define RESTORESTK_2 RESTORESTK(28)
>> -#define RESTORESTK_3 RESTORESTK(32)
>> -#define RESTORESTK_4 RESTORESTK(36)
>> -#define RESTORESTK_5 RESTORESTK(36)
>> -#define RESTORESTK_6 RESTORESTK(36)
>> -
>> -# if IS_IN (libpthread)
>> -# define CENABLE ldw r3, %call(__pthread_enable_asynccancel)(r22)
>> -# define CDISABLE ldw r3, %call(__pthread_disable_asynccancel)(r22)
>> -# elif IS_IN (librt)
>> -# define CENABLE ldw r3, %call(__librt_enable_asynccancel)(r22)
>> -# define CDISABLE ldw r3, %call(__librt_disable_asynccancel)(r22)
>> -# elif IS_IN (libc)
>> -# define CENABLE ldw r3, %call(__libc_enable_asynccancel)(r22)
>> -# define CDISABLE ldw r3, %call(__libc_disable_asynccancel)(r22)
>> -# else
>> -# error Unsupported library
>> -# endif
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) \
>> == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P(reg) \
>> - ldw reg, MULTIPLE_THREADS_OFFSET(r23)
>> -#endif
>>
>> -#elif !defined __ASSEMBLER__
>> +#else
>>
>> # define SINGLE_THREAD_P 1
>> # define NO_CANCELLATION 1
>>
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> +#define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
>> deleted file mode 100644
>> index 35d3f05..0000000
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
>> +++ /dev/null
>> @@ -1,118 +0,0 @@
>> -/* Cancellable system call stubs. Linux/PowerPC version.
>> - Copyright (C) 2003-2017 Free Software Foundation, Inc.
>> - This file is part of the GNU C Library.
>> - Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.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>
>> -#include <tls.h>
>> -#ifndef __ASSEMBLER__
>> -# include <nptl/pthreadP.h>
>> -#endif
>> -
>> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>> -
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .section ".text"; \
>> - ENTRY (name) \
>> - SINGLE_THREAD_P; \
>> - bne- .Lpseudo_cancel; \
>> - .type __##syscall_name##_nocancel,@function; \
>> - .globl __##syscall_name##_nocancel; \
>> - __##syscall_name##_nocancel: \
>> - DO_CALL (SYS_ify (syscall_name)); \
>> - PSEUDO_RET; \
>> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
>> - .Lpseudo_cancel: \
>> - stwu 1,-48(1); \
>> - cfi_adjust_cfa_offset (48); \
>> - mflr 9; \
>> - stw 9,52(1); \
>> - cfi_offset (lr, 4); \
>> - DOCARGS_##args; /* save syscall args around CENABLE. */ \
>> - CENABLE; \
>> - stw 3,16(1); /* store CENABLE return value (MASK). */ \
>> - UNDOCARGS_##args; /* restore syscall args. */ \
>> - DO_CALL (SYS_ify (syscall_name)); \
>> - mfcr 0; /* save CR/R3 around CDISABLE. */ \
>> - stw 3,8(1); \
>> - stw 0,12(1); \
>> - lwz 3,16(1); /* pass MASK to CDISABLE. */ \
>> - CDISABLE; \
>> - lwz 4,52(1); \
>> - lwz 0,12(1); /* restore CR/R3. */ \
>> - lwz 3,8(1); \
>> - mtlr 4; \
>> - mtcr 0; \
>> - addi 1,1,48;
>> -
>> -# define DOCARGS_0
>> -# define UNDOCARGS_0
>> -
>> -# define DOCARGS_1 stw 3,20(1); DOCARGS_0
>> -# define UNDOCARGS_1 lwz 3,20(1); UNDOCARGS_0
>> -
>> -# define DOCARGS_2 stw 4,24(1); DOCARGS_1
>> -# define UNDOCARGS_2 lwz 4,24(1); UNDOCARGS_1
>> -
>> -# define DOCARGS_3 stw 5,28(1); DOCARGS_2
>> -# define UNDOCARGS_3 lwz 5,28(1); UNDOCARGS_2
>> -
>> -# define DOCARGS_4 stw 6,32(1); DOCARGS_3
>> -# define UNDOCARGS_4 lwz 6,32(1); UNDOCARGS_3
>> -
>> -# define DOCARGS_5 stw 7,36(1); DOCARGS_4
>> -# define UNDOCARGS_5 lwz 7,36(1); UNDOCARGS_4
>> -
>> -# define DOCARGS_6 stw 8,40(1); DOCARGS_5
>> -# define UNDOCARGS_6 lwz 8,40(1); UNDOCARGS_5
>> -
>> -# if IS_IN (libpthread)
>> -# define CENABLE bl __pthread_enable_asynccancel@local
>> -# define CDISABLE bl __pthread_disable_asynccancel@local
>> -# elif IS_IN (libc)
>> -# define CENABLE bl __libc_enable_asynccancel@local
>> -# define CDISABLE bl __libc_disable_asynccancel@local
>> -# elif IS_IN (librt)
>> -# define CENABLE bl __librt_enable_asynccancel@local
>> -# define CDISABLE bl __librt_disable_asynccancel@local
>> -# else
>> -# error Unsupported library
>> -# endif
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> - header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P \
>> - lwz 10,MULTIPLE_THREADS_OFFSET(2); \
>> - cmpwi 10,0
>> -# endif
>> -
>> -#elif !defined __ASSEMBLER__
>> -
>> -# define SINGLE_THREAD_P (1)
>> -# define NO_CANCELLATION 1
>> -
>> -#endif
>> -
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> - header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
>> deleted file mode 100644
>> index cad13da..0000000
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
>> +++ /dev/null
>> @@ -1,147 +0,0 @@
>> -/* Cancellable system call stubs. Linux/PowerPC64 version.
>> - Copyright (C) 2003-2017 Free Software Foundation, Inc.
>> - This file is part of the GNU C Library.
>> - Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.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>
>> -#include <tls.h>
>> -#ifndef __ASSEMBLER__
>> -# include <nptl/pthreadP.h>
>> -#endif
>> -
>> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>> -
>> -# define DASHDASHPFX(str) __##str
>> -
>> -#if _CALL_ELF == 2
>> -#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16+48)
>> -#define CANCEL_PARM_SAVE (FRAME_MIN_SIZE+16)
>> -#else
>> -#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16)
>> -#define CANCEL_PARM_SAVE (CANCEL_FRAMESIZE+FRAME_PARM_SAVE)
>> -#endif
>> -
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .section ".text"; \
>> - ENTRY (name) \
>> - SINGLE_THREAD_P; \
>> - bne- .Lpseudo_cancel; \
>> - .type DASHDASHPFX(syscall_name##_nocancel),@function; \
>> - .globl DASHDASHPFX(syscall_name##_nocancel); \
>> - DASHDASHPFX(syscall_name##_nocancel): \
>> - DO_CALL (SYS_ify (syscall_name)); \
>> - PSEUDO_RET; \
>> - .size DASHDASHPFX(syscall_name##_nocancel),.-DASHDASHPFX(syscall_name##_nocancel); \
>> - .Lpseudo_cancel: \
>> - stdu 1,-CANCEL_FRAMESIZE(1); \
>> - cfi_adjust_cfa_offset (CANCEL_FRAMESIZE); \
>> - mflr 9; \
>> - std 9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1); \
>> - cfi_offset (lr, FRAME_LR_SAVE); \
>> - DOCARGS_##args; /* save syscall args around CENABLE. */ \
>> - CENABLE; \
>> - std 3,FRAME_MIN_SIZE(1); /* store CENABLE return value (MASK). */ \
>> - UNDOCARGS_##args; /* restore syscall args. */ \
>> - DO_CALL (SYS_ify (syscall_name)); \
>> - mfcr 0; /* save CR/R3 around CDISABLE. */ \
>> - std 3,FRAME_MIN_SIZE+8(1); \
>> - std 0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1); \
>> - cfi_offset (cr, FRAME_CR_SAVE); \
>> - ld 3,FRAME_MIN_SIZE(1); /* pass MASK to CDISABLE. */ \
>> - CDISABLE; \
>> - ld 9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1); \
>> - ld 0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1); /* restore CR/R3. */ \
>> - ld 3,FRAME_MIN_SIZE+8(1); \
>> - mtlr 9; \
>> - mtcr 0; \
>> - addi 1,1,CANCEL_FRAMESIZE; \
>> - cfi_adjust_cfa_offset (-CANCEL_FRAMESIZE); \
>> - cfi_restore (lr); \
>> - cfi_restore (cr)
>> -
>> -# define DOCARGS_0
>> -# define UNDOCARGS_0
>> -
>> -# define DOCARGS_1 std 3,CANCEL_PARM_SAVE(1); DOCARGS_0
>> -# define UNDOCARGS_1 ld 3,CANCEL_PARM_SAVE(1); UNDOCARGS_0
>> -
>> -# define DOCARGS_2 std 4,CANCEL_PARM_SAVE+8(1); DOCARGS_1
>> -# define UNDOCARGS_2 ld 4,CANCEL_PARM_SAVE+8(1); UNDOCARGS_1
>> -
>> -# define DOCARGS_3 std 5,CANCEL_PARM_SAVE+16(1); DOCARGS_2
>> -# define UNDOCARGS_3 ld 5,CANCEL_PARM_SAVE+16(1); UNDOCARGS_2
>> -
>> -# define DOCARGS_4 std 6,CANCEL_PARM_SAVE+24(1); DOCARGS_3
>> -# define UNDOCARGS_4 ld 6,CANCEL_PARM_SAVE+24(1); UNDOCARGS_3
>> -
>> -# define DOCARGS_5 std 7,CANCEL_PARM_SAVE+32(1); DOCARGS_4
>> -# define UNDOCARGS_5 ld 7,CANCEL_PARM_SAVE+32(1); UNDOCARGS_4
>> -
>> -# define DOCARGS_6 std 8,CANCEL_PARM_SAVE+40(1); DOCARGS_5
>> -# define UNDOCARGS_6 ld 8,CANCEL_PARM_SAVE+40(1); UNDOCARGS_5
>> -
>> -# if IS_IN (libpthread)
>> -# ifdef SHARED
>> -# define CENABLE bl JUMPTARGET(__pthread_enable_asynccancel)
>> -# define CDISABLE bl JUMPTARGET(__pthread_disable_asynccancel)
>> -# else
>> -# define CENABLE bl JUMPTARGET(__pthread_enable_asynccancel); nop
>> -# define CDISABLE bl JUMPTARGET(__pthread_disable_asynccancel); nop
>> -# endif
>> -# elif IS_IN (libc)
>> -# ifdef SHARED
>> -# define CENABLE bl JUMPTARGET(__libc_enable_asynccancel)
>> -# define CDISABLE bl JUMPTARGET(__libc_disable_asynccancel)
>> -# else
>> -# define CENABLE bl JUMPTARGET(__libc_enable_asynccancel); nop
>> -# define CDISABLE bl JUMPTARGET(__libc_disable_asynccancel); nop
>> -# endif
>> -# elif IS_IN (librt)
>> -# ifdef SHARED
>> -# define CENABLE bl JUMPTARGET(__librt_enable_asynccancel)
>> -# define CDISABLE bl JUMPTARGET(__librt_disable_asynccancel)
>> -# else
>> -# define CENABLE bl JUMPTARGET(__librt_enable_asynccancel); nop
>> -# define CDISABLE bl JUMPTARGET(__librt_disable_asynccancel); nop
>> -# endif
>> -# else
>> -# error Unsupported library
>> -# endif
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> - header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P \
>> - lwz 10,MULTIPLE_THREADS_OFFSET(13); \
>> - cmpwi 10,0
>> -# endif
>> -
>> -#elif !defined __ASSEMBLER__
>> -
>> -# define SINGLE_THREAD_P (1)
>> -# define NO_CANCELLATION 1
>> -
>> -#endif
>> -
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> - header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
>> new file mode 100644
>> index 0000000..85af880
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
>> @@ -0,0 +1,38 @@
>> +/* Cancellable system call stubs. Linux/PowerPC version.
>> + Copyright (C) 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/>. */
>> +
>> +#include <sysdep.h>
>> +#include <tls.h>
>> +#include <nptl/pthreadP.h>
>> +
>> +#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>> +
>> +# define SINGLE_THREAD_P \
>> + __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> + header.multiple_threads) == 0, 1)
>> +
>> +#else
>> +
>> +# define SINGLE_THREAD_P (1)
>> +# define NO_CANCELLATION 1
>> +
>> +#endif
>> +
>> +#define RTLD_SINGLE_THREAD_P \
>> + __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> + header.multiple_threads) == 0, 1)
>> 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 b1e80bc..82763b7 100644
>> --- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
>> @@ -24,116 +24,17 @@
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .text; \
>> -L(pseudo_cancel): \
>> - cfi_startproc; \
>> - STM_##args \
>> - stm %r12,%r15,48(%r15); \
>> - cfi_offset (%r15, -36); \
>> - cfi_offset (%r14, -40); \
>> - cfi_offset (%r13, -44); \
>> - cfi_offset (%r12, -48); \
>> - lr %r14,%r15; \
>> - ahi %r15,-96; \
>> - cfi_adjust_cfa_offset (96); \
>> - st %r14,0(%r15); \
>> - basr %r13,0; \
>> -0: l %r1,1f-0b(%r13); \
>> - bas %r14,0(%r1,%r13); \
>> - lr %r0,%r2; \
>> - LM_##args \
>> - .if SYS_ify (syscall_name) < 256; \
>> - svc SYS_ify (syscall_name); \
>> - .else; \
>> - lhi %r1,SYS_ify (syscall_name); \
>> - svc 0; \
>> - .endif; \
>> - LR7_##args \
>> - l %r1,2f-0b(%r13); \
>> - lr %r12,%r2; \
>> - lr %r2,%r0; \
>> - bas %r14,0(%r1,%r13); \
>> - lr %r2,%r12; \
>> - lm %r12,%r15,48+96(%r15); \
>> - cfi_endproc; \
>> - j L(pseudo_check); \
>> -1: .long CENABLE-0b; \
>> -2: .long CDISABLE-0b; \
>> -ENTRY(name) \
>> - SINGLE_THREAD_P(%r1) \
>> - jne L(pseudo_cancel); \
>> -.type __##syscall_name##_nocancel,@function; \
>> -.globl __##syscall_name##_nocancel; \
>> -__##syscall_name##_nocancel: \
>> - DO_CALL(syscall_name, args); \
>> -L(pseudo_check): \
>> - lhi %r4,-4095; \
>> - clr %r2,%r4; \
>> - jnl SYSCALL_ERROR_LABEL; \
>> -.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
>> -L(pseudo_end):
>> -
>> -# if IS_IN (libpthread)
>> -# define CENABLE __pthread_enable_asynccancel
>> -# define CDISABLE __pthread_disable_asynccancel
>> -# elif IS_IN (libc)
>> -# define CENABLE __libc_enable_asynccancel
>> -# define CDISABLE __libc_disable_asynccancel
>> -# elif IS_IN (librt)
>> -# define CENABLE __librt_enable_asynccancel
>> -# define CDISABLE __librt_disable_asynccancel
>> -# else
>> -# error Unsupported library
>> -# endif
>> -
>> -#define STM_0 /* Nothing */
>> -#define STM_1 st %r2,8(%r15);
>> -#define STM_2 stm %r2,%r3,8(%r15);
>> -#define STM_3 stm %r2,%r4,8(%r15);
>> -#define STM_4 stm %r2,%r5,8(%r15);
>> -#define STM_5 stm %r2,%r5,8(%r15);
>> -#define STM_6 stm %r2,%r7,8(%r15);
>> -
>> -#define LM_0 /* Nothing */
>> -#define LM_1 l %r2,8+96(%r15);
>> -#define LM_2 lm %r2,%r3,8+96(%r15);
>> -#define LM_3 lm %r2,%r4,8+96(%r15);
>> -#define LM_4 lm %r2,%r5,8+96(%r15);
>> -#define LM_5 lm %r2,%r5,8+96(%r15);
>> -#define LM_6 lm %r2,%r5,8+96(%r15); \
>> - cfi_offset (%r7, -68); \
>> - l %r7,96+96(%r15);
>> -
>> -#define LR7_0 /* Nothing */
>> -#define LR7_1 /* Nothing */
>> -#define LR7_2 /* Nothing */
>> -#define LR7_3 /* Nothing */
>> -#define LR7_4 /* Nothing */
>> -#define LR7_5 /* Nothing */
>> -#define LR7_6 l %r7,28+96(%r15); \
>> - cfi_restore (%r7);
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P(reg) \
>> - ear reg,%a0; \
>> - icm reg,15,MULTIPLE_THREADS_OFFSET(reg);
>> -# endif
>>
>> -#elif !defined __ASSEMBLER__
>> +#else
>>
>> # define SINGLE_THREAD_P (1)
>> # define NO_CANCELLATION 1
>>
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> +#define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 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 9b2c546..952d2af 100644
>> --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
>> @@ -18,135 +18,36 @@
>>
>> #include <sysdep.h>
>> #include <tls.h>
>> -#ifndef __ASSEMBLER__
>> -# include <nptl/pthreadP.h>
>> -#endif
>> +#include <nptl/pthreadP.h>
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .text; \
>> -L(pseudo_cancel): \
>> - cfi_startproc; \
>> - STM_##args \
>> - stmg %r13,%r15,104(%r15); \
>> - cfi_offset (%r15,-40); \
>> - cfi_offset (%r14,-48); \
>> - cfi_offset (%r13,-56); \
>> - lgr %r14,%r15; \
>> - aghi %r15,-160; \
>> - cfi_adjust_cfa_offset (160); \
>> - stg %r14,0(%r15); \
>> - brasl %r14,CENABLE; \
>> - lgr %r0,%r2; \
>> - LM_##args \
>> - .if SYS_ify (syscall_name) < 256; \
>> - svc SYS_ify (syscall_name); \
>> - .else; \
>> - lghi %r1,SYS_ify (syscall_name); \
>> - svc 0; \
>> - .endif; \
>> - LR7_##args \
>> - lgr %r13,%r2; \
>> - lgr %r2,%r0; \
>> - brasl %r14,CDISABLE; \
>> - lgr %r2,%r13; \
>> - lmg %r13,%r15,104+160(%r15); \
>> - cfi_endproc; \
>> - j L(pseudo_check); \
>> -ENTRY(name) \
>> - SINGLE_THREAD_P \
>> - jne L(pseudo_cancel); \
>> -.type __##syscall_name##_nocancel,@function; \
>> -.globl __##syscall_name##_nocancel; \
>> -__##syscall_name##_nocancel: \
>> - DO_CALL(syscall_name, args); \
>> -L(pseudo_check): \
>> - lghi %r4,-4095; \
>> - clgr %r2,%r4; \
>> - jgnl SYSCALL_ERROR_LABEL; \
>> -.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
>> -L(pseudo_end):
>> -
>> # if IS_IN (libpthread)
>> -# define CENABLE __pthread_enable_asynccancel
>> -# define CDISABLE __pthread_disable_asynccancel
>> # define __local_multiple_threads __pthread_multiple_threads
>> # elif IS_IN (libc)
>> -# define CENABLE __libc_enable_asynccancel
>> -# define CDISABLE __libc_disable_asynccancel
>> # define __local_multiple_threads __libc_multiple_threads
>> -# elif IS_IN (librt)
>> -# define CENABLE __librt_enable_asynccancel
>> -# define CDISABLE __librt_disable_asynccancel
>> -# else
>> -# error Unsupported library
>> # endif
>>
>> -#define STM_0 /* Nothing */
>> -#define STM_1 stg %r2,16(%r15);
>> -#define STM_2 stmg %r2,%r3,16(%r15);
>> -#define STM_3 stmg %r2,%r4,16(%r15);
>> -#define STM_4 stmg %r2,%r5,16(%r15);
>> -#define STM_5 stmg %r2,%r5,16(%r15);
>> -#define STM_6 stmg %r2,%r7,16(%r15);
>> -
>> -#define LM_0 /* Nothing */
>> -#define LM_1 lg %r2,16+160(%r15);
>> -#define LM_2 lmg %r2,%r3,16+160(%r15);
>> -#define LM_3 lmg %r2,%r4,16+160(%r15);
>> -#define LM_4 lmg %r2,%r5,16+160(%r15);
>> -#define LM_5 lmg %r2,%r5,16+160(%r15);
>> -#define LM_6 lmg %r2,%r5,16+160(%r15); \
>> - cfi_offset (%r7, -104); \
>> - lg %r7,160+160(%r15);
>> -
>> -#define LR7_0 /* Nothing */
>> -#define LR7_1 /* Nothing */
>> -#define LR7_2 /* Nothing */
>> -#define LR7_3 /* Nothing */
>> -#define LR7_4 /* Nothing */
>> -#define LR7_5 /* Nothing */
>> -#define LR7_6 lg %r7,56+160(%r15); \
>> - cfi_restore (%r7);
>> -
>> # if IS_IN (libpthread) || IS_IN (libc)
>> -# ifndef __ASSEMBLER__
>> extern int __local_multiple_threads attribute_hidden;
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (__local_multiple_threads == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P \
>> - larl %r1,__local_multiple_threads; \
>> - icm %r0,15,0(%r1);
>> -# endif
>>
>> # else
>>
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P \
>> - ear %r1,%a0; \
>> - sllg %r1,%r1,32; \
>> - ear %r1,%a1; \
>> - icm %r1,15,MULTIPLE_THREADS_OFFSET(%r1);
>> -# endif
>>
>> # endif
>>
>> -#elif !defined __ASSEMBLER__
>> +#else
>>
>> # define SINGLE_THREAD_P (1)
>> # define NO_CANCELLATION 1
>>
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> +#define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
>> index 5645cad..1ea501b 100644
>> --- a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
>> @@ -23,147 +23,17 @@
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -# define _IMM12 #-12
>> -# define _IMM16 #-16
>> -# define _IMP16 #16
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .text; \
>> - ENTRY (name); \
>> - .Lpseudo_start: \
>> - SINGLE_THREAD_P; \
>> - bf .Lpseudo_cancel; \
>> - .type __##syscall_name##_nocancel,@function; \
>> - .globl __##syscall_name##_nocancel; \
>> - __##syscall_name##_nocancel: \
>> - DO_CALL (syscall_name, args); \
>> - mov r0,r1; \
>> - mov _IMM12,r2; \
>> - shad r2,r1; \
>> - not r1,r1; \
>> - tst r1,r1; \
>> - bt .Lsyscall_error; \
>> - bra .Lpseudo_end; \
>> - nop; \
>> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
>> - .Lpseudo_cancel: \
>> - sts.l pr,@-r15; \
>> - cfi_adjust_cfa_offset (4); \
>> - cfi_rel_offset (pr, 0); \
>> - add _IMM16,r15; \
>> - cfi_adjust_cfa_offset (16); \
>> - SAVE_ARGS_##args; \
>> - CENABLE; \
>> - LOAD_ARGS_##args; \
>> - add _IMP16,r15; \
>> - cfi_adjust_cfa_offset (-16); \
>> - lds.l @r15+,pr; \
>> - cfi_adjust_cfa_offset (-4); \
>> - cfi_restore (pr); \
>> - DO_CALL(syscall_name, args); \
>> - SYSCALL_INST_PAD; \
>> - sts.l pr,@-r15; \
>> - cfi_adjust_cfa_offset (4); \
>> - cfi_rel_offset (pr, 0); \
>> - mov.l r0,@-r15; \
>> - cfi_adjust_cfa_offset (4); \
>> - cfi_rel_offset (r0, 0); \
>> - CDISABLE; \
>> - mov.l @r15+,r0; \
>> - cfi_adjust_cfa_offset (-4); \
>> - cfi_restore (r0); \
>> - lds.l @r15+,pr; \
>> - cfi_adjust_cfa_offset (-4); \
>> - cfi_restore (pr); \
>> - mov r0,r1; \
>> - mov _IMM12,r2; \
>> - shad r2,r1; \
>> - not r1,r1; \
>> - tst r1,r1; \
>> - bf .Lpseudo_end; \
>> - .Lsyscall_error: \
>> - SYSCALL_ERROR_HANDLER; \
>> - .Lpseudo_end:
>> -
>> -# undef PSEUDO_END
>> -# define PSEUDO_END(sym) \
>> - END (sym)
>> -
>> -# define SAVE_ARGS_0 /* Nothing. */
>> -# define SAVE_ARGS_1 SAVE_ARGS_0; mov.l r4,@(0,r15); cfi_offset (r4,-4)
>> -# define SAVE_ARGS_2 SAVE_ARGS_1; mov.l r5,@(4,r15); cfi_offset (r5,-8)
>> -# define SAVE_ARGS_3 SAVE_ARGS_2; mov.l r6,@(8,r15); cfi_offset (r6,-12)
>> -# define SAVE_ARGS_4 SAVE_ARGS_3; mov.l r7,@(12,r15); cfi_offset (r7,-16)
>> -# define SAVE_ARGS_5 SAVE_ARGS_4
>> -# define SAVE_ARGS_6 SAVE_ARGS_5
>> -
>> -# define LOAD_ARGS_0 /* Nothing. */
>> -# define LOAD_ARGS_1 LOAD_ARGS_0; mov.l @(0,r15),r4; cfi_restore (r4)
>> -# define LOAD_ARGS_2 LOAD_ARGS_1; mov.l @(4,r15),r5; cfi_restore (r5)
>> -# define LOAD_ARGS_3 LOAD_ARGS_2; mov.l @(8,r15),r6; cfi_restore (r6)
>> -# define LOAD_ARGS_4 LOAD_ARGS_3; mov.l @(12,r15),r7; cfi_restore (r7)
>> -# define LOAD_ARGS_5 LOAD_ARGS_4
>> -# define LOAD_ARGS_6 LOAD_ARGS_5
>> -
>> -# if IS_IN (libpthread)
>> -# define __local_enable_asynccancel __pthread_enable_asynccancel
>> -# define __local_disable_asynccancel __pthread_disable_asynccancel
>> -# elif IS_IN (libc)
>> -# define __local_enable_asynccancel __libc_enable_asynccancel
>> -# define __local_disable_asynccancel __libc_disable_asynccancel
>> -# elif IS_IN (librt)
>> -# define __local_enable_asynccancel __librt_enable_asynccancel
>> -# define __local_disable_asynccancel __librt_disable_asynccancel
>> -# else
>> -# error Unsupported library
>> -# endif
>> -
>> -# define CENABLE \
>> - mov.l 1f,r0; \
>> - bsrf r0; \
>> - nop; \
>> - 0: bra 2f; \
>> - mov r0,r2; \
>> - .align 2; \
>> - 1: .long __local_enable_asynccancel - 0b; \
>> - 2:
>> -
>> -# define CDISABLE \
>> - mov.l 1f,r0; \
>> - bsrf r0; \
>> - mov r2,r4; \
>> - 0: bra 2f; \
>> - nop; \
>> - .align 2; \
>> - 1: .long __local_disable_asynccancel - 0b; \
>> - 2:
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P \
>> - stc gbr,r0; \
>> - mov.w 0f,r1; \
>> - sub r1,r0; \
>> - mov.l @(MULTIPLE_THREADS_OFFSET,r0),r0; \
>> - bra 1f; \
>> - tst r0,r0; \
>> - 0: .word TLS_PRE_TCB_SIZE; \
>> - 1:
>> -
>> -# endif
>>
>> -#elif !defined __ASSEMBLER__
>> +#else
>>
>> # define SINGLE_THREAD_P (1)
>> # define NO_CANCELLATION 1
>>
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> +#define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
>> deleted file mode 100644
>> index c513212..0000000
>> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
>> +++ /dev/null
>> @@ -1,111 +0,0 @@
>> -/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
>> - This file is part of the GNU C Library.
>> - Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
>> -
>> - 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>
>> -#include <tls.h>
>> -#ifndef __ASSEMBLER__
>> -# include <nptl/pthreadP.h>
>> -#endif
>> -
>> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>> -
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .text; \
>> - .globl __syscall_error; \
>> -ENTRY(name) \
>> - ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\
>> - cmp %g1, 0; \
>> - bne 1f; \
>> -.type __##syscall_name##_nocancel,@function; \
>> -.globl __##syscall_name##_nocancel; \
>> -__##syscall_name##_nocancel: \
>> - mov SYS_ify(syscall_name), %g1; \
>> - ta 0x10; \
>> - bcc 8f; \
>> - mov %o7, %g1; \
>> - call __syscall_error; \
>> - mov %g1, %o7; \
>> -8: jmpl %o7 + 8, %g0; \
>> - nop; \
>> -.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\
>> -1: save %sp, -96, %sp; \
>> - cfi_def_cfa_register(%fp); \
>> - cfi_window_save; \
>> - cfi_register(%o7, %i7); \
>> - CENABLE; \
>> - nop; \
>> - mov %o0, %l0; \
>> - COPY_ARGS_##args \
>> - mov SYS_ify(syscall_name), %g1; \
>> - ta 0x10; \
>> - bcc 1f; \
>> - mov %o0, %l1; \
>> - CDISABLE; \
>> - mov %l0, %o0; \
>> - call __syscall_error; \
>> - mov %l1, %o0; \
>> - b 2f; \
>> - mov -1, %l1; \
>> -1: CDISABLE; \
>> - mov %l0, %o0; \
>> -2: jmpl %i7 + 8, %g0; \
>> - restore %g0, %l1, %o0;
>> -
>> -
>> -# if IS_IN (libpthread)
>> -# define CENABLE call __pthread_enable_asynccancel
>> -# define CDISABLE call __pthread_disable_asynccancel
>> -# elif IS_IN (libc)
>> -# define CENABLE call __libc_enable_asynccancel
>> -# define CDISABLE call __libc_disable_asynccancel
>> -# elif IS_IN (librt)
>> -# define CENABLE call __librt_enable_asynccancel
>> -# define CDISABLE call __librt_disable_asynccancel
>> -# else
>> -# error Unsupported library
>> -# endif
>> -
>> -#define COPY_ARGS_0 /* Nothing */
>> -#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0;
>> -#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1;
>> -#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2;
>> -#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3;
>> -#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4;
>> -#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5;
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> - header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1
>> -# endif
>> -
>> -#elif !defined __ASSEMBLER__
>> -
>> -# define SINGLE_THREAD_P (1)
>> -# define NO_CANCELLATION 1
>> -
>> -#endif
>> -
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> - header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
>> deleted file mode 100644
>> index 45fbd73..0000000
>> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
>> +++ /dev/null
>> @@ -1,109 +0,0 @@
>> -/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
>> - This file is part of the GNU C Library.
>> - Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
>> -
>> - 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>
>> -#include <tls.h>
>> -#ifndef __ASSEMBLER__
>> -# include <nptl/pthreadP.h>
>> -#endif
>> -
>> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>> -
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .text; \
>> - .globl __syscall_error; \
>> -ENTRY(name) \
>> - ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\
>> - brnz,pn %g1, 1f; \
>> -.type __##syscall_name##_nocancel,@function; \
>> -.globl __##syscall_name##_nocancel; \
>> -__##syscall_name##_nocancel: \
>> - mov SYS_ify(syscall_name), %g1; \
>> - ta 0x6d; \
>> - bcc,pt %xcc, 8f; \
>> - mov %o7, %g1; \
>> - call __syscall_error; \
>> - mov %g1, %o7; \
>> -8: jmpl %o7 + 8, %g0; \
>> - nop; \
>> -.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\
>> -1: save %sp, -192, %sp; \
>> - cfi_def_cfa_register(%fp); \
>> - cfi_window_save; \
>> - cfi_register(%o7, %i7); \
>> - CENABLE; \
>> - nop; \
>> - mov %o0, %l0; \
>> - COPY_ARGS_##args \
>> - mov SYS_ify(syscall_name), %g1; \
>> - ta 0x6d; \
>> - bcc,pt %xcc, 1f; \
>> - mov %o0, %l1; \
>> - CDISABLE; \
>> - mov %l0, %o0; \
>> - call __syscall_error; \
>> - mov %l1, %o0; \
>> - ba,pt %xcc, 2f; \
>> - mov -1, %l1; \
>> -1: CDISABLE; \
>> - mov %l0, %o0; \
>> -2: jmpl %i7 + 8, %g0; \
>> - restore %g0, %l1, %o0;
>> -
>> -# if IS_IN (libpthread)
>> -# define CENABLE call __pthread_enable_asynccancel
>> -# define CDISABLE call __pthread_disable_asynccancel
>> -# elif IS_IN (libc)
>> -# define CENABLE call __libc_enable_asynccancel
>> -# define CDISABLE call __libc_disable_asynccancel
>> -# elif IS_IN (librt)
>> -# define CENABLE call __librt_enable_asynccancel
>> -# define CDISABLE call __librt_disable_asynccancel
>> -# else
>> -# error Unsupported library
>> -# endif
>> -
>> -#define COPY_ARGS_0 /* Nothing */
>> -#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0;
>> -#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1;
>> -#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2;
>> -#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3;
>> -#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4;
>> -#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5;
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> - header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1
>> -# endif
>> -
>> -#elif !defined __ASSEMBLER__
>> -
>> -# define SINGLE_THREAD_P (1)
>> -# define NO_CANCELLATION 1
>> -
>> -#endif
>> -
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> - header.multiple_threads) == 0, 1)
>> -#endif
>> diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
>> new file mode 100644
>> index 0000000..61bfa33
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
>> @@ -0,0 +1,38 @@
>> +/* Copyright (C) 2002-2015 Free Software Foundation, Inc.
>> + This file is part of the GNU C Library.
>> + Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
>> +
>> + 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>
>> +#include <tls.h>
>> +#include <nptl/pthreadP.h>
>> +
>> +#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>> +
>> +# define SINGLE_THREAD_P \
>> + __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> + header.multiple_threads) == 0, 1)
>> +
>> +#else
>> +
>> +# define SINGLE_THREAD_P (1)
>> +# define NO_CANCELLATION 1
>> +
>> +#endif
>> +
>> +#define RTLD_SINGLE_THREAD_P \
>> + __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> + header.multiple_threads) == 0, 1)
>> diff --git a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
>> index 092a90c..c8994db 100644
>> --- a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
>> @@ -18,137 +18,22 @@
>>
>> #include <sysdep.h>
>> #include <tls.h>
>> -#ifndef __ASSEMBLER__
>> -# include <nptl/pthreadP.h>
>> -#endif
>> +#include <nptl/pthreadP.h>
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -/* Allow hacking in some extra code if desired. */
>> -#ifndef PSEUDO_EXTRA
>> -#define PSEUDO_EXTRA
>> -#endif
>> -
>> -#undef PSEUDO
>> -#define PSEUDO(name, syscall_name, args) \
>> - ENTRY(__##syscall_name##_nocancel); \
>> - PSEUDO_EXTRA \
>> - moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name); \
>> - swint1; \
>> - BNEZ r1, 0f; \
>> - jrp lr; \
>> - END(__##syscall_name##_nocancel); \
>> - ENTRY (name) \
>> - SINGLE_THREAD_P(r11); \
>> - BEQZ r11, L(pseudo_cancel); \
>> - PSEUDO_EXTRA \
>> - moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name); \
>> - swint1; \
>> - BNEZ r1, 0f; \
>> - jrp lr; \
>> - L(pseudo_cancel): \
>> - { \
>> - move r11, sp; \
>> - ST sp, lr; \
>> - ADDI_PTR sp, sp, -STKSPACE; \
>> - }; \
>> - cfi_offset (lr, 0); \
>> - cfi_def_cfa_offset (STKSPACE); \
>> - { \
>> - ADDI_PTR r12, sp, REGSIZE; \
>> - ADDI_PTR r13, sp, 2 * REGSIZE; /* set up for PUSHARGS_0 */ \
>> - }; \
>> - ST r12, r11; \
>> - PUSHARGS_##args /* save syscall args */ \
>> - CENABLE; \
>> - ADDI_PTR r12, sp, 10 * REGSIZE; \
>> - { \
>> - ST r12, r0; /* save mask */ \
>> - ADDI_PTR r13, sp, 2 * REGSIZE; /* set up for POPARGS_0 */ \
>> - }; \
>> - POPARGS_##args /* restore syscall args */ \
>> - PSEUDO_EXTRA \
>> - moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name); \
>> - swint1; \
>> - ADDI_PTR r12, sp, 12 * REGSIZE; \
>> - { \
>> - ST r12, r1; /* save syscall result */ \
>> - ADDI_PTR r12, sp, 11 * REGSIZE; \
>> - }; \
>> - { \
>> - ST r12, r0; \
>> - ADDI_PTR r13, sp, 10 * REGSIZE; \
>> - }; \
>> - LD r0, r13; /* pass mask as arg1 */ \
>> - CDISABLE; \
>> - { \
>> - ADDI_PTR lr, sp, STKSPACE; \
>> - ADDI_PTR r0, sp, 11 * REGSIZE; \
>> - }; \
>> - { \
>> - LD r0, r0; \
>> - ADDI_PTR r1, sp, 12 * REGSIZE; \
>> - }; \
>> - LD r1, r1; \
>> - { \
>> - LD lr, lr; \
>> - ADDI_PTR sp, sp, STKSPACE; \
>> - }; \
>> - cfi_def_cfa_offset (0); \
>> - BNEZ r1, 0f
>> -
>> -# define PUSHARGS_0 /* nothing to do */
>> -# define PUSHARGS_1 PUSHARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; ST r13, r0 };
>> -# define PUSHARGS_2 PUSHARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; ST r14, r1 };
>> -# define PUSHARGS_3 PUSHARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; ST r13, r2 };
>> -# define PUSHARGS_4 PUSHARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; ST r14, r3 };
>> -# define PUSHARGS_5 PUSHARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; ST r13, r4 };
>> -# define PUSHARGS_6 PUSHARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; ST r14, r5 };
>> -# define PUSHARGS_7 PUSHARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; ST r13, r6 };
>> -
>> -# define POPARGS_0 /* nothing to do */
>> -# define POPARGS_1 POPARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; LD r0, r13 };
>> -# define POPARGS_2 POPARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; LD r1, r14 };
>> -# define POPARGS_3 POPARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; LD r2, r13 };
>> -# define POPARGS_4 POPARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; LD r3, r14 };
>> -# define POPARGS_5 POPARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; LD r4, r13 };
>> -# define POPARGS_6 POPARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; LD r5, r14 };
>> -# define POPARGS_7 POPARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; LD r6, r13 };
>> -
>> -# define STKSPACE (13 * REGSIZE)
>> -
>> -# if IS_IN (libpthread)
>> -# define CENABLE jal __pthread_enable_asynccancel
>> -# define CDISABLE jal __pthread_disable_asynccancel
>> -# elif IS_IN (librt)
>> -# define CENABLE jal __librt_enable_asynccancel
>> -# define CDISABLE jal __librt_disable_asynccancel
>> -# else
>> -# define CENABLE jal __libc_enable_asynccancel
>> -# define CDISABLE jal __libc_disable_asynccancel
>> -# endif
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) \
>> == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P(reg) \
>> - ADDLI_PTR reg, tp, MULTIPLE_THREADS_OFFSET; \
>> - LD reg, reg; \
>> - CMPEQI reg, reg, 0
>> -#endif
>>
>> -#elif !defined __ASSEMBLER__
>> +#else
>>
>> # define SINGLE_THREAD_P 1
>> # define NO_CANCELLATION 1
>>
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> +#define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 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 6598010..0979bde 100644
>> --- a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
>> +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
>> @@ -24,86 +24,32 @@
>>
>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>
>> -/* The code to disable cancellation depends on the fact that the called
>> - functions are special. They don't modify registers other than %rax
>> - and %r11 if they return. Therefore we don't have to preserve other
>> - registers around these calls. */
>> -# undef PSEUDO
>> -# define PSEUDO(name, syscall_name, args) \
>> - .text; \
>> - ENTRY (name) \
>> - SINGLE_THREAD_P; \
>> - jne L(pseudo_cancel); \
>> - .type __##syscall_name##_nocancel,@function; \
>> - .globl __##syscall_name##_nocancel; \
>> - __##syscall_name##_nocancel: \
>> - DO_CALL (syscall_name, args); \
>> - cmpq $-4095, %rax; \
>> - jae SYSCALL_ERROR_LABEL; \
>> - ret; \
>> - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
>> - L(pseudo_cancel): \
>> - /* We always have to align the stack before calling a function. */ \
>> - subq $8, %rsp; cfi_adjust_cfa_offset (8); \
>> - CENABLE \
>> - /* The return value from CENABLE is argument for CDISABLE. */ \
>> - movq %rax, (%rsp); \
>> - DO_CALL (syscall_name, args); \
>> - movq (%rsp), %rdi; \
>> - /* Save %rax since it's the error code from the syscall. */ \
>> - movq %rax, %rdx; \
>> - CDISABLE \
>> - movq %rdx, %rax; \
>> - addq $8,%rsp; cfi_adjust_cfa_offset (-8); \
>> - cmpq $-4095, %rax; \
>> - jae SYSCALL_ERROR_LABEL
>> -
>> -
>> # if IS_IN (libpthread)
>> -# define CENABLE call __pthread_enable_asynccancel;
>> -# define CDISABLE call __pthread_disable_asynccancel;
>> # define __local_multiple_threads __pthread_multiple_threads
>> # elif IS_IN (libc)
>> -# define CENABLE call __libc_enable_asynccancel;
>> -# define CDISABLE call __libc_disable_asynccancel;
>> # define __local_multiple_threads __libc_multiple_threads
>> # elif IS_IN (librt)
>> -# define CENABLE call __librt_enable_asynccancel;
>> -# define CDISABLE call __librt_disable_asynccancel;
>> # else
>> # error Unsupported library
>> # endif
>>
>> # if IS_IN (libpthread) || IS_IN (libc)
>> -# ifndef __ASSEMBLER__
>> extern int __local_multiple_threads attribute_hidden;
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (__local_multiple_threads == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P cmpl $0, __local_multiple_threads(%rip)
>> -# endif
>> -
>> # else
>> -
>> -# ifndef __ASSEMBLER__
>> -# define SINGLE_THREAD_P \
>> +# define SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -# else
>> -# define SINGLE_THREAD_P cmpl $0, %fs:MULTIPLE_THREADS_OFFSET
>> -# endif
>> -
>> # endif
>>
>> -#elif !defined __ASSEMBLER__
>> +#else
>>
>> # define SINGLE_THREAD_P (1)
>> # define NO_CANCELLATION 1
>>
>> #endif
>>
>> -#ifndef __ASSEMBLER__
>> -# define RTLD_SINGLE_THREAD_P \
>> +#define RTLD_SINGLE_THREAD_P \
>> __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
>> header.multiple_threads) == 0, 1)
>> -#endif
>>
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 03/14] Consolidate non cancellable write call
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
` (3 preceding siblings ...)
2017-08-03 13:12 ` [PATCH 14/14] Remove cancellation support for syscall generation Adhemerval Zanella
@ 2017-08-03 13:12 ` Adhemerval Zanella
2017-08-18 13:36 ` Adhemerval Zanella
2017-08-03 13:12 ` [PATCH 06/14] Consolidate non cancellable writev call Adhemerval Zanella
` (9 subsequent siblings)
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:12 UTC (permalink / raw)
To: libc-alpha
This patch consolidates all the non cancellable write calls to use
the __write_nocancel identifier. For non cancellable targets it will
be just a macro to call the default respective symbol while on Linux
will be a internal one.
Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
* sysdeps/generic/not-cancel.h (write_not_cancel): Remove macro.
(__write_nocancel): New macro.
* sysdeps/unix/sysv/linux/not-cancel.h (__write_nocancel):
Rewrite as a function prototype.
(write_not_cancel): Remove macro.
* sysdeps/unix/sysv/linux/write.c (__write_nocancel): New function.
* gmon/gmon.c (ERR): Replace write_not_cancel with __write_nocancel.
(write_gmon): Likewise.
* libio/fileops.c (_IO_new_file_write): Likewise.
* login/utmp_file.c (pututline_file): Likewise.
(updwtmp_file): Likewise.
* stdio-common/psiginfo.c (psiginfo): Likewise.
* sysdeps/posix/spawni.c (__spawni_child): Likewise.
* sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise.
* sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps):
Likewise.
* sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np):
Likewise.
---
ChangeLog | 19 +++++++++++++++++++
gmon/gmon.c | 4 ++--
libio/fileops.c | 2 +-
login/utmp_file.c | 4 ++--
stdio-common/psiginfo.c | 2 +-
sysdeps/generic/not-cancel.h | 2 +-
sysdeps/posix/spawni.c | 3 +--
sysdeps/unix/sysv/linux/gethostid.c | 2 +-
sysdeps/unix/sysv/linux/libc_fatal.c | 4 ++--
sysdeps/unix/sysv/linux/not-cancel.h | 8 ++------
sysdeps/unix/sysv/linux/pthread_setname.c | 2 +-
sysdeps/unix/sysv/linux/write.c | 12 ++++++++++++
12 files changed, 45 insertions(+), 19 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 5199a69..0bc21b6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,24 @@
2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * sysdeps/generic/not-cancel.h (write_not_cancel): Remove macro.
+ (__write_nocancel): New macro.
+ * sysdeps/unix/sysv/linux/not-cancel.h (__write_nocancel):
+ Rewrite as a function prototype.
+ (write_not_cancel): Remove macro.
+ * sysdeps/unix/sysv/linux/write.c (__write_nocancel): New function.
+ * gmon/gmon.c (ERR): Replace write_not_cancel with __write_nocancel.
+ (write_gmon): Likewise.
+ * libio/fileops.c (_IO_new_file_write): Likewise.
+ * login/utmp_file.c (pututline_file): Likewise.
+ (updwtmp_file): Likewise.
+ * stdio-common/psiginfo.c (psiginfo): Likewise.
+ * sysdeps/posix/spawni.c (__spawni_child): Likewise.
+ * sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise.
+ * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps):
+ Likewise.
+ * sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np):
+ Likewise.
+
* sysdeps/generic/not-cancel.h (read_not_cancel): Remove macro.
(__read_nocancel): New macro.
* sysdeps/unix/sysv/linux/Versions (libc) [GLIBC_PRIVATE]: Add
diff --git a/gmon/gmon.c b/gmon/gmon.c
index 87c3c4e..e7701b9 100644
--- a/gmon/gmon.c
+++ b/gmon/gmon.c
@@ -58,7 +58,7 @@ struct gmonparam _gmonparam attribute_hidden = { GMON_PROF_OFF };
static int s_scale;
#define SCALE_1_TO_1 0x10000L
-#define ERR(s) write_not_cancel (STDERR_FILENO, s, sizeof (s) - 1)
+#define ERR(s) __write_nocancel (STDERR_FILENO, s, sizeof (s) - 1)
void moncontrol (int mode);
void __moncontrol (int mode);
@@ -375,7 +375,7 @@ write_gmon (void)
memcpy (&ghdr.cookie[0], GMON_MAGIC, sizeof (ghdr.cookie));
ghdr.version = GMON_VERSION;
memset (ghdr.spare, '\0', sizeof (ghdr.spare));
- write_not_cancel (fd, &ghdr, sizeof (struct gmon_hdr));
+ __write_nocancel (fd, &ghdr, sizeof (struct gmon_hdr));
/* write PC histogram: */
write_hist (fd);
diff --git a/libio/fileops.c b/libio/fileops.c
index 80bd3f5..f025178 100644
--- a/libio/fileops.c
+++ b/libio/fileops.c
@@ -1251,7 +1251,7 @@ _IO_new_file_write (_IO_FILE *f, const void *data, _IO_ssize_t n)
{
_IO_ssize_t count = (__builtin_expect (f->_flags2
& _IO_FLAGS2_NOTCANCEL, 0)
- ? write_not_cancel (f->_fileno, data, to_do)
+ ? __write_nocancel (f->_fileno, data, to_do)
: write (f->_fileno, data, to_do));
if (count < 0)
{
diff --git a/login/utmp_file.c b/login/utmp_file.c
index 61d03d6..26e3f4b 100644
--- a/login/utmp_file.c
+++ b/login/utmp_file.c
@@ -444,7 +444,7 @@ pututline_file (const struct utmp *data)
}
/* Write the new data. */
- if (write_not_cancel (file_fd, data, sizeof (struct utmp))
+ if (__write_nocancel (file_fd, data, sizeof (struct utmp))
!= sizeof (struct utmp))
{
/* If we appended a new record this is only partially written.
@@ -505,7 +505,7 @@ updwtmp_file (const char *file, const struct utmp *utmp)
/* Write the entry. If we can't write all the bytes, reset the file
size back to the original size. That way, no partial entries
will remain. */
- if (write_not_cancel (fd, utmp, sizeof (struct utmp))
+ if (__write_nocancel (fd, utmp, sizeof (struct utmp))
!= sizeof (struct utmp))
{
__ftruncate64 (fd, offset);
diff --git a/stdio-common/psiginfo.c b/stdio-common/psiginfo.c
index 6954a42..7bf2e2d 100644
--- a/stdio-common/psiginfo.c
+++ b/stdio-common/psiginfo.c
@@ -199,5 +199,5 @@ Signal generated by the completion of an I/O request");
fclose (fp);
- write_not_cancel (STDERR_FILENO, buf, strlen (buf));
+ __write_nocancel (STDERR_FILENO, buf, strlen (buf));
}
diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
index 4fada2f..e91cb6c 100644
--- a/sysdeps/generic/not-cancel.h
+++ b/sysdeps/generic/not-cancel.h
@@ -36,7 +36,7 @@
(void) __close (fd)
#define __read_nocancel(fd, buf, n) \
__read (fd, buf, n)
-#define write_not_cancel(fd, buf, n) \
+#define __write_nocancel(fd, buf, n) \
__write (fd, buf, n)
#define writev_not_cancel_no_status(fd, iov, n) \
(void) __writev (fd, iov, n)
diff --git a/sysdeps/posix/spawni.c b/sysdeps/posix/spawni.c
index 823db11..a43b841 100644
--- a/sysdeps/posix/spawni.c
+++ b/sysdeps/posix/spawni.c
@@ -233,8 +233,7 @@ fail:
abort(), but that seems needlessly harsh. */
ret = errno ? : ECHILD;
if (ret)
- /* Since sizeof errno < PIPE_BUF, the write is atomic. */
- while (write_not_cancel (args->pipe[1], &ret, sizeof (ret)) < 0);
+ while (__write_nocancel (args->pipe[1], &ret, sizeof (ret)) < 0);
_exit (SPAWN_ERROR);
}
diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c
index 6e19dee..11c7e73 100644
--- a/sysdeps/unix/sysv/linux/gethostid.c
+++ b/sysdeps/unix/sysv/linux/gethostid.c
@@ -51,7 +51,7 @@ sethostid (long int id)
if (fd < 0)
return -1;
- written = write_not_cancel (fd, &id32, sizeof (id32));
+ written = __write_nocancel (fd, &id32, sizeof (id32));
close_not_cancel_no_status (fd);
diff --git a/sysdeps/unix/sysv/linux/libc_fatal.c b/sysdeps/unix/sysv/linux/libc_fatal.c
index ca838a7..c7c6a07 100644
--- a/sysdeps/unix/sysv/linux/libc_fatal.c
+++ b/sysdeps/unix/sysv/linux/libc_fatal.c
@@ -48,7 +48,7 @@ backtrace_and_maps (int do_abort, bool written, int fd)
if (n > 2)
{
#define strnsize(str) str, strlen (str)
-#define writestr(str) write_not_cancel (fd, str)
+#define writestr(str) __write_nocancel (fd, str)
writestr (strnsize ("======= Backtrace: =========\n"));
__backtrace_symbols_fd (addrs + 1, n - 1, fd);
@@ -57,7 +57,7 @@ backtrace_and_maps (int do_abort, bool written, int fd)
char buf[1024];
ssize_t n2;
while ((n2 = __read_nocancel (fd2, buf, sizeof (buf))) > 0)
- if (write_not_cancel (fd, buf, n2) != n2)
+ if (__write_nocancel (fd, buf, n2) != n2)
break;
close_not_cancel_no_status (fd2);
}
diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
index 3d26075..84dc72a 100644
--- a/sysdeps/unix/sysv/linux/not-cancel.h
+++ b/sysdeps/unix/sysv/linux/not-cancel.h
@@ -39,8 +39,8 @@ __typeof (__read) __read_nocancel;
libc_hidden_proto (__read_nocancel)
/* Uncancelable write. */
-#define __write_nocancel(fd, buf, len) \
- INLINE_SYSCALL (write, 3, fd, buf, len)
+__typeof (__write) __write_nocancel;
+libc_hidden_proto (__write_nocancel)
/* Uncancelable openat. */
#define openat_not_cancel(fd, fname, oflag, mode) \
@@ -61,10 +61,6 @@ libc_hidden_proto (__read_nocancel)
(void) ({ INTERNAL_SYSCALL_DECL (err); \
INTERNAL_SYSCALL (close, err, 1, (fd)); })
-/* 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); \
diff --git a/sysdeps/unix/sysv/linux/pthread_setname.c b/sysdeps/unix/sysv/linux/pthread_setname.c
index 93f0e9d..c5e9a33 100644
--- a/sysdeps/unix/sysv/linux/pthread_setname.c
+++ b/sysdeps/unix/sysv/linux/pthread_setname.c
@@ -51,7 +51,7 @@ pthread_setname_np (pthread_t th, const char *name)
return errno;
int res = 0;
- ssize_t n = TEMP_FAILURE_RETRY (write_not_cancel (fd, name, name_len));
+ ssize_t n = TEMP_FAILURE_RETRY (__write_nocancel (fd, name, name_len));
if (n < 0)
res = errno;
else if (n != name_len)
diff --git a/sysdeps/unix/sysv/linux/write.c b/sysdeps/unix/sysv/linux/write.c
index d495145..f8896eb 100644
--- a/sysdeps/unix/sysv/linux/write.c
+++ b/sysdeps/unix/sysv/linux/write.c
@@ -18,6 +18,7 @@
#include <unistd.h>
#include <sysdep-cancel.h>
+#include <not-cancel.h>
/* Write NBYTES of BUF to FD. Return the number written, or -1. */
ssize_t
@@ -31,3 +32,14 @@ weak_alias (__libc_write, __write)
libc_hidden_weak (__write)
weak_alias (__libc_write, write)
libc_hidden_weak (write)
+
+#if !IS_IN (rtld)
+ssize_t
+__write_nocancel (int fd, const void *buf, size_t nbytes)
+{
+ return INLINE_SYSCALL_CALL (write, fd, buf, nbytes);
+}
+#else
+strong_alias (__libc_write, __write_nocancel)
+#endif
+libc_hidden_def (__write_nocancel)
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 03/14] Consolidate non cancellable write call
2017-08-03 13:12 ` [PATCH 03/14] Consolidate non cancellable write call Adhemerval Zanella
@ 2017-08-18 13:36 ` Adhemerval Zanella
0 siblings, 0 replies; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-18 13:36 UTC (permalink / raw)
To: libc-alpha
Since this is a refactor, if no one opposes I will commit it shortly.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> This patch consolidates all the non cancellable write calls to use
> the __write_nocancel identifier. For non cancellable targets it will
> be just a macro to call the default respective symbol while on Linux
> will be a internal one.
>
> Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
>
> * sysdeps/generic/not-cancel.h (write_not_cancel): Remove macro.
> (__write_nocancel): New macro.
> * sysdeps/unix/sysv/linux/not-cancel.h (__write_nocancel):
> Rewrite as a function prototype.
> (write_not_cancel): Remove macro.
> * sysdeps/unix/sysv/linux/write.c (__write_nocancel): New function.
> * gmon/gmon.c (ERR): Replace write_not_cancel with __write_nocancel.
> (write_gmon): Likewise.
> * libio/fileops.c (_IO_new_file_write): Likewise.
> * login/utmp_file.c (pututline_file): Likewise.
> (updwtmp_file): Likewise.
> * stdio-common/psiginfo.c (psiginfo): Likewise.
> * sysdeps/posix/spawni.c (__spawni_child): Likewise.
> * sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise.
> * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps):
> Likewise.
> * sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np):
> Likewise.
> ---
> ChangeLog | 19 +++++++++++++++++++
> gmon/gmon.c | 4 ++--
> libio/fileops.c | 2 +-
> login/utmp_file.c | 4 ++--
> stdio-common/psiginfo.c | 2 +-
> sysdeps/generic/not-cancel.h | 2 +-
> sysdeps/posix/spawni.c | 3 +--
> sysdeps/unix/sysv/linux/gethostid.c | 2 +-
> sysdeps/unix/sysv/linux/libc_fatal.c | 4 ++--
> sysdeps/unix/sysv/linux/not-cancel.h | 8 ++------
> sysdeps/unix/sysv/linux/pthread_setname.c | 2 +-
> sysdeps/unix/sysv/linux/write.c | 12 ++++++++++++
> 12 files changed, 45 insertions(+), 19 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 5199a69..0bc21b6 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,24 @@
> 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> + * sysdeps/generic/not-cancel.h (write_not_cancel): Remove macro.
> + (__write_nocancel): New macro.
> + * sysdeps/unix/sysv/linux/not-cancel.h (__write_nocancel):
> + Rewrite as a function prototype.
> + (write_not_cancel): Remove macro.
> + * sysdeps/unix/sysv/linux/write.c (__write_nocancel): New function.
> + * gmon/gmon.c (ERR): Replace write_not_cancel with __write_nocancel.
> + (write_gmon): Likewise.
> + * libio/fileops.c (_IO_new_file_write): Likewise.
> + * login/utmp_file.c (pututline_file): Likewise.
> + (updwtmp_file): Likewise.
> + * stdio-common/psiginfo.c (psiginfo): Likewise.
> + * sysdeps/posix/spawni.c (__spawni_child): Likewise.
> + * sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise.
> + * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps):
> + Likewise.
> + * sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np):
> + Likewise.
> +
> * sysdeps/generic/not-cancel.h (read_not_cancel): Remove macro.
> (__read_nocancel): New macro.
> * sysdeps/unix/sysv/linux/Versions (libc) [GLIBC_PRIVATE]: Add
> diff --git a/gmon/gmon.c b/gmon/gmon.c
> index 87c3c4e..e7701b9 100644
> --- a/gmon/gmon.c
> +++ b/gmon/gmon.c
> @@ -58,7 +58,7 @@ struct gmonparam _gmonparam attribute_hidden = { GMON_PROF_OFF };
> static int s_scale;
> #define SCALE_1_TO_1 0x10000L
>
> -#define ERR(s) write_not_cancel (STDERR_FILENO, s, sizeof (s) - 1)
> +#define ERR(s) __write_nocancel (STDERR_FILENO, s, sizeof (s) - 1)
>
> void moncontrol (int mode);
> void __moncontrol (int mode);
> @@ -375,7 +375,7 @@ write_gmon (void)
> memcpy (&ghdr.cookie[0], GMON_MAGIC, sizeof (ghdr.cookie));
> ghdr.version = GMON_VERSION;
> memset (ghdr.spare, '\0', sizeof (ghdr.spare));
> - write_not_cancel (fd, &ghdr, sizeof (struct gmon_hdr));
> + __write_nocancel (fd, &ghdr, sizeof (struct gmon_hdr));
>
> /* write PC histogram: */
> write_hist (fd);
> diff --git a/libio/fileops.c b/libio/fileops.c
> index 80bd3f5..f025178 100644
> --- a/libio/fileops.c
> +++ b/libio/fileops.c
> @@ -1251,7 +1251,7 @@ _IO_new_file_write (_IO_FILE *f, const void *data, _IO_ssize_t n)
> {
> _IO_ssize_t count = (__builtin_expect (f->_flags2
> & _IO_FLAGS2_NOTCANCEL, 0)
> - ? write_not_cancel (f->_fileno, data, to_do)
> + ? __write_nocancel (f->_fileno, data, to_do)
> : write (f->_fileno, data, to_do));
> if (count < 0)
> {
> diff --git a/login/utmp_file.c b/login/utmp_file.c
> index 61d03d6..26e3f4b 100644
> --- a/login/utmp_file.c
> +++ b/login/utmp_file.c
> @@ -444,7 +444,7 @@ pututline_file (const struct utmp *data)
> }
>
> /* Write the new data. */
> - if (write_not_cancel (file_fd, data, sizeof (struct utmp))
> + if (__write_nocancel (file_fd, data, sizeof (struct utmp))
> != sizeof (struct utmp))
> {
> /* If we appended a new record this is only partially written.
> @@ -505,7 +505,7 @@ updwtmp_file (const char *file, const struct utmp *utmp)
> /* Write the entry. If we can't write all the bytes, reset the file
> size back to the original size. That way, no partial entries
> will remain. */
> - if (write_not_cancel (fd, utmp, sizeof (struct utmp))
> + if (__write_nocancel (fd, utmp, sizeof (struct utmp))
> != sizeof (struct utmp))
> {
> __ftruncate64 (fd, offset);
> diff --git a/stdio-common/psiginfo.c b/stdio-common/psiginfo.c
> index 6954a42..7bf2e2d 100644
> --- a/stdio-common/psiginfo.c
> +++ b/stdio-common/psiginfo.c
> @@ -199,5 +199,5 @@ Signal generated by the completion of an I/O request");
>
> fclose (fp);
>
> - write_not_cancel (STDERR_FILENO, buf, strlen (buf));
> + __write_nocancel (STDERR_FILENO, buf, strlen (buf));
> }
> diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
> index 4fada2f..e91cb6c 100644
> --- a/sysdeps/generic/not-cancel.h
> +++ b/sysdeps/generic/not-cancel.h
> @@ -36,7 +36,7 @@
> (void) __close (fd)
> #define __read_nocancel(fd, buf, n) \
> __read (fd, buf, n)
> -#define write_not_cancel(fd, buf, n) \
> +#define __write_nocancel(fd, buf, n) \
> __write (fd, buf, n)
> #define writev_not_cancel_no_status(fd, iov, n) \
> (void) __writev (fd, iov, n)
> diff --git a/sysdeps/posix/spawni.c b/sysdeps/posix/spawni.c
> index 823db11..a43b841 100644
> --- a/sysdeps/posix/spawni.c
> +++ b/sysdeps/posix/spawni.c
> @@ -233,8 +233,7 @@ fail:
> abort(), but that seems needlessly harsh. */
> ret = errno ? : ECHILD;
> if (ret)
> - /* Since sizeof errno < PIPE_BUF, the write is atomic. */
> - while (write_not_cancel (args->pipe[1], &ret, sizeof (ret)) < 0);
> + while (__write_nocancel (args->pipe[1], &ret, sizeof (ret)) < 0);
>
> _exit (SPAWN_ERROR);
> }
> diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c
> index 6e19dee..11c7e73 100644
> --- a/sysdeps/unix/sysv/linux/gethostid.c
> +++ b/sysdeps/unix/sysv/linux/gethostid.c
> @@ -51,7 +51,7 @@ sethostid (long int id)
> if (fd < 0)
> return -1;
>
> - written = write_not_cancel (fd, &id32, sizeof (id32));
> + written = __write_nocancel (fd, &id32, sizeof (id32));
>
> close_not_cancel_no_status (fd);
>
> diff --git a/sysdeps/unix/sysv/linux/libc_fatal.c b/sysdeps/unix/sysv/linux/libc_fatal.c
> index ca838a7..c7c6a07 100644
> --- a/sysdeps/unix/sysv/linux/libc_fatal.c
> +++ b/sysdeps/unix/sysv/linux/libc_fatal.c
> @@ -48,7 +48,7 @@ backtrace_and_maps (int do_abort, bool written, int fd)
> if (n > 2)
> {
> #define strnsize(str) str, strlen (str)
> -#define writestr(str) write_not_cancel (fd, str)
> +#define writestr(str) __write_nocancel (fd, str)
> writestr (strnsize ("======= Backtrace: =========\n"));
> __backtrace_symbols_fd (addrs + 1, n - 1, fd);
>
> @@ -57,7 +57,7 @@ backtrace_and_maps (int do_abort, bool written, int fd)
> char buf[1024];
> ssize_t n2;
> while ((n2 = __read_nocancel (fd2, buf, sizeof (buf))) > 0)
> - if (write_not_cancel (fd, buf, n2) != n2)
> + if (__write_nocancel (fd, buf, n2) != n2)
> break;
> close_not_cancel_no_status (fd2);
> }
> diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
> index 3d26075..84dc72a 100644
> --- a/sysdeps/unix/sysv/linux/not-cancel.h
> +++ b/sysdeps/unix/sysv/linux/not-cancel.h
> @@ -39,8 +39,8 @@ __typeof (__read) __read_nocancel;
> libc_hidden_proto (__read_nocancel)
>
> /* Uncancelable write. */
> -#define __write_nocancel(fd, buf, len) \
> - INLINE_SYSCALL (write, 3, fd, buf, len)
> +__typeof (__write) __write_nocancel;
> +libc_hidden_proto (__write_nocancel)
>
> /* Uncancelable openat. */
> #define openat_not_cancel(fd, fname, oflag, mode) \
> @@ -61,10 +61,6 @@ libc_hidden_proto (__read_nocancel)
> (void) ({ INTERNAL_SYSCALL_DECL (err); \
> INTERNAL_SYSCALL (close, err, 1, (fd)); })
>
> -/* 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); \
> diff --git a/sysdeps/unix/sysv/linux/pthread_setname.c b/sysdeps/unix/sysv/linux/pthread_setname.c
> index 93f0e9d..c5e9a33 100644
> --- a/sysdeps/unix/sysv/linux/pthread_setname.c
> +++ b/sysdeps/unix/sysv/linux/pthread_setname.c
> @@ -51,7 +51,7 @@ pthread_setname_np (pthread_t th, const char *name)
> return errno;
>
> int res = 0;
> - ssize_t n = TEMP_FAILURE_RETRY (write_not_cancel (fd, name, name_len));
> + ssize_t n = TEMP_FAILURE_RETRY (__write_nocancel (fd, name, name_len));
> if (n < 0)
> res = errno;
> else if (n != name_len)
> diff --git a/sysdeps/unix/sysv/linux/write.c b/sysdeps/unix/sysv/linux/write.c
> index d495145..f8896eb 100644
> --- a/sysdeps/unix/sysv/linux/write.c
> +++ b/sysdeps/unix/sysv/linux/write.c
> @@ -18,6 +18,7 @@
>
> #include <unistd.h>
> #include <sysdep-cancel.h>
> +#include <not-cancel.h>
>
> /* Write NBYTES of BUF to FD. Return the number written, or -1. */
> ssize_t
> @@ -31,3 +32,14 @@ weak_alias (__libc_write, __write)
> libc_hidden_weak (__write)
> weak_alias (__libc_write, write)
> libc_hidden_weak (write)
> +
> +#if !IS_IN (rtld)
> +ssize_t
> +__write_nocancel (int fd, const void *buf, size_t nbytes)
> +{
> + return INLINE_SYSCALL_CALL (write, fd, buf, nbytes);
> +}
> +#else
> +strong_alias (__libc_write, __write_nocancel)
> +#endif
> +libc_hidden_def (__write_nocancel)
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 06/14] Consolidate non cancellable writev call
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
` (4 preceding siblings ...)
2017-08-03 13:12 ` [PATCH 03/14] Consolidate non cancellable write call Adhemerval Zanella
@ 2017-08-03 13:12 ` Adhemerval Zanella
2017-08-21 14:37 ` Adhemerval Zanella
2017-08-03 13:12 ` [PATCH 11/14] Remove non cancellable sigsuspend definition Adhemerval Zanella
` (8 subsequent siblings)
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:12 UTC (permalink / raw)
To: libc-alpha
This patch consolidates all the non cancellable writev calls to use
the __writev_nocancel identifier. For non cancellable targets it will
be just a macro to call the default respective symbol while on Linux
will be a internal one.
Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
* gmon/gmon.c (write_hist): Replace writev_not_cancel_no_status with
__writev_nocancel_nostatus.
(write_call_graph): Likewise.
(write_bb_counts): Likewise.
* resolv/herror.c (herror): Likewise.
* sysdeps/generic/not-cancel.h (writev_not_cancel_no_status): Remove
macro.
(__writev_nocancel_nostatus): New macro.
* sysdeps/unix/sysv/linux/not-cancel.h (writev_not_cancel_no_status):
Remove macro.
(__writev_nocancel_nostatus): New function.
---
ChangeLog | 12 ++++++++++++
gmon/gmon.c | 12 ++++++------
resolv/herror.c | 2 +-
sysdeps/generic/not-cancel.h | 2 +-
sysdeps/unix/sysv/linux/not-cancel.h | 12 ++++++++----
5 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 4ee70fb..fbf0c6a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * gmon/gmon.c (write_hist): Replace writev_not_cancel_no_status with
+ __writev_nocancel_nostatus.
+ (write_call_graph): Likewise.
+ (write_bb_counts): Likewise.
+ * resolv/herror.c (herror): Likewise.
+ * sysdeps/generic/not-cancel.h (writev_not_cancel_no_status): Remove
+ macro.
+ (__writev_nocancel_nostatus): New macro.
+ * sysdeps/unix/sysv/linux/not-cancel.h (writev_not_cancel_no_status):
+ Remove macro.
+ (__writev_nocancel_nostatus): New function.
+
* sysdeps/generic/not-cancel.h (close_not_cancel): Remove macro.
(close_not_cancel_no_status): Likewise.
(__close_nocancel): New macro.
diff --git a/gmon/gmon.c b/gmon/gmon.c
index 90c7895..c1d1701 100644
--- a/gmon/gmon.c
+++ b/gmon/gmon.c
@@ -216,7 +216,7 @@ write_hist (int fd)
strncpy (thdr.dimen, "seconds", sizeof (thdr.dimen));
thdr.dimen_abbrev = 's';
- writev_not_cancel_no_status (fd, iov, 3);
+ __writev_nocancel_nostatus (fd, iov, 3);
}
}
@@ -273,13 +273,13 @@ write_call_graph (int fd)
if (++nfilled == NARCS_PER_WRITEV)
{
- writev_not_cancel_no_status (fd, iov, 2 * nfilled);
+ __writev_nocancel_nostatus (fd, iov, 2 * nfilled);
nfilled = 0;
}
}
}
if (nfilled > 0)
- writev_not_cancel_no_status (fd, iov, 2 * nfilled);
+ __writev_nocancel_nostatus (fd, iov, 2 * nfilled);
}
@@ -312,12 +312,12 @@ write_bb_counts (int fd)
for (grp = __bb_head; grp; grp = grp->next)
{
ncounts = grp->ncounts;
- writev_not_cancel_no_status (fd, bbhead, 2);
+ __writev_nocancel_nostatus (fd, bbhead, 2);
for (nfilled = i = 0; i < ncounts; ++i)
{
if (nfilled > (sizeof (bbbody) / sizeof (bbbody[0])) - 2)
{
- writev_not_cancel_no_status (fd, bbbody, nfilled);
+ __writev_nocancel_nostatus (fd, bbbody, nfilled);
nfilled = 0;
}
@@ -325,7 +325,7 @@ write_bb_counts (int fd)
bbbody[nfilled++].iov_base = &grp->counts[i];
}
if (nfilled > 0)
- writev_not_cancel_no_status (fd, bbbody, nfilled);
+ __writev_nocancel_nostatus (fd, bbbody, nfilled);
}
}
diff --git a/resolv/herror.c b/resolv/herror.c
index b3df236..45c0a5d 100644
--- a/resolv/herror.c
+++ b/resolv/herror.c
@@ -89,7 +89,7 @@ herror(const char *s) {
v++;
v->iov_base = (char *) "\n";
v->iov_len = 1;
- writev_not_cancel_no_status(STDERR_FILENO, iov, (v - iov) + 1);
+ __writev_nocancel_nostatus(STDERR_FILENO, iov, (v - iov) + 1);
}
/*
diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
index ee9988a..e3ed0e6 100644
--- a/sysdeps/generic/not-cancel.h
+++ b/sysdeps/generic/not-cancel.h
@@ -34,7 +34,7 @@
__read (fd, buf, n)
#define __write_nocancel(fd, buf, n) \
__write (fd, buf, n)
-#define writev_not_cancel_no_status(fd, iov, n) \
+#define __writev_nocancel_nostatus(fd, iov, n) \
(void) __writev (fd, iov, n)
#define fcntl_not_cancel(fd, cmd, val) \
__fcntl (fd, cmd, val)
diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
index 684541a..419a3fa 100644
--- a/sysdeps/unix/sysv/linux/not-cancel.h
+++ b/sysdeps/unix/sysv/linux/not-cancel.h
@@ -63,10 +63,14 @@ __close_nocancel_nostatus (int fd)
INTERNAL_SYSCALL (close, err, 1, (fd));
}
-/* Uncancelable writev. */
-#define writev_not_cancel_no_status(fd, iov, n) \
- (void) ({ INTERNAL_SYSCALL_DECL (err); \
- INTERNAL_SYSCALL (writev, err, 3, (fd), (iov), (n)); })
+/* Non cancellable writev syscall that does not also set errno in case of
+ failure. */
+static inline void
+__writev_nocancel_nostatus (int fd, const struct iovec *iov, int iovcnt)
+{
+ INTERNAL_SYSCALL_DECL (err);
+ INTERNAL_SYSCALL_CALL (writev, err, fd, iov, iovcnt);
+}
/* Uncancelable fcntl. */
#define fcntl_not_cancel(fd, cmd, val) \
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 06/14] Consolidate non cancellable writev call
2017-08-03 13:12 ` [PATCH 06/14] Consolidate non cancellable writev call Adhemerval Zanella
@ 2017-08-21 14:37 ` Adhemerval Zanella
0 siblings, 0 replies; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-21 14:37 UTC (permalink / raw)
To: libc-alpha
Since this is a refactor, if no one opposes I will commit it shortly.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> This patch consolidates all the non cancellable writev calls to use
> the __writev_nocancel identifier. For non cancellable targets it will
> be just a macro to call the default respective symbol while on Linux
> will be a internal one.
>
> Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
>
> * gmon/gmon.c (write_hist): Replace writev_not_cancel_no_status with
> __writev_nocancel_nostatus.
> (write_call_graph): Likewise.
> (write_bb_counts): Likewise.
> * resolv/herror.c (herror): Likewise.
> * sysdeps/generic/not-cancel.h (writev_not_cancel_no_status): Remove
> macro.
> (__writev_nocancel_nostatus): New macro.
> * sysdeps/unix/sysv/linux/not-cancel.h (writev_not_cancel_no_status):
> Remove macro.
> (__writev_nocancel_nostatus): New function.
> ---
> ChangeLog | 12 ++++++++++++
> gmon/gmon.c | 12 ++++++------
> resolv/herror.c | 2 +-
> sysdeps/generic/not-cancel.h | 2 +-
> sysdeps/unix/sysv/linux/not-cancel.h | 12 ++++++++----
> 5 files changed, 28 insertions(+), 12 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 4ee70fb..fbf0c6a 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,17 @@
> 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> + * gmon/gmon.c (write_hist): Replace writev_not_cancel_no_status with
> + __writev_nocancel_nostatus.
> + (write_call_graph): Likewise.
> + (write_bb_counts): Likewise.
> + * resolv/herror.c (herror): Likewise.
> + * sysdeps/generic/not-cancel.h (writev_not_cancel_no_status): Remove
> + macro.
> + (__writev_nocancel_nostatus): New macro.
> + * sysdeps/unix/sysv/linux/not-cancel.h (writev_not_cancel_no_status):
> + Remove macro.
> + (__writev_nocancel_nostatus): New function.
> +
> * sysdeps/generic/not-cancel.h (close_not_cancel): Remove macro.
> (close_not_cancel_no_status): Likewise.
> (__close_nocancel): New macro.
> diff --git a/gmon/gmon.c b/gmon/gmon.c
> index 90c7895..c1d1701 100644
> --- a/gmon/gmon.c
> +++ b/gmon/gmon.c
> @@ -216,7 +216,7 @@ write_hist (int fd)
> strncpy (thdr.dimen, "seconds", sizeof (thdr.dimen));
> thdr.dimen_abbrev = 's';
>
> - writev_not_cancel_no_status (fd, iov, 3);
> + __writev_nocancel_nostatus (fd, iov, 3);
> }
> }
>
> @@ -273,13 +273,13 @@ write_call_graph (int fd)
>
> if (++nfilled == NARCS_PER_WRITEV)
> {
> - writev_not_cancel_no_status (fd, iov, 2 * nfilled);
> + __writev_nocancel_nostatus (fd, iov, 2 * nfilled);
> nfilled = 0;
> }
> }
> }
> if (nfilled > 0)
> - writev_not_cancel_no_status (fd, iov, 2 * nfilled);
> + __writev_nocancel_nostatus (fd, iov, 2 * nfilled);
> }
>
>
> @@ -312,12 +312,12 @@ write_bb_counts (int fd)
> for (grp = __bb_head; grp; grp = grp->next)
> {
> ncounts = grp->ncounts;
> - writev_not_cancel_no_status (fd, bbhead, 2);
> + __writev_nocancel_nostatus (fd, bbhead, 2);
> for (nfilled = i = 0; i < ncounts; ++i)
> {
> if (nfilled > (sizeof (bbbody) / sizeof (bbbody[0])) - 2)
> {
> - writev_not_cancel_no_status (fd, bbbody, nfilled);
> + __writev_nocancel_nostatus (fd, bbbody, nfilled);
> nfilled = 0;
> }
>
> @@ -325,7 +325,7 @@ write_bb_counts (int fd)
> bbbody[nfilled++].iov_base = &grp->counts[i];
> }
> if (nfilled > 0)
> - writev_not_cancel_no_status (fd, bbbody, nfilled);
> + __writev_nocancel_nostatus (fd, bbbody, nfilled);
> }
> }
>
> diff --git a/resolv/herror.c b/resolv/herror.c
> index b3df236..45c0a5d 100644
> --- a/resolv/herror.c
> +++ b/resolv/herror.c
> @@ -89,7 +89,7 @@ herror(const char *s) {
> v++;
> v->iov_base = (char *) "\n";
> v->iov_len = 1;
> - writev_not_cancel_no_status(STDERR_FILENO, iov, (v - iov) + 1);
> + __writev_nocancel_nostatus(STDERR_FILENO, iov, (v - iov) + 1);
> }
>
> /*
> diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
> index ee9988a..e3ed0e6 100644
> --- a/sysdeps/generic/not-cancel.h
> +++ b/sysdeps/generic/not-cancel.h
> @@ -34,7 +34,7 @@
> __read (fd, buf, n)
> #define __write_nocancel(fd, buf, n) \
> __write (fd, buf, n)
> -#define writev_not_cancel_no_status(fd, iov, n) \
> +#define __writev_nocancel_nostatus(fd, iov, n) \
> (void) __writev (fd, iov, n)
> #define fcntl_not_cancel(fd, cmd, val) \
> __fcntl (fd, cmd, val)
> diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
> index 684541a..419a3fa 100644
> --- a/sysdeps/unix/sysv/linux/not-cancel.h
> +++ b/sysdeps/unix/sysv/linux/not-cancel.h
> @@ -63,10 +63,14 @@ __close_nocancel_nostatus (int fd)
> INTERNAL_SYSCALL (close, err, 1, (fd));
> }
>
> -/* Uncancelable writev. */
> -#define writev_not_cancel_no_status(fd, iov, n) \
> - (void) ({ INTERNAL_SYSCALL_DECL (err); \
> - INTERNAL_SYSCALL (writev, err, 3, (fd), (iov), (n)); })
> +/* Non cancellable writev syscall that does not also set errno in case of
> + failure. */
> +static inline void
> +__writev_nocancel_nostatus (int fd, const struct iovec *iov, int iovcnt)
> +{
> + INTERNAL_SYSCALL_DECL (err);
> + INTERNAL_SYSCALL_CALL (writev, err, fd, iov, iovcnt);
> +}
>
> /* Uncancelable fcntl. */
> #define fcntl_not_cancel(fd, cmd, val) \
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 11/14] Remove non cancellable sigsuspend definition
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
` (5 preceding siblings ...)
2017-08-03 13:12 ` [PATCH 06/14] Consolidate non cancellable writev call Adhemerval Zanella
@ 2017-08-03 13:12 ` Adhemerval Zanella
2017-08-22 13:07 ` Adhemerval Zanella
2017-08-03 13:12 ` [PATCH 05/14] Consolidate non cancellable close call Adhemerval Zanella
` (7 subsequent siblings)
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:12 UTC (permalink / raw)
To: libc-alpha
There is no current internal usage fo non cancellable sigsuspend calls.
Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
* sysdeps/generic/not-cancel.h (sigsuspend_not_cancel): Remove
macro.
* sysdeps/unix/sysv/linux/not-cancel.h (sigsuspend_not_cancel):
Likewise.
---
ChangeLog | 5 +++++
sysdeps/generic/not-cancel.h | 2 --
sysdeps/mach/hurd/sigsuspend.c | 1 -
sysdeps/unix/sysv/linux/not-cancel.h | 4 ----
4 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index bf9bd57..9ed9789 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * sysdeps/generic/not-cancel.h (sigsuspend_not_cancel): Remove
+ macro.
+ * sysdeps/unix/sysv/linux/not-cancel.h (sigsuspend_not_cancel):
+ Likewise.
+
* nptl/pthread_mutex_timedlock.c (__pthread_mutex_timedlock): Replace
nanosleep_not_cancel with __nanosleep_nocancel.
* sysdeps/generic/not-cancel.h (nanosleep_not_cancel): Remove macro.
diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
index e4a8584..70ead55 100644
--- a/sysdeps/generic/not-cancel.h
+++ b/sysdeps/generic/not-cancel.h
@@ -42,7 +42,5 @@
__pause ()
#define __nanosleep_nocancel(requested_time, remaining) \
__nanosleep (requested_time, remaining)
-#define sigsuspend_not_cancel(set) \
- __sigsuspend (set)
#define NO_CANCELLATION 1
diff --git a/sysdeps/mach/hurd/sigsuspend.c b/sysdeps/mach/hurd/sigsuspend.c
index 4f5af1d..e60f2eb 100644
--- a/sysdeps/mach/hurd/sigsuspend.c
+++ b/sysdeps/mach/hurd/sigsuspend.c
@@ -79,5 +79,4 @@ __sigsuspend (const sigset_t *set)
return -1;
}
libc_hidden_def (__sigsuspend)
-strong_alias (__sigsuspend, sigsuspend_not_cancel)
weak_alias (__sigsuspend, sigsuspend)
diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
index 07f07f6..8740d40 100644
--- a/sysdeps/unix/sysv/linux/not-cancel.h
+++ b/sysdeps/unix/sysv/linux/not-cancel.h
@@ -86,8 +86,4 @@ libc_hidden_proto (__pause_nocancel)
__typeof (__nanosleep) __nanosleep_nocancel;
hidden_proto (__nanosleep_nocancel)
-/* Uncancelable sigsuspend. */
-#define sigsuspend_not_cancel(set) \
- INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8)
-
#endif /* NOT_CANCEL_H */
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 11/14] Remove non cancellable sigsuspend definition
2017-08-03 13:12 ` [PATCH 11/14] Remove non cancellable sigsuspend definition Adhemerval Zanella
@ 2017-08-22 13:07 ` Adhemerval Zanella
0 siblings, 0 replies; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-22 13:07 UTC (permalink / raw)
To: libc-alpha
Since this is a refactor, if no one opposes I will commit it shortly.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> There is no current internal usage fo non cancellable sigsuspend calls.
>
> Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
>
> * sysdeps/generic/not-cancel.h (sigsuspend_not_cancel): Remove
> macro.
> * sysdeps/unix/sysv/linux/not-cancel.h (sigsuspend_not_cancel):
> Likewise.
> ---
> ChangeLog | 5 +++++
> sysdeps/generic/not-cancel.h | 2 --
> sysdeps/mach/hurd/sigsuspend.c | 1 -
> sysdeps/unix/sysv/linux/not-cancel.h | 4 ----
> 4 files changed, 5 insertions(+), 7 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index bf9bd57..9ed9789 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,10 @@
> 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> + * sysdeps/generic/not-cancel.h (sigsuspend_not_cancel): Remove
> + macro.
> + * sysdeps/unix/sysv/linux/not-cancel.h (sigsuspend_not_cancel):
> + Likewise.
> +
> * nptl/pthread_mutex_timedlock.c (__pthread_mutex_timedlock): Replace
> nanosleep_not_cancel with __nanosleep_nocancel.
> * sysdeps/generic/not-cancel.h (nanosleep_not_cancel): Remove macro.
> diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
> index e4a8584..70ead55 100644
> --- a/sysdeps/generic/not-cancel.h
> +++ b/sysdeps/generic/not-cancel.h
> @@ -42,7 +42,5 @@
> __pause ()
> #define __nanosleep_nocancel(requested_time, remaining) \
> __nanosleep (requested_time, remaining)
> -#define sigsuspend_not_cancel(set) \
> - __sigsuspend (set)
>
> #define NO_CANCELLATION 1
> diff --git a/sysdeps/mach/hurd/sigsuspend.c b/sysdeps/mach/hurd/sigsuspend.c
> index 4f5af1d..e60f2eb 100644
> --- a/sysdeps/mach/hurd/sigsuspend.c
> +++ b/sysdeps/mach/hurd/sigsuspend.c
> @@ -79,5 +79,4 @@ __sigsuspend (const sigset_t *set)
> return -1;
> }
> libc_hidden_def (__sigsuspend)
> -strong_alias (__sigsuspend, sigsuspend_not_cancel)
> weak_alias (__sigsuspend, sigsuspend)
> diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
> index 07f07f6..8740d40 100644
> --- a/sysdeps/unix/sysv/linux/not-cancel.h
> +++ b/sysdeps/unix/sysv/linux/not-cancel.h
> @@ -86,8 +86,4 @@ libc_hidden_proto (__pause_nocancel)
> __typeof (__nanosleep) __nanosleep_nocancel;
> hidden_proto (__nanosleep_nocancel)
>
> -/* Uncancelable sigsuspend. */
> -#define sigsuspend_not_cancel(set) \
> - INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8)
> -
> #endif /* NOT_CANCEL_H */
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 05/14] Consolidate non cancellable close call
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
` (6 preceding siblings ...)
2017-08-03 13:12 ` [PATCH 11/14] Remove non cancellable sigsuspend definition Adhemerval Zanella
@ 2017-08-03 13:12 ` Adhemerval Zanella
2017-08-18 13:55 ` Adhemerval Zanella
2017-08-03 13:12 ` [PATCH 07/14] Consolidate non cancellable fcntl call Adhemerval Zanella
` (6 subsequent siblings)
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:12 UTC (permalink / raw)
To: libc-alpha
This patch consolidates all the non cancellable close calls to use
the __close_nocancel{_nostatus} identifier. For non cancellable targets
it will be just a macro to call the default respective symbol while on Linux
will be a internal one.
Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
* sysdeps/generic/not-cancel.h (close_not_cancel): Remove macro.
(close_not_cancel_no_status): Likewise.
(__close_nocancel): New macro.
(__close_nocancel_no_status): Likewise.
* sysdeps/unix/sysv/linux/not-cancel.h (__close_nocancel): Remove
macro.
(close_not_cancel): Likewise.
(close_not_cancel_no_status): Likewise.
(__close_nocancel): New prototype.
(__close_nocancel_no_status): New function.
* sysdeps/unix/sysv/linux/close.c (__close_nocancel): New function.
* catgets/open_catalog.c (__open_catalog): Replace
close_not_cancel{_no_status) with __close_nocancel{_nostatus}.
* gmon/gmon.c (write_gmon): Likewise.
* iconv/gconv_cache.c (__gconv_load_cache): Likewise.
* intl/loadmsgcat.c (close): Likewise.
* io/ftw.c (open_dir_stream): Likewise.
(ftw_startup): Likewise.
* libio/fileops.c (_IO_file_open): Likewise.
(_IO_file_close_mmap): Likewise.
(_IO_file_close): Likewise.
* libio/iopopen.c (_IO_dup2): Likewise.
* locale/loadarchive.c (_nl_load_locale_from_archive): Likewise.
* locale/loadlocale.c (_nl_load_locale): Likewise.
* login/utmp_file.c (pututline_file): Likewise.
(endutent_file): Likewise.
* misc/daemon.c (daemon): Likewise.
* nscd/nscd_getai.c (__nscd_getai): Likewise.
* nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise.
* nscd/nscd_gethst_r.c (nscd_gethst_r): Likewise.
* nscd/nscd_getpw_r.c (nscd_getpw_r): Likewise.
* nscd/nscd_getserv_r.c (nscd_getserv_r): Likewise.
* nscd/nscd_helper.c (open_socket): Likewise.
(__nscd_open_socket): Likewise.
* nscd/nscd_initgroups.c (__nscd_getgrouplist): Likewise.
* nscd/nscd_netgroup.c (__nscd_setnetgrent): Likewise.
(__nscd_innetgr): Likewise.
* nss/nss_db/db-open.c (internal_setent): Likewise.
* resolv/res-close.c (__res_iclose): Likewise.
* sunrpc/pm_getmaps.c (pmap_getmaps): Likewise.
* sysdeps/posix/closedir.c (__closedir): Likewise.
* sysdeps/posix/getaddrinfo.c (getaddrinfo): Likewise.
* sysdeps/posix/getcwd.c (__getcwd): Likewise.
* sysdeps/posix/opendir.c (tryopen_o_directory): Likewise.
(opendir_tail): Likewise.
* sysdeps/posix/spawni.c (__spawni_child): Likewise.
* sysdeps/unix/sysv/linux/check_native.c (__check_native): Likewise.
* sysdeps/unix/sysv/linux/check_pf.c (__check_pf): Likewise.
* sysdeps/unix/sysv/linux/fips-private.h (fips_enabled_p): Likewise.
* sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise.
(gethostid): Likewise.
* sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise.
* sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
Likewise.
* sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Likewise.
* sysdeps/unix/sysv/linux/grantpt.c (close_all_fds): Likewise.
* sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
* sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock):
Likewise.
* sysdeps/unix/sysv/linux/if_index.c (__if_nametoindex): Likewise.
* sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps): Likewise.
* sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap):
Likewise.
* sysdeps/unix/sysv/linux/mq_notify.c (init_mq_netlink): Likewise.
* sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np):
Likewise.
* sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np):
Likewise.
* sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise.
* sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise.
---
ChangeLog | 71 +++++++++++++++++++++++++++++
catgets/open_catalog.c | 2 +-
gmon/gmon.c | 2 +-
iconv/gconv_cache.c | 4 +-
intl/loadmsgcat.c | 2 +-
io/ftw.c | 4 +-
libio/fileops.c | 6 +--
libio/iopopen.c | 2 +-
locale/loadarchive.c | 6 +--
locale/loadlocale.c | 6 +--
login/utmp_file.c | 8 ++--
misc/daemon.c | 4 +-
nscd/nscd_getai.c | 2 +-
nscd/nscd_getgr_r.c | 2 +-
nscd/nscd_gethst_r.c | 2 +-
nscd/nscd_getpw_r.c | 2 +-
nscd/nscd_getserv_r.c | 2 +-
nscd/nscd_helper.c | 4 +-
nscd/nscd_initgroups.c | 2 +-
nscd/nscd_netgroup.c | 4 +-
nss/nss_db/db-open.c | 2 +-
resolv/res-close.c | 4 +-
sunrpc/pm_getmaps.c | 2 +-
sysdeps/generic/not-cancel.h | 4 +-
sysdeps/posix/closedir.c | 2 +-
sysdeps/posix/getaddrinfo.c | 4 +-
sysdeps/posix/getcwd.c | 4 +-
sysdeps/posix/opendir.c | 6 +--
sysdeps/posix/spawni.c | 6 +--
sysdeps/unix/sysv/linux/check_native.c | 2 +-
sysdeps/unix/sysv/linux/check_pf.c | 2 +-
sysdeps/unix/sysv/linux/close.c | 12 +++++
sysdeps/unix/sysv/linux/fips-private.h | 2 +-
sysdeps/unix/sysv/linux/gethostid.c | 4 +-
sysdeps/unix/sysv/linux/getloadavg.c | 2 +-
sysdeps/unix/sysv/linux/getlogin_r.c | 2 +-
sysdeps/unix/sysv/linux/getsysstats.c | 6 +--
sysdeps/unix/sysv/linux/grantpt.c | 2 +-
sysdeps/unix/sysv/linux/i386/smp.h | 2 +-
sysdeps/unix/sysv/linux/ia64/has_cpuclock.c | 2 +-
sysdeps/unix/sysv/linux/if_index.c | 6 +--
sysdeps/unix/sysv/linux/libc_fatal.c | 2 +-
sysdeps/unix/sysv/linux/malloc-sysdep.h | 2 +-
sysdeps/unix/sysv/linux/mq_notify.c | 2 +-
sysdeps/unix/sysv/linux/not-cancel.h | 18 +++++---
sysdeps/unix/sysv/linux/pthread_getname.c | 2 +-
sysdeps/unix/sysv/linux/pthread_setname.c | 2 +-
sysdeps/unix/sysv/linux/spawni.c | 6 +--
sysdeps/unix/sysv/linux/sysconf.c | 2 +-
49 files changed, 169 insertions(+), 82 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index d40900c..4ee70fb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,76 @@
2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * sysdeps/generic/not-cancel.h (close_not_cancel): Remove macro.
+ (close_not_cancel_no_status): Likewise.
+ (__close_nocancel): New macro.
+ (__close_nocancel_nostatus): Likewise.
+ * sysdeps/unix/sysv/linux/not-cancel.h (__close_nocancel): Remove
+ macro.
+ (close_not_cancel): Likewise.
+ (close_not_cancel_no_status): Likewise.
+ (__close_nocancel): New prototype.
+ (__close_nocancel_nostatus): New function.
+ * sysdeps/unix/sysv/linux/close.c (__close_nocancel): New function.
+ * catgets/open_catalog.c (__open_catalog): Replace
+ close_not_cancel{_no_status) with __close_nocancel{_nostatus}.
+ * gmon/gmon.c (write_gmon): Likewise.
+ * iconv/gconv_cache.c (__gconv_load_cache): Likewise.
+ * intl/loadmsgcat.c (close): Likewise.
+ * io/ftw.c (open_dir_stream): Likewise.
+ (ftw_startup): Likewise.
+ * libio/fileops.c (_IO_file_open): Likewise.
+ (_IO_file_close_mmap): Likewise.
+ (_IO_file_close): Likewise.
+ * libio/iopopen.c (_IO_dup2): Likewise.
+ * locale/loadarchive.c (_nl_load_locale_from_archive): Likewise.
+ * locale/loadlocale.c (_nl_load_locale): Likewise.
+ * login/utmp_file.c (pututline_file): Likewise.
+ (endutent_file): Likewise.
+ * misc/daemon.c (daemon): Likewise.
+ * nscd/nscd_getai.c (__nscd_getai): Likewise.
+ * nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise.
+ * nscd/nscd_gethst_r.c (nscd_gethst_r): Likewise.
+ * nscd/nscd_getpw_r.c (nscd_getpw_r): Likewise.
+ * nscd/nscd_getserv_r.c (nscd_getserv_r): Likewise.
+ * nscd/nscd_helper.c (open_socket): Likewise.
+ (__nscd_open_socket): Likewise.
+ * nscd/nscd_initgroups.c (__nscd_getgrouplist): Likewise.
+ * nscd/nscd_netgroup.c (__nscd_setnetgrent): Likewise.
+ (__nscd_innetgr): Likewise.
+ * nss/nss_db/db-open.c (internal_setent): Likewise.
+ * resolv/res-close.c (__res_iclose): Likewise.
+ * sunrpc/pm_getmaps.c (pmap_getmaps): Likewise.
+ * sysdeps/posix/closedir.c (__closedir): Likewise.
+ * sysdeps/posix/getaddrinfo.c (getaddrinfo): Likewise.
+ * sysdeps/posix/getcwd.c (__getcwd): Likewise.
+ * sysdeps/posix/opendir.c (tryopen_o_directory): Likewise.
+ (opendir_tail): Likewise.
+ * sysdeps/posix/spawni.c (__spawni_child): Likewise.
+ * sysdeps/unix/sysv/linux/check_native.c (__check_native): Likewise.
+ * sysdeps/unix/sysv/linux/check_pf.c (__check_pf): Likewise.
+ * sysdeps/unix/sysv/linux/fips-private.h (fips_enabled_p): Likewise.
+ * sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise.
+ (gethostid): Likewise.
+ * sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise.
+ * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
+ Likewise.
+ * sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Likewise.
+ * sysdeps/unix/sysv/linux/grantpt.c (close_all_fds): Likewise.
+ * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
+ * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock):
+ Likewise.
+ * sysdeps/unix/sysv/linux/if_index.c (__if_nametoindex): Likewise.
+ * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps): Likewise.
+ * sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap):
+ Likewise.
+ * sysdeps/unix/sysv/linux/mq_notify.c (init_mq_netlink): Likewise.
+ * sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np):
+ Likewise.
+ * sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np):
+ Likewise.
+ * sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise.
+ * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise.
+
* sysdeps/generic/not-cancel.h (openat_not_cancel): Remove macro.
(openat_not_cancel_3): Likewise.
(openat64_not_cancel_3): Likewise).
diff --git a/catgets/open_catalog.c b/catgets/open_catalog.c
index d79a6b1..42f61fb 100644
--- a/catgets/open_catalog.c
+++ b/catgets/open_catalog.c
@@ -328,7 +328,7 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var,
/* Release the lock again. */
close_unlock_return:
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
free (buf);
return result;
diff --git a/gmon/gmon.c b/gmon/gmon.c
index e7701b9..90c7895 100644
--- a/gmon/gmon.c
+++ b/gmon/gmon.c
@@ -386,7 +386,7 @@ write_gmon (void)
/* write basic-block execution counts: */
write_bb_counts (fd);
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
}
diff --git a/iconv/gconv_cache.c b/iconv/gconv_cache.c
index f1dce29..d6a47de 100644
--- a/iconv/gconv_cache.c
+++ b/iconv/gconv_cache.c
@@ -71,7 +71,7 @@ __gconv_load_cache (void)
|| (size_t) st.st_size < sizeof (struct gconvcache_header))
{
close_and_exit:
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
return -1;
}
@@ -108,7 +108,7 @@ __gconv_load_cache (void)
}
/* We don't need the file descriptor anymore. */
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
/* Check the consistency. */
header = (struct gconvcache_header *) gconv_cache;
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
index 514e38f..13e2f2a 100644
--- a/intl/loadmsgcat.c
+++ b/intl/loadmsgcat.c
@@ -446,7 +446,7 @@
because some ISO C functions will require linking with this object
file and the name space must not be polluted. */
# define open(name, flags) __open_nocancel (name, flags)
-# define close(fd) close_not_cancel_no_status (fd)
+# define close(fd) __close_nocancel_nostatus (fd)
# define read(fd, buf, n) __read_nocancel (fd, buf, n)
# define mmap(addr, len, prot, flags, fd, offset) \
__mmap (addr, len, prot, flags, fd, offset)
diff --git a/io/ftw.c b/io/ftw.c
index f33fed3..106b6bf 100644
--- a/io/ftw.c
+++ b/io/ftw.c
@@ -341,7 +341,7 @@ open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp)
O_RDONLY | O_DIRECTORY | O_NDELAY);
dirp->stream = NULL;
if (fd != -1 && (dirp->stream = __fdopendir (fd)) == NULL)
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
}
else
{
@@ -791,7 +791,7 @@ ftw_startup (const char *dir, int is_nftw, void *func, int descriptors,
{
int save_err = errno;
__fchdir (cwdfd);
- close_not_cancel_no_status (cwdfd);
+ __close_nocancel_nostatus (cwdfd);
__set_errno (save_err);
}
else if (cwd != NULL)
diff --git a/libio/fileops.c b/libio/fileops.c
index f025178..b8b02ba 100644
--- a/libio/fileops.c
+++ b/libio/fileops.c
@@ -242,7 +242,7 @@ _IO_file_open (_IO_FILE *fp, const char *filename, int posix_mode, int prot,
_IO_off64_t new_pos = _IO_SYSSEEK (fp, 0, _IO_seek_end);
if (new_pos == _IO_pos_BAD && errno != ESPIPE)
{
- close_not_cancel (fdesc);
+ __close_nocancel (fdesc);
return NULL;
}
}
@@ -1231,7 +1231,7 @@ _IO_file_close_mmap (_IO_FILE *fp)
fp->_IO_buf_base = fp->_IO_buf_end = NULL;
/* Cancelling close should be avoided if possible since it leaves an
unrecoverable state behind. */
- return close_not_cancel (fp->_fileno);
+ return __close_nocancel (fp->_fileno);
}
int
@@ -1239,7 +1239,7 @@ _IO_file_close (_IO_FILE *fp)
{
/* Cancelling close should be avoided if possible since it leaves an
unrecoverable state behind. */
- return close_not_cancel (fp->_fileno);
+ return __close_nocancel (fp->_fileno);
}
libc_hidden_def (_IO_file_close)
diff --git a/libio/iopopen.c b/libio/iopopen.c
index b78e7e5..0c20cbb 100644
--- a/libio/iopopen.c
+++ b/libio/iopopen.c
@@ -76,7 +76,7 @@ extern int _IO_dup2 (int fd, int fd2) __THROW;
#ifndef _IO_close
#ifdef _LIBC
-#define _IO_close close_not_cancel
+#define _IO_close __close_nocancel
#else
#define _IO_close close
#endif
diff --git a/locale/loadarchive.c b/locale/loadarchive.c
index 7825a1c..158cf14 100644
--- a/locale/loadarchive.c
+++ b/locale/loadarchive.c
@@ -213,7 +213,7 @@ _nl_load_locale_from_archive (int category, const char **namep)
/* stat failed, very strange. */
close_and_out:
if (fd >= 0)
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
return NULL;
}
@@ -253,7 +253,7 @@ _nl_load_locale_from_archive (int category, const char **namep)
{
/* We've mapped the whole file already, so we can be
sure we won't need this file descriptor later. */
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
fd = -1;
}
@@ -452,7 +452,7 @@ _nl_load_locale_from_archive (int category, const char **namep)
/* We don't need the file descriptor any longer. */
if (fd >= 0)
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
fd = -1;
/* We succeeded in mapping all the necessary regions of the archive.
diff --git a/locale/loadlocale.c b/locale/loadlocale.c
index a733557..8ba7595 100644
--- a/locale/loadlocale.c
+++ b/locale/loadlocale.c
@@ -181,7 +181,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
if (__builtin_expect (__fxstat64 (_STAT_VER, fd, &st), 0) < 0)
{
puntfd:
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
return;
}
if (__glibc_unlikely (S_ISDIR (st.st_mode)))
@@ -191,7 +191,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
char *newp;
size_t filenamelen;
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
filenamelen = strlen (file->filename);
newp = (char *) alloca (filenamelen
@@ -257,7 +257,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
#endif /* _POSIX_MAPPED_FILES */
/* We have mapped the data, so we no longer need the descriptor. */
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
if (__glibc_unlikely (filedata == NULL))
/* We failed to map or read the data. */
diff --git a/login/utmp_file.c b/login/utmp_file.c
index 26e3f4b..68e00f2 100644
--- a/login/utmp_file.c
+++ b/login/utmp_file.c
@@ -382,10 +382,10 @@ pututline_file (const struct utmp *data)
if (__lseek64 (new_fd, __lseek64 (file_fd, 0, SEEK_CUR), SEEK_SET) == -1
|| __dup2 (new_fd, file_fd) < 0)
{
- close_not_cancel_no_status (new_fd);
+ __close_nocancel_nostatus (new_fd);
return NULL;
}
- close_not_cancel_no_status (new_fd);
+ __close_nocancel_nostatus (new_fd);
file_writable = true;
}
@@ -471,7 +471,7 @@ endutent_file (void)
{
assert (file_fd >= 0);
- close_not_cancel_no_status (file_fd);
+ __close_nocancel_nostatus (file_fd);
file_fd = -1;
}
@@ -518,7 +518,7 @@ unlock_return:
UNLOCK_FILE (fd);
/* Close WTMP file. */
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
return result;
}
diff --git a/misc/daemon.c b/misc/daemon.c
index dd38f2b..21e7859 100644
--- a/misc/daemon.c
+++ b/misc/daemon.c
@@ -80,12 +80,12 @@ daemon (int nochdir, int noclose)
} else {
/* We must set an errno value since no
function call actually failed. */
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
__set_errno (ENODEV);
return -1;
}
} else {
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
return -1;
}
}
diff --git a/nscd/nscd_getai.c b/nscd/nscd_getai.c
index daaf6d6..03c0296 100644
--- a/nscd/nscd_getai.c
+++ b/nscd/nscd_getai.c
@@ -189,7 +189,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
out_close:
if (sock != -1)
- close_not_cancel_no_status (sock);
+ __close_nocancel_nostatus (sock);
out:
if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
{
diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c
index 87b4552..1f60261 100644
--- a/nscd/nscd_getgr_r.c
+++ b/nscd/nscd_getgr_r.c
@@ -305,7 +305,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
out_close:
if (sock != -1)
- close_not_cancel_no_status (sock);
+ __close_nocancel_nostatus (sock);
out:
if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
{
diff --git a/nscd/nscd_gethst_r.c b/nscd/nscd_gethst_r.c
index daa708b..e234c7f 100644
--- a/nscd/nscd_gethst_r.c
+++ b/nscd/nscd_gethst_r.c
@@ -436,7 +436,7 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
out_close:
if (sock != -1)
- close_not_cancel_no_status (sock);
+ __close_nocancel_nostatus (sock);
out:
if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
{
diff --git a/nscd/nscd_getpw_r.c b/nscd/nscd_getpw_r.c
index b291d2f..fbece1c 100644
--- a/nscd/nscd_getpw_r.c
+++ b/nscd/nscd_getpw_r.c
@@ -218,7 +218,7 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type,
out_close:
if (sock != -1)
- close_not_cancel_no_status (sock);
+ __close_nocancel_nostatus (sock);
out:
if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
{
diff --git a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c
index 7dfb1c8..12c3104 100644
--- a/nscd/nscd_getserv_r.c
+++ b/nscd/nscd_getserv_r.c
@@ -356,7 +356,7 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
out_close:
if (sock != -1)
- close_not_cancel_no_status (sock);
+ __close_nocancel_nostatus (sock);
out:
if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
{
diff --git a/nscd/nscd_helper.c b/nscd/nscd_helper.c
index 22905d0..a225623 100644
--- a/nscd/nscd_helper.c
+++ b/nscd/nscd_helper.c
@@ -236,7 +236,7 @@ open_socket (request_type type, const char *key, size_t keylen)
}
out:
- close_not_cancel_no_status (sock);
+ __close_nocancel_nostatus (sock);
return -1;
}
@@ -555,7 +555,7 @@ __nscd_open_socket (const char *key, size_t keylen, request_type type,
return sock;
}
- close_not_cancel_no_status (sock);
+ __close_nocancel_nostatus (sock);
}
__set_errno (saved_errno);
diff --git a/nscd/nscd_initgroups.c b/nscd/nscd_initgroups.c
index 00c6508..c06f2f8 100644
--- a/nscd/nscd_initgroups.c
+++ b/nscd/nscd_initgroups.c
@@ -157,7 +157,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
out_close:
if (sock != -1)
- close_not_cancel_no_status (sock);
+ __close_nocancel_nostatus (sock);
out:
if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
{
diff --git a/nscd/nscd_netgroup.c b/nscd/nscd_netgroup.c
index 44f37ef..559bb34 100644
--- a/nscd/nscd_netgroup.c
+++ b/nscd/nscd_netgroup.c
@@ -139,7 +139,7 @@ __nscd_setnetgrent (const char *group, struct __netgrent *datap)
out_close:
if (sock != -1)
- close_not_cancel_no_status (sock);
+ __close_nocancel_nostatus (sock);
out:
if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
{
@@ -263,7 +263,7 @@ __nscd_innetgr (const char *netgroup, const char *host, const char *user,
out_close:
if (sock != -1)
- close_not_cancel_no_status (sock);
+ __close_nocancel_nostatus (sock);
out:
if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
{
diff --git a/nss/nss_db/db-open.c b/nss/nss_db/db-open.c
index 40a2540..bf08ac9 100644
--- a/nss/nss_db/db-open.c
+++ b/nss/nss_db/db-open.c
@@ -52,7 +52,7 @@ internal_setent (const char *file, struct nss_db_map *mapping)
status = NSS_STATUS_TRYAGAIN;
}
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
}
return status;
diff --git a/resolv/res-close.c b/resolv/res-close.c
index 21f038c..766bf42 100644
--- a/resolv/res-close.c
+++ b/resolv/res-close.c
@@ -94,7 +94,7 @@ __res_iclose (res_state statp, bool free_addr)
{
if (statp->_vcsock >= 0)
{
- close_not_cancel_no_status (statp->_vcsock);
+ __close_nocancel_nostatus (statp->_vcsock);
statp->_vcsock = -1;
statp->_flags &= ~(RES_F_VC | RES_F_CONN);
}
@@ -103,7 +103,7 @@ __res_iclose (res_state statp, bool free_addr)
{
if (statp->_u._ext.nssocks[ns] != -1)
{
- close_not_cancel_no_status (statp->_u._ext.nssocks[ns]);
+ __close_nocancel_nostatus (statp->_u._ext.nssocks[ns]);
statp->_u._ext.nssocks[ns] = -1;
}
if (free_addr)
diff --git a/sunrpc/pm_getmaps.c b/sunrpc/pm_getmaps.c
index 88c44f0..094492b 100644
--- a/sunrpc/pm_getmaps.c
+++ b/sunrpc/pm_getmaps.c
@@ -81,7 +81,7 @@ pmap_getmaps (struct sockaddr_in *address)
}
/* We only need to close the socket here if we opened it. */
if (closeit)
- close_not_cancel (socket);
+ __close_nocancel (socket);
address->sin_port = 0;
return head;
}
diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
index df9aea6..ee9988a 100644
--- a/sysdeps/generic/not-cancel.h
+++ b/sysdeps/generic/not-cancel.h
@@ -26,9 +26,9 @@
__openat (__VA_ARGS__)
#define __openat64_nocancel(...) \
__openat64 (__VA_ARGS__)
-#define close_not_cancel(fd) \
+#define __close_nocancel(fd) \
__close (fd)
-#define close_not_cancel_no_status(fd) \
+#define __close_nocancel_nostatus(fd) \
(void) __close (fd)
#define __read_nocancel(fd, buf, n) \
__read (fd, buf, n)
diff --git a/sysdeps/posix/closedir.c b/sysdeps/posix/closedir.c
index e7b7d77..dbde65f 100644
--- a/sysdeps/posix/closedir.c
+++ b/sysdeps/posix/closedir.c
@@ -49,6 +49,6 @@ __closedir (DIR *dirp)
free ((void *) dirp);
- return close_not_cancel (fd);
+ return __close_nocancel (fd);
}
weak_alias (__closedir, closedir)
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
index efa7118..6ad309b 100644
--- a/sysdeps/posix/getaddrinfo.c
+++ b/sysdeps/posix/getaddrinfo.c
@@ -2401,7 +2401,7 @@ getaddrinfo (const char *name, const char *service,
{
if (fd != -1)
close_retry:
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
af = q->ai_family;
fd = __socket (af, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_IP);
}
@@ -2504,7 +2504,7 @@ getaddrinfo (const char *name, const char *service,
}
if (fd != -1)
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
/* We got all the source addresses we can get, now sort using
the information. */
diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c
index ecae628..d341bdf 100644
--- a/sysdeps/posix/getcwd.c
+++ b/sysdeps/posix/getcwd.c
@@ -176,7 +176,7 @@ extern char *alloca ();
# include <kernel-features.h>
#else
# define __openat64_nocancel(dfd, name, mode) openat64 (dfd, name, mode)
-# define close_not_cancel_no_status(fd) close (fd)
+# define __close_nocancel_nostatus(fd) close (fd)
#endif
#ifndef PATH_MAX
@@ -521,7 +521,7 @@ __getcwd (char *buf, size_t size)
if (dirstream != NULL)
__closedir (dirstream);
if (fd_needs_closing)
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
#ifndef NO_ALLOCATION
if (buf == NULL)
free (path);
diff --git a/sysdeps/posix/opendir.c b/sysdeps/posix/opendir.c
index 51a92e8..880ebc9 100644
--- a/sysdeps/posix/opendir.c
+++ b/sysdeps/posix/opendir.c
@@ -65,7 +65,7 @@ tryopen_o_directory (void)
if (x >= 0)
{
- close_not_cancel_no_status (x);
+ __close_nocancel_nostatus (x);
o_directory_works = -1;
}
else if (errno != ENOTDIR)
@@ -129,7 +129,7 @@ opendir_tail (int fd)
{
__set_errno (ENOTDIR);
lose:
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
return NULL;
}
@@ -227,7 +227,7 @@ __alloc_dir (int fd, bool close_fd, int flags, const struct stat64 *statp)
if (close_fd)
{
int save_errno = errno;
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
__set_errno (save_errno);
}
return NULL;
diff --git a/sysdeps/posix/spawni.c b/sysdeps/posix/spawni.c
index a43b841..7cbdc66 100644
--- a/sysdeps/posix/spawni.c
+++ b/sysdeps/posix/spawni.c
@@ -157,7 +157,7 @@ __spawni_child (void *arguments)
switch (action->tag)
{
case spawn_do_close:
- if (close_not_cancel (action->action.close_action.fd) != 0)
+ if (__close_nocancel (action->action.close_action.fd) != 0)
{
if (have_fdlimit == 0)
{
@@ -180,7 +180,7 @@ __spawni_child (void *arguments)
with the process already at maximum number of file descriptor
opened and also for multiple actions on single-open special
paths (like /dev/watchdog). */
- close_not_cancel (action->action.open_action.fd);
+ __close_nocancel (action->action.open_action.fd);
int new_fd = __open_nocancel (action->action.open_action.path,
action->action.open_action.oflag
@@ -197,7 +197,7 @@ __spawni_child (void *arguments)
!= action->action.open_action.fd)
goto fail;
- if (close_not_cancel (new_fd) != 0)
+ if (__close_nocancel (new_fd) != 0)
goto fail;
}
}
diff --git a/sysdeps/unix/sysv/linux/check_native.c b/sysdeps/unix/sysv/linux/check_native.c
index 7e5a7c9..dc2da83 100644
--- a/sysdeps/unix/sysv/linux/check_native.c
+++ b/sysdeps/unix/sysv/linux/check_native.c
@@ -167,7 +167,7 @@ __check_native (uint32_t a1_index, int *a1_native,
while (! done);
out:
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
return;
diff --git a/sysdeps/unix/sysv/linux/check_pf.c b/sysdeps/unix/sysv/linux/check_pf.c
index 3bf221a..4dd0275 100644
--- a/sysdeps/unix/sysv/linux/check_pf.c
+++ b/sysdeps/unix/sysv/linux/check_pf.c
@@ -328,7 +328,7 @@ __check_pf (bool *seen_ipv4, bool *seen_ipv6,
&addr_len) == 0)
data = make_request (fd, nladdr.nl_pid);
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
}
if (data != NULL)
diff --git a/sysdeps/unix/sysv/linux/close.c b/sysdeps/unix/sysv/linux/close.c
index 1ac71ce..dd21d8d 100644
--- a/sysdeps/unix/sysv/linux/close.c
+++ b/sysdeps/unix/sysv/linux/close.c
@@ -18,6 +18,7 @@
#include <unistd.h>
#include <sysdep-cancel.h>
+#include <not-cancel.h>
/* Close the file descriptor FD. */
int
@@ -28,3 +29,14 @@ __close (int fd)
libc_hidden_def (__close)
strong_alias (__close, __libc_close)
weak_alias (__close, close)
+
+# if !IS_IN (rtld)
+int
+__close_nocancel (int fd)
+{
+ return INLINE_SYSCALL_CALL (close, fd);
+}
+#else
+strong_alias (__libc_close, __close_nocancel)
+#endif
+libc_hidden_def (__close_nocancel)
diff --git a/sysdeps/unix/sysv/linux/fips-private.h b/sysdeps/unix/sysv/linux/fips-private.h
index 775f2c2..23833f0 100644
--- a/sysdeps/unix/sysv/linux/fips-private.h
+++ b/sysdeps/unix/sysv/linux/fips-private.h
@@ -50,7 +50,7 @@ fips_enabled_p (void)
char buf[32];
ssize_t n;
n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, sizeof (buf) - 1));
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
if (n > 0)
{
diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c
index 11c7e73..ca03877 100644
--- a/sysdeps/unix/sysv/linux/gethostid.c
+++ b/sysdeps/unix/sysv/linux/gethostid.c
@@ -53,7 +53,7 @@ sethostid (long int id)
written = __write_nocancel (fd, &id32, sizeof (id32));
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
return written != sizeof (id32) ? -1 : 0;
}
@@ -82,7 +82,7 @@ gethostid (void)
{
ssize_t n = __read_nocancel (fd, &id, sizeof (id));
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
if (n == sizeof (id))
return id;
diff --git a/sysdeps/unix/sysv/linux/getloadavg.c b/sysdeps/unix/sysv/linux/getloadavg.c
index 64bad17..4b75741 100644
--- a/sysdeps/unix/sysv/linux/getloadavg.c
+++ b/sysdeps/unix/sysv/linux/getloadavg.c
@@ -43,7 +43,7 @@ getloadavg (double loadavg[], int nelem)
int i;
nread = __read_nocancel (fd, buf, sizeof buf - 1);
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
if (nread <= 0)
return -1;
buf[nread - 1] = '\0';
diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c
index 1de746b..45c468f 100644
--- a/sysdeps/unix/sysv/linux/getlogin_r.c
+++ b/sysdeps/unix/sysv/linux/getlogin_r.c
@@ -43,7 +43,7 @@ __getlogin_r_loginuid (char *name, size_t namesize)
char uidbuf[12];
ssize_t n = TEMP_FAILURE_RETRY (__read_nocancel (fd, uidbuf,
sizeof (uidbuf)));
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
uid_t uid;
char *endp;
diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
index d1400d6..d02c86d 100644
--- a/sysdeps/unix/sysv/linux/getsysstats.c
+++ b/sysdeps/unix/sysv/linux/getsysstats.c
@@ -180,7 +180,7 @@ __get_nprocs (void)
}
while (l < re);
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
if (result > 0)
goto out;
@@ -207,7 +207,7 @@ __get_nprocs (void)
else if (isdigit (l[3]))
++result;
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
}
else
{
@@ -215,7 +215,7 @@ __get_nprocs (void)
if (fd != -1)
{
GET_NPROCS_PARSER (fd, buffer, cp, re, buffer_end, result);
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
}
}
diff --git a/sysdeps/unix/sysv/linux/grantpt.c b/sysdeps/unix/sysv/linux/grantpt.c
index 97c6ba7..2030e07 100644
--- a/sysdeps/unix/sysv/linux/grantpt.c
+++ b/sysdeps/unix/sysv/linux/grantpt.c
@@ -26,7 +26,7 @@ close_all_fds (void)
char *endp;
long int fd = strtol (d->d_name, &endp, 10);
if (*endp == '\0' && fd != PTY_FILENO && fd != dirfd (dir))
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
}
__closedir (dir);
diff --git a/sysdeps/unix/sysv/linux/i386/smp.h b/sysdeps/unix/sysv/linux/i386/smp.h
index eb1ac5d..320958a 100644
--- a/sysdeps/unix/sysv/linux/i386/smp.h
+++ b/sysdeps/unix/sysv/linux/i386/smp.h
@@ -47,7 +47,7 @@ is_smp_system (void)
/* This also didn't work. We give up and say it's a UP machine. */
u.buf[0] = '\0';
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
cp = u.buf;
}
diff --git a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
index 6aab1e8..79c95b4 100644
--- a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
+++ b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
@@ -41,7 +41,7 @@ has_cpuclock (void)
|| buf[0] != '0' || buf[1] != '\n')
newval = -1;
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
}
itc_usable = newval;
diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c
index 8ba5eae..56f3f13 100644
--- a/sysdeps/unix/sysv/linux/if_index.c
+++ b/sysdeps/unix/sysv/linux/if_index.c
@@ -47,12 +47,12 @@ __if_nametoindex (const char *ifname)
if (__ioctl (fd, SIOCGIFINDEX, &ifr) < 0)
{
int saved_errno = errno;
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
if (saved_errno == EINVAL)
__set_errno (ENOSYS);
return 0;
}
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
return ifr.ifr_ifindex;
#endif
}
@@ -224,7 +224,7 @@ __if_indextoname (unsigned int ifindex, char *ifname)
ifr.ifr_ifindex = ifindex;
status = __ioctl (fd, SIOCGIFNAME, &ifr);
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
if (status < 0)
{
diff --git a/sysdeps/unix/sysv/linux/libc_fatal.c b/sysdeps/unix/sysv/linux/libc_fatal.c
index c7c6a07..4bc1521 100644
--- a/sysdeps/unix/sysv/linux/libc_fatal.c
+++ b/sysdeps/unix/sysv/linux/libc_fatal.c
@@ -59,7 +59,7 @@ backtrace_and_maps (int do_abort, bool written, int fd)
while ((n2 = __read_nocancel (fd2, buf, sizeof (buf))) > 0)
if (__write_nocancel (fd, buf, n2) != n2)
break;
- close_not_cancel_no_status (fd2);
+ __close_nocancel_nostatus (fd2);
}
}
}
diff --git a/sysdeps/unix/sysv/linux/malloc-sysdep.h b/sysdeps/unix/sysv/linux/malloc-sysdep.h
index 7a7acba..4bb7bc0 100644
--- a/sysdeps/unix/sysv/linux/malloc-sysdep.h
+++ b/sysdeps/unix/sysv/linux/malloc-sysdep.h
@@ -49,7 +49,7 @@ check_may_shrink_heap (void)
char val;
ssize_t n = __read_nocancel (fd, &val, 1);
may_shrink_heap = n > 0 && val == '2';
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
}
}
diff --git a/sysdeps/unix/sysv/linux/mq_notify.c b/sysdeps/unix/sysv/linux/mq_notify.c
index 626430c..f12e6f5 100644
--- a/sysdeps/unix/sysv/linux/mq_notify.c
+++ b/sysdeps/unix/sysv/linux/mq_notify.c
@@ -209,7 +209,7 @@ init_mq_netlink (void)
if (err != 0)
{
- close_not_cancel_no_status (netlink_socket);
+ __close_nocancel_nostatus (netlink_socket);
netlink_socket = -1;
}
}
diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
index 08ad773..684541a 100644
--- a/sysdeps/unix/sysv/linux/not-cancel.h
+++ b/sysdeps/unix/sysv/linux/not-cancel.h
@@ -51,13 +51,17 @@ __typeof (__write) __write_nocancel;
libc_hidden_proto (__write_nocancel)
/* Uncancelable close. */
-#define __close_nocancel(fd) \
- INLINE_SYSCALL (close, 1, fd)
-#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)); })
+__typeof (__close) __close_nocancel;
+libc_hidden_proto (__close_nocancel)
+
+/* Non cancellable close syscall that does not also set errno in case of
+ failure. */
+static inline void
+__close_nocancel_nostatus (int fd)
+{
+ INTERNAL_SYSCALL_DECL (err);
+ INTERNAL_SYSCALL (close, err, 1, (fd));
+}
/* Uncancelable writev. */
#define writev_not_cancel_no_status(fd, iov, n) \
diff --git a/sysdeps/unix/sysv/linux/pthread_getname.c b/sysdeps/unix/sysv/linux/pthread_getname.c
index 93c1dfd..d3dfee0 100644
--- a/sysdeps/unix/sysv/linux/pthread_getname.c
+++ b/sysdeps/unix/sysv/linux/pthread_getname.c
@@ -63,7 +63,7 @@ pthread_getname_np (pthread_t th, char *buf, size_t len)
buf[n] = '\0';
}
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
return res;
}
diff --git a/sysdeps/unix/sysv/linux/pthread_setname.c b/sysdeps/unix/sysv/linux/pthread_setname.c
index c5e9a33..2f68086 100644
--- a/sysdeps/unix/sysv/linux/pthread_setname.c
+++ b/sysdeps/unix/sysv/linux/pthread_setname.c
@@ -57,7 +57,7 @@ pthread_setname_np (pthread_t th, const char *name)
else if (n != name_len)
res = EIO;
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
return res;
}
diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c
index 4994a07..dea1650 100644
--- a/sysdeps/unix/sysv/linux/spawni.c
+++ b/sysdeps/unix/sysv/linux/spawni.c
@@ -205,7 +205,7 @@ __spawni_child (void *arguments)
switch (action->tag)
{
case spawn_do_close:
- if (close_not_cancel (action->action.close_action.fd) != 0)
+ if (__close_nocancel (action->action.close_action.fd) != 0)
{
if (!have_fdlimit)
{
@@ -228,7 +228,7 @@ __spawni_child (void *arguments)
with the process already at maximum number of file descriptor
opened and also for multiple actions on single-open special
paths (like /dev/watchdog). */
- close_not_cancel (action->action.open_action.fd);
+ __close_nocancel (action->action.open_action.fd);
int ret = __open_nocancel (action->action.open_action.path,
action->action.
@@ -247,7 +247,7 @@ __spawni_child (void *arguments)
!= action->action.open_action.fd)
goto fail;
- if (close_not_cancel (new_fd) != 0)
+ if (__close_nocancel (new_fd) != 0)
goto fail;
}
}
diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c
index f9becfb..773a6ac 100644
--- a/sysdeps/unix/sysv/linux/sysconf.c
+++ b/sysdeps/unix/sysv/linux/sysconf.c
@@ -122,7 +122,7 @@ __sysconf (int name)
char buf[32];
ssize_t n;
n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, sizeof (buf) - 1));
- close_not_cancel_no_status (fd);
+ __close_nocancel_nostatus (fd);
if (n > 0)
{
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 05/14] Consolidate non cancellable close call
2017-08-03 13:12 ` [PATCH 05/14] Consolidate non cancellable close call Adhemerval Zanella
@ 2017-08-18 13:55 ` Adhemerval Zanella
0 siblings, 0 replies; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-18 13:55 UTC (permalink / raw)
To: libc-alpha
Since this is a refactor, if no one opposes I will commit it shortly.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> This patch consolidates all the non cancellable close calls to use
> the __close_nocancel{_nostatus} identifier. For non cancellable targets
> it will be just a macro to call the default respective symbol while on Linux
> will be a internal one.
>
> Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
>
> * sysdeps/generic/not-cancel.h (close_not_cancel): Remove macro.
> (close_not_cancel_no_status): Likewise.
> (__close_nocancel): New macro.
> (__close_nocancel_no_status): Likewise.
> * sysdeps/unix/sysv/linux/not-cancel.h (__close_nocancel): Remove
> macro.
> (close_not_cancel): Likewise.
> (close_not_cancel_no_status): Likewise.
> (__close_nocancel): New prototype.
> (__close_nocancel_no_status): New function.
> * sysdeps/unix/sysv/linux/close.c (__close_nocancel): New function.
> * catgets/open_catalog.c (__open_catalog): Replace
> close_not_cancel{_no_status) with __close_nocancel{_nostatus}.
> * gmon/gmon.c (write_gmon): Likewise.
> * iconv/gconv_cache.c (__gconv_load_cache): Likewise.
> * intl/loadmsgcat.c (close): Likewise.
> * io/ftw.c (open_dir_stream): Likewise.
> (ftw_startup): Likewise.
> * libio/fileops.c (_IO_file_open): Likewise.
> (_IO_file_close_mmap): Likewise.
> (_IO_file_close): Likewise.
> * libio/iopopen.c (_IO_dup2): Likewise.
> * locale/loadarchive.c (_nl_load_locale_from_archive): Likewise.
> * locale/loadlocale.c (_nl_load_locale): Likewise.
> * login/utmp_file.c (pututline_file): Likewise.
> (endutent_file): Likewise.
> * misc/daemon.c (daemon): Likewise.
> * nscd/nscd_getai.c (__nscd_getai): Likewise.
> * nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise.
> * nscd/nscd_gethst_r.c (nscd_gethst_r): Likewise.
> * nscd/nscd_getpw_r.c (nscd_getpw_r): Likewise.
> * nscd/nscd_getserv_r.c (nscd_getserv_r): Likewise.
> * nscd/nscd_helper.c (open_socket): Likewise.
> (__nscd_open_socket): Likewise.
> * nscd/nscd_initgroups.c (__nscd_getgrouplist): Likewise.
> * nscd/nscd_netgroup.c (__nscd_setnetgrent): Likewise.
> (__nscd_innetgr): Likewise.
> * nss/nss_db/db-open.c (internal_setent): Likewise.
> * resolv/res-close.c (__res_iclose): Likewise.
> * sunrpc/pm_getmaps.c (pmap_getmaps): Likewise.
> * sysdeps/posix/closedir.c (__closedir): Likewise.
> * sysdeps/posix/getaddrinfo.c (getaddrinfo): Likewise.
> * sysdeps/posix/getcwd.c (__getcwd): Likewise.
> * sysdeps/posix/opendir.c (tryopen_o_directory): Likewise.
> (opendir_tail): Likewise.
> * sysdeps/posix/spawni.c (__spawni_child): Likewise.
> * sysdeps/unix/sysv/linux/check_native.c (__check_native): Likewise.
> * sysdeps/unix/sysv/linux/check_pf.c (__check_pf): Likewise.
> * sysdeps/unix/sysv/linux/fips-private.h (fips_enabled_p): Likewise.
> * sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise.
> (gethostid): Likewise.
> * sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise.
> * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
> Likewise.
> * sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Likewise.
> * sysdeps/unix/sysv/linux/grantpt.c (close_all_fds): Likewise.
> * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
> * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock):
> Likewise.
> * sysdeps/unix/sysv/linux/if_index.c (__if_nametoindex): Likewise.
> * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps): Likewise.
> * sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap):
> Likewise.
> * sysdeps/unix/sysv/linux/mq_notify.c (init_mq_netlink): Likewise.
> * sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np):
> Likewise.
> * sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np):
> Likewise.
> * sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise.
> * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise.
> ---
> ChangeLog | 71 +++++++++++++++++++++++++++++
> catgets/open_catalog.c | 2 +-
> gmon/gmon.c | 2 +-
> iconv/gconv_cache.c | 4 +-
> intl/loadmsgcat.c | 2 +-
> io/ftw.c | 4 +-
> libio/fileops.c | 6 +--
> libio/iopopen.c | 2 +-
> locale/loadarchive.c | 6 +--
> locale/loadlocale.c | 6 +--
> login/utmp_file.c | 8 ++--
> misc/daemon.c | 4 +-
> nscd/nscd_getai.c | 2 +-
> nscd/nscd_getgr_r.c | 2 +-
> nscd/nscd_gethst_r.c | 2 +-
> nscd/nscd_getpw_r.c | 2 +-
> nscd/nscd_getserv_r.c | 2 +-
> nscd/nscd_helper.c | 4 +-
> nscd/nscd_initgroups.c | 2 +-
> nscd/nscd_netgroup.c | 4 +-
> nss/nss_db/db-open.c | 2 +-
> resolv/res-close.c | 4 +-
> sunrpc/pm_getmaps.c | 2 +-
> sysdeps/generic/not-cancel.h | 4 +-
> sysdeps/posix/closedir.c | 2 +-
> sysdeps/posix/getaddrinfo.c | 4 +-
> sysdeps/posix/getcwd.c | 4 +-
> sysdeps/posix/opendir.c | 6 +--
> sysdeps/posix/spawni.c | 6 +--
> sysdeps/unix/sysv/linux/check_native.c | 2 +-
> sysdeps/unix/sysv/linux/check_pf.c | 2 +-
> sysdeps/unix/sysv/linux/close.c | 12 +++++
> sysdeps/unix/sysv/linux/fips-private.h | 2 +-
> sysdeps/unix/sysv/linux/gethostid.c | 4 +-
> sysdeps/unix/sysv/linux/getloadavg.c | 2 +-
> sysdeps/unix/sysv/linux/getlogin_r.c | 2 +-
> sysdeps/unix/sysv/linux/getsysstats.c | 6 +--
> sysdeps/unix/sysv/linux/grantpt.c | 2 +-
> sysdeps/unix/sysv/linux/i386/smp.h | 2 +-
> sysdeps/unix/sysv/linux/ia64/has_cpuclock.c | 2 +-
> sysdeps/unix/sysv/linux/if_index.c | 6 +--
> sysdeps/unix/sysv/linux/libc_fatal.c | 2 +-
> sysdeps/unix/sysv/linux/malloc-sysdep.h | 2 +-
> sysdeps/unix/sysv/linux/mq_notify.c | 2 +-
> sysdeps/unix/sysv/linux/not-cancel.h | 18 +++++---
> sysdeps/unix/sysv/linux/pthread_getname.c | 2 +-
> sysdeps/unix/sysv/linux/pthread_setname.c | 2 +-
> sysdeps/unix/sysv/linux/spawni.c | 6 +--
> sysdeps/unix/sysv/linux/sysconf.c | 2 +-
> 49 files changed, 169 insertions(+), 82 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index d40900c..4ee70fb 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,76 @@
> 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> + * sysdeps/generic/not-cancel.h (close_not_cancel): Remove macro.
> + (close_not_cancel_no_status): Likewise.
> + (__close_nocancel): New macro.
> + (__close_nocancel_nostatus): Likewise.
> + * sysdeps/unix/sysv/linux/not-cancel.h (__close_nocancel): Remove
> + macro.
> + (close_not_cancel): Likewise.
> + (close_not_cancel_no_status): Likewise.
> + (__close_nocancel): New prototype.
> + (__close_nocancel_nostatus): New function.
> + * sysdeps/unix/sysv/linux/close.c (__close_nocancel): New function.
> + * catgets/open_catalog.c (__open_catalog): Replace
> + close_not_cancel{_no_status) with __close_nocancel{_nostatus}.
> + * gmon/gmon.c (write_gmon): Likewise.
> + * iconv/gconv_cache.c (__gconv_load_cache): Likewise.
> + * intl/loadmsgcat.c (close): Likewise.
> + * io/ftw.c (open_dir_stream): Likewise.
> + (ftw_startup): Likewise.
> + * libio/fileops.c (_IO_file_open): Likewise.
> + (_IO_file_close_mmap): Likewise.
> + (_IO_file_close): Likewise.
> + * libio/iopopen.c (_IO_dup2): Likewise.
> + * locale/loadarchive.c (_nl_load_locale_from_archive): Likewise.
> + * locale/loadlocale.c (_nl_load_locale): Likewise.
> + * login/utmp_file.c (pututline_file): Likewise.
> + (endutent_file): Likewise.
> + * misc/daemon.c (daemon): Likewise.
> + * nscd/nscd_getai.c (__nscd_getai): Likewise.
> + * nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise.
> + * nscd/nscd_gethst_r.c (nscd_gethst_r): Likewise.
> + * nscd/nscd_getpw_r.c (nscd_getpw_r): Likewise.
> + * nscd/nscd_getserv_r.c (nscd_getserv_r): Likewise.
> + * nscd/nscd_helper.c (open_socket): Likewise.
> + (__nscd_open_socket): Likewise.
> + * nscd/nscd_initgroups.c (__nscd_getgrouplist): Likewise.
> + * nscd/nscd_netgroup.c (__nscd_setnetgrent): Likewise.
> + (__nscd_innetgr): Likewise.
> + * nss/nss_db/db-open.c (internal_setent): Likewise.
> + * resolv/res-close.c (__res_iclose): Likewise.
> + * sunrpc/pm_getmaps.c (pmap_getmaps): Likewise.
> + * sysdeps/posix/closedir.c (__closedir): Likewise.
> + * sysdeps/posix/getaddrinfo.c (getaddrinfo): Likewise.
> + * sysdeps/posix/getcwd.c (__getcwd): Likewise.
> + * sysdeps/posix/opendir.c (tryopen_o_directory): Likewise.
> + (opendir_tail): Likewise.
> + * sysdeps/posix/spawni.c (__spawni_child): Likewise.
> + * sysdeps/unix/sysv/linux/check_native.c (__check_native): Likewise.
> + * sysdeps/unix/sysv/linux/check_pf.c (__check_pf): Likewise.
> + * sysdeps/unix/sysv/linux/fips-private.h (fips_enabled_p): Likewise.
> + * sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise.
> + (gethostid): Likewise.
> + * sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise.
> + * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
> + Likewise.
> + * sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Likewise.
> + * sysdeps/unix/sysv/linux/grantpt.c (close_all_fds): Likewise.
> + * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
> + * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock):
> + Likewise.
> + * sysdeps/unix/sysv/linux/if_index.c (__if_nametoindex): Likewise.
> + * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps): Likewise.
> + * sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap):
> + Likewise.
> + * sysdeps/unix/sysv/linux/mq_notify.c (init_mq_netlink): Likewise.
> + * sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np):
> + Likewise.
> + * sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np):
> + Likewise.
> + * sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise.
> + * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise.
> +
> * sysdeps/generic/not-cancel.h (openat_not_cancel): Remove macro.
> (openat_not_cancel_3): Likewise.
> (openat64_not_cancel_3): Likewise).
> diff --git a/catgets/open_catalog.c b/catgets/open_catalog.c
> index d79a6b1..42f61fb 100644
> --- a/catgets/open_catalog.c
> +++ b/catgets/open_catalog.c
> @@ -328,7 +328,7 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var,
>
> /* Release the lock again. */
> close_unlock_return:
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> free (buf);
>
> return result;
> diff --git a/gmon/gmon.c b/gmon/gmon.c
> index e7701b9..90c7895 100644
> --- a/gmon/gmon.c
> +++ b/gmon/gmon.c
> @@ -386,7 +386,7 @@ write_gmon (void)
> /* write basic-block execution counts: */
> write_bb_counts (fd);
>
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> }
>
>
> diff --git a/iconv/gconv_cache.c b/iconv/gconv_cache.c
> index f1dce29..d6a47de 100644
> --- a/iconv/gconv_cache.c
> +++ b/iconv/gconv_cache.c
> @@ -71,7 +71,7 @@ __gconv_load_cache (void)
> || (size_t) st.st_size < sizeof (struct gconvcache_header))
> {
> close_and_exit:
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> return -1;
> }
>
> @@ -108,7 +108,7 @@ __gconv_load_cache (void)
> }
>
> /* We don't need the file descriptor anymore. */
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> /* Check the consistency. */
> header = (struct gconvcache_header *) gconv_cache;
> diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
> index 514e38f..13e2f2a 100644
> --- a/intl/loadmsgcat.c
> +++ b/intl/loadmsgcat.c
> @@ -446,7 +446,7 @@
> because some ISO C functions will require linking with this object
> file and the name space must not be polluted. */
> # define open(name, flags) __open_nocancel (name, flags)
> -# define close(fd) close_not_cancel_no_status (fd)
> +# define close(fd) __close_nocancel_nostatus (fd)
> # define read(fd, buf, n) __read_nocancel (fd, buf, n)
> # define mmap(addr, len, prot, flags, fd, offset) \
> __mmap (addr, len, prot, flags, fd, offset)
> diff --git a/io/ftw.c b/io/ftw.c
> index f33fed3..106b6bf 100644
> --- a/io/ftw.c
> +++ b/io/ftw.c
> @@ -341,7 +341,7 @@ open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp)
> O_RDONLY | O_DIRECTORY | O_NDELAY);
> dirp->stream = NULL;
> if (fd != -1 && (dirp->stream = __fdopendir (fd)) == NULL)
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> }
> else
> {
> @@ -791,7 +791,7 @@ ftw_startup (const char *dir, int is_nftw, void *func, int descriptors,
> {
> int save_err = errno;
> __fchdir (cwdfd);
> - close_not_cancel_no_status (cwdfd);
> + __close_nocancel_nostatus (cwdfd);
> __set_errno (save_err);
> }
> else if (cwd != NULL)
> diff --git a/libio/fileops.c b/libio/fileops.c
> index f025178..b8b02ba 100644
> --- a/libio/fileops.c
> +++ b/libio/fileops.c
> @@ -242,7 +242,7 @@ _IO_file_open (_IO_FILE *fp, const char *filename, int posix_mode, int prot,
> _IO_off64_t new_pos = _IO_SYSSEEK (fp, 0, _IO_seek_end);
> if (new_pos == _IO_pos_BAD && errno != ESPIPE)
> {
> - close_not_cancel (fdesc);
> + __close_nocancel (fdesc);
> return NULL;
> }
> }
> @@ -1231,7 +1231,7 @@ _IO_file_close_mmap (_IO_FILE *fp)
> fp->_IO_buf_base = fp->_IO_buf_end = NULL;
> /* Cancelling close should be avoided if possible since it leaves an
> unrecoverable state behind. */
> - return close_not_cancel (fp->_fileno);
> + return __close_nocancel (fp->_fileno);
> }
>
> int
> @@ -1239,7 +1239,7 @@ _IO_file_close (_IO_FILE *fp)
> {
> /* Cancelling close should be avoided if possible since it leaves an
> unrecoverable state behind. */
> - return close_not_cancel (fp->_fileno);
> + return __close_nocancel (fp->_fileno);
> }
> libc_hidden_def (_IO_file_close)
>
> diff --git a/libio/iopopen.c b/libio/iopopen.c
> index b78e7e5..0c20cbb 100644
> --- a/libio/iopopen.c
> +++ b/libio/iopopen.c
> @@ -76,7 +76,7 @@ extern int _IO_dup2 (int fd, int fd2) __THROW;
>
> #ifndef _IO_close
> #ifdef _LIBC
> -#define _IO_close close_not_cancel
> +#define _IO_close __close_nocancel
> #else
> #define _IO_close close
> #endif
> diff --git a/locale/loadarchive.c b/locale/loadarchive.c
> index 7825a1c..158cf14 100644
> --- a/locale/loadarchive.c
> +++ b/locale/loadarchive.c
> @@ -213,7 +213,7 @@ _nl_load_locale_from_archive (int category, const char **namep)
> /* stat failed, very strange. */
> close_and_out:
> if (fd >= 0)
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> return NULL;
> }
>
> @@ -253,7 +253,7 @@ _nl_load_locale_from_archive (int category, const char **namep)
> {
> /* We've mapped the whole file already, so we can be
> sure we won't need this file descriptor later. */
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> fd = -1;
> }
>
> @@ -452,7 +452,7 @@ _nl_load_locale_from_archive (int category, const char **namep)
>
> /* We don't need the file descriptor any longer. */
> if (fd >= 0)
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> fd = -1;
>
> /* We succeeded in mapping all the necessary regions of the archive.
> diff --git a/locale/loadlocale.c b/locale/loadlocale.c
> index a733557..8ba7595 100644
> --- a/locale/loadlocale.c
> +++ b/locale/loadlocale.c
> @@ -181,7 +181,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
> if (__builtin_expect (__fxstat64 (_STAT_VER, fd, &st), 0) < 0)
> {
> puntfd:
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> return;
> }
> if (__glibc_unlikely (S_ISDIR (st.st_mode)))
> @@ -191,7 +191,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
> char *newp;
> size_t filenamelen;
>
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> filenamelen = strlen (file->filename);
> newp = (char *) alloca (filenamelen
> @@ -257,7 +257,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
> #endif /* _POSIX_MAPPED_FILES */
>
> /* We have mapped the data, so we no longer need the descriptor. */
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> if (__glibc_unlikely (filedata == NULL))
> /* We failed to map or read the data. */
> diff --git a/login/utmp_file.c b/login/utmp_file.c
> index 26e3f4b..68e00f2 100644
> --- a/login/utmp_file.c
> +++ b/login/utmp_file.c
> @@ -382,10 +382,10 @@ pututline_file (const struct utmp *data)
> if (__lseek64 (new_fd, __lseek64 (file_fd, 0, SEEK_CUR), SEEK_SET) == -1
> || __dup2 (new_fd, file_fd) < 0)
> {
> - close_not_cancel_no_status (new_fd);
> + __close_nocancel_nostatus (new_fd);
> return NULL;
> }
> - close_not_cancel_no_status (new_fd);
> + __close_nocancel_nostatus (new_fd);
> file_writable = true;
> }
>
> @@ -471,7 +471,7 @@ endutent_file (void)
> {
> assert (file_fd >= 0);
>
> - close_not_cancel_no_status (file_fd);
> + __close_nocancel_nostatus (file_fd);
> file_fd = -1;
> }
>
> @@ -518,7 +518,7 @@ unlock_return:
> UNLOCK_FILE (fd);
>
> /* Close WTMP file. */
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> return result;
> }
> diff --git a/misc/daemon.c b/misc/daemon.c
> index dd38f2b..21e7859 100644
> --- a/misc/daemon.c
> +++ b/misc/daemon.c
> @@ -80,12 +80,12 @@ daemon (int nochdir, int noclose)
> } else {
> /* We must set an errno value since no
> function call actually failed. */
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> __set_errno (ENODEV);
> return -1;
> }
> } else {
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> return -1;
> }
> }
> diff --git a/nscd/nscd_getai.c b/nscd/nscd_getai.c
> index daaf6d6..03c0296 100644
> --- a/nscd/nscd_getai.c
> +++ b/nscd/nscd_getai.c
> @@ -189,7 +189,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
>
> out_close:
> if (sock != -1)
> - close_not_cancel_no_status (sock);
> + __close_nocancel_nostatus (sock);
> out:
> if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
> {
> diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c
> index 87b4552..1f60261 100644
> --- a/nscd/nscd_getgr_r.c
> +++ b/nscd/nscd_getgr_r.c
> @@ -305,7 +305,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
>
> out_close:
> if (sock != -1)
> - close_not_cancel_no_status (sock);
> + __close_nocancel_nostatus (sock);
> out:
> if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
> {
> diff --git a/nscd/nscd_gethst_r.c b/nscd/nscd_gethst_r.c
> index daa708b..e234c7f 100644
> --- a/nscd/nscd_gethst_r.c
> +++ b/nscd/nscd_gethst_r.c
> @@ -436,7 +436,7 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
>
> out_close:
> if (sock != -1)
> - close_not_cancel_no_status (sock);
> + __close_nocancel_nostatus (sock);
> out:
> if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
> {
> diff --git a/nscd/nscd_getpw_r.c b/nscd/nscd_getpw_r.c
> index b291d2f..fbece1c 100644
> --- a/nscd/nscd_getpw_r.c
> +++ b/nscd/nscd_getpw_r.c
> @@ -218,7 +218,7 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type,
>
> out_close:
> if (sock != -1)
> - close_not_cancel_no_status (sock);
> + __close_nocancel_nostatus (sock);
> out:
> if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
> {
> diff --git a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c
> index 7dfb1c8..12c3104 100644
> --- a/nscd/nscd_getserv_r.c
> +++ b/nscd/nscd_getserv_r.c
> @@ -356,7 +356,7 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
>
> out_close:
> if (sock != -1)
> - close_not_cancel_no_status (sock);
> + __close_nocancel_nostatus (sock);
> out:
> if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
> {
> diff --git a/nscd/nscd_helper.c b/nscd/nscd_helper.c
> index 22905d0..a225623 100644
> --- a/nscd/nscd_helper.c
> +++ b/nscd/nscd_helper.c
> @@ -236,7 +236,7 @@ open_socket (request_type type, const char *key, size_t keylen)
> }
>
> out:
> - close_not_cancel_no_status (sock);
> + __close_nocancel_nostatus (sock);
>
> return -1;
> }
> @@ -555,7 +555,7 @@ __nscd_open_socket (const char *key, size_t keylen, request_type type,
> return sock;
> }
>
> - close_not_cancel_no_status (sock);
> + __close_nocancel_nostatus (sock);
> }
>
> __set_errno (saved_errno);
> diff --git a/nscd/nscd_initgroups.c b/nscd/nscd_initgroups.c
> index 00c6508..c06f2f8 100644
> --- a/nscd/nscd_initgroups.c
> +++ b/nscd/nscd_initgroups.c
> @@ -157,7 +157,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
>
> out_close:
> if (sock != -1)
> - close_not_cancel_no_status (sock);
> + __close_nocancel_nostatus (sock);
> out:
> if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
> {
> diff --git a/nscd/nscd_netgroup.c b/nscd/nscd_netgroup.c
> index 44f37ef..559bb34 100644
> --- a/nscd/nscd_netgroup.c
> +++ b/nscd/nscd_netgroup.c
> @@ -139,7 +139,7 @@ __nscd_setnetgrent (const char *group, struct __netgrent *datap)
>
> out_close:
> if (sock != -1)
> - close_not_cancel_no_status (sock);
> + __close_nocancel_nostatus (sock);
> out:
> if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
> {
> @@ -263,7 +263,7 @@ __nscd_innetgr (const char *netgroup, const char *host, const char *user,
>
> out_close:
> if (sock != -1)
> - close_not_cancel_no_status (sock);
> + __close_nocancel_nostatus (sock);
> out:
> if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
> {
> diff --git a/nss/nss_db/db-open.c b/nss/nss_db/db-open.c
> index 40a2540..bf08ac9 100644
> --- a/nss/nss_db/db-open.c
> +++ b/nss/nss_db/db-open.c
> @@ -52,7 +52,7 @@ internal_setent (const char *file, struct nss_db_map *mapping)
> status = NSS_STATUS_TRYAGAIN;
> }
>
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> }
>
> return status;
> diff --git a/resolv/res-close.c b/resolv/res-close.c
> index 21f038c..766bf42 100644
> --- a/resolv/res-close.c
> +++ b/resolv/res-close.c
> @@ -94,7 +94,7 @@ __res_iclose (res_state statp, bool free_addr)
> {
> if (statp->_vcsock >= 0)
> {
> - close_not_cancel_no_status (statp->_vcsock);
> + __close_nocancel_nostatus (statp->_vcsock);
> statp->_vcsock = -1;
> statp->_flags &= ~(RES_F_VC | RES_F_CONN);
> }
> @@ -103,7 +103,7 @@ __res_iclose (res_state statp, bool free_addr)
> {
> if (statp->_u._ext.nssocks[ns] != -1)
> {
> - close_not_cancel_no_status (statp->_u._ext.nssocks[ns]);
> + __close_nocancel_nostatus (statp->_u._ext.nssocks[ns]);
> statp->_u._ext.nssocks[ns] = -1;
> }
> if (free_addr)
> diff --git a/sunrpc/pm_getmaps.c b/sunrpc/pm_getmaps.c
> index 88c44f0..094492b 100644
> --- a/sunrpc/pm_getmaps.c
> +++ b/sunrpc/pm_getmaps.c
> @@ -81,7 +81,7 @@ pmap_getmaps (struct sockaddr_in *address)
> }
> /* We only need to close the socket here if we opened it. */
> if (closeit)
> - close_not_cancel (socket);
> + __close_nocancel (socket);
> address->sin_port = 0;
> return head;
> }
> diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
> index df9aea6..ee9988a 100644
> --- a/sysdeps/generic/not-cancel.h
> +++ b/sysdeps/generic/not-cancel.h
> @@ -26,9 +26,9 @@
> __openat (__VA_ARGS__)
> #define __openat64_nocancel(...) \
> __openat64 (__VA_ARGS__)
> -#define close_not_cancel(fd) \
> +#define __close_nocancel(fd) \
> __close (fd)
> -#define close_not_cancel_no_status(fd) \
> +#define __close_nocancel_nostatus(fd) \
> (void) __close (fd)
> #define __read_nocancel(fd, buf, n) \
> __read (fd, buf, n)
> diff --git a/sysdeps/posix/closedir.c b/sysdeps/posix/closedir.c
> index e7b7d77..dbde65f 100644
> --- a/sysdeps/posix/closedir.c
> +++ b/sysdeps/posix/closedir.c
> @@ -49,6 +49,6 @@ __closedir (DIR *dirp)
>
> free ((void *) dirp);
>
> - return close_not_cancel (fd);
> + return __close_nocancel (fd);
> }
> weak_alias (__closedir, closedir)
> diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
> index efa7118..6ad309b 100644
> --- a/sysdeps/posix/getaddrinfo.c
> +++ b/sysdeps/posix/getaddrinfo.c
> @@ -2401,7 +2401,7 @@ getaddrinfo (const char *name, const char *service,
> {
> if (fd != -1)
> close_retry:
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> af = q->ai_family;
> fd = __socket (af, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_IP);
> }
> @@ -2504,7 +2504,7 @@ getaddrinfo (const char *name, const char *service,
> }
>
> if (fd != -1)
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> /* We got all the source addresses we can get, now sort using
> the information. */
> diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c
> index ecae628..d341bdf 100644
> --- a/sysdeps/posix/getcwd.c
> +++ b/sysdeps/posix/getcwd.c
> @@ -176,7 +176,7 @@ extern char *alloca ();
> # include <kernel-features.h>
> #else
> # define __openat64_nocancel(dfd, name, mode) openat64 (dfd, name, mode)
> -# define close_not_cancel_no_status(fd) close (fd)
> +# define __close_nocancel_nostatus(fd) close (fd)
> #endif
>
> #ifndef PATH_MAX
> @@ -521,7 +521,7 @@ __getcwd (char *buf, size_t size)
> if (dirstream != NULL)
> __closedir (dirstream);
> if (fd_needs_closing)
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> #ifndef NO_ALLOCATION
> if (buf == NULL)
> free (path);
> diff --git a/sysdeps/posix/opendir.c b/sysdeps/posix/opendir.c
> index 51a92e8..880ebc9 100644
> --- a/sysdeps/posix/opendir.c
> +++ b/sysdeps/posix/opendir.c
> @@ -65,7 +65,7 @@ tryopen_o_directory (void)
>
> if (x >= 0)
> {
> - close_not_cancel_no_status (x);
> + __close_nocancel_nostatus (x);
> o_directory_works = -1;
> }
> else if (errno != ENOTDIR)
> @@ -129,7 +129,7 @@ opendir_tail (int fd)
> {
> __set_errno (ENOTDIR);
> lose:
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> return NULL;
> }
>
> @@ -227,7 +227,7 @@ __alloc_dir (int fd, bool close_fd, int flags, const struct stat64 *statp)
> if (close_fd)
> {
> int save_errno = errno;
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> __set_errno (save_errno);
> }
> return NULL;
> diff --git a/sysdeps/posix/spawni.c b/sysdeps/posix/spawni.c
> index a43b841..7cbdc66 100644
> --- a/sysdeps/posix/spawni.c
> +++ b/sysdeps/posix/spawni.c
> @@ -157,7 +157,7 @@ __spawni_child (void *arguments)
> switch (action->tag)
> {
> case spawn_do_close:
> - if (close_not_cancel (action->action.close_action.fd) != 0)
> + if (__close_nocancel (action->action.close_action.fd) != 0)
> {
> if (have_fdlimit == 0)
> {
> @@ -180,7 +180,7 @@ __spawni_child (void *arguments)
> with the process already at maximum number of file descriptor
> opened and also for multiple actions on single-open special
> paths (like /dev/watchdog). */
> - close_not_cancel (action->action.open_action.fd);
> + __close_nocancel (action->action.open_action.fd);
>
> int new_fd = __open_nocancel (action->action.open_action.path,
> action->action.open_action.oflag
> @@ -197,7 +197,7 @@ __spawni_child (void *arguments)
> != action->action.open_action.fd)
> goto fail;
>
> - if (close_not_cancel (new_fd) != 0)
> + if (__close_nocancel (new_fd) != 0)
> goto fail;
> }
> }
> diff --git a/sysdeps/unix/sysv/linux/check_native.c b/sysdeps/unix/sysv/linux/check_native.c
> index 7e5a7c9..dc2da83 100644
> --- a/sysdeps/unix/sysv/linux/check_native.c
> +++ b/sysdeps/unix/sysv/linux/check_native.c
> @@ -167,7 +167,7 @@ __check_native (uint32_t a1_index, int *a1_native,
> while (! done);
>
> out:
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> return;
>
> diff --git a/sysdeps/unix/sysv/linux/check_pf.c b/sysdeps/unix/sysv/linux/check_pf.c
> index 3bf221a..4dd0275 100644
> --- a/sysdeps/unix/sysv/linux/check_pf.c
> +++ b/sysdeps/unix/sysv/linux/check_pf.c
> @@ -328,7 +328,7 @@ __check_pf (bool *seen_ipv4, bool *seen_ipv6,
> &addr_len) == 0)
> data = make_request (fd, nladdr.nl_pid);
>
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> }
>
> if (data != NULL)
> diff --git a/sysdeps/unix/sysv/linux/close.c b/sysdeps/unix/sysv/linux/close.c
> index 1ac71ce..dd21d8d 100644
> --- a/sysdeps/unix/sysv/linux/close.c
> +++ b/sysdeps/unix/sysv/linux/close.c
> @@ -18,6 +18,7 @@
>
> #include <unistd.h>
> #include <sysdep-cancel.h>
> +#include <not-cancel.h>
>
> /* Close the file descriptor FD. */
> int
> @@ -28,3 +29,14 @@ __close (int fd)
> libc_hidden_def (__close)
> strong_alias (__close, __libc_close)
> weak_alias (__close, close)
> +
> +# if !IS_IN (rtld)
> +int
> +__close_nocancel (int fd)
> +{
> + return INLINE_SYSCALL_CALL (close, fd);
> +}
> +#else
> +strong_alias (__libc_close, __close_nocancel)
> +#endif
> +libc_hidden_def (__close_nocancel)
> diff --git a/sysdeps/unix/sysv/linux/fips-private.h b/sysdeps/unix/sysv/linux/fips-private.h
> index 775f2c2..23833f0 100644
> --- a/sysdeps/unix/sysv/linux/fips-private.h
> +++ b/sysdeps/unix/sysv/linux/fips-private.h
> @@ -50,7 +50,7 @@ fips_enabled_p (void)
> char buf[32];
> ssize_t n;
> n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, sizeof (buf) - 1));
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> if (n > 0)
> {
> diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c
> index 11c7e73..ca03877 100644
> --- a/sysdeps/unix/sysv/linux/gethostid.c
> +++ b/sysdeps/unix/sysv/linux/gethostid.c
> @@ -53,7 +53,7 @@ sethostid (long int id)
>
> written = __write_nocancel (fd, &id32, sizeof (id32));
>
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> return written != sizeof (id32) ? -1 : 0;
> }
> @@ -82,7 +82,7 @@ gethostid (void)
> {
> ssize_t n = __read_nocancel (fd, &id, sizeof (id));
>
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> if (n == sizeof (id))
> return id;
> diff --git a/sysdeps/unix/sysv/linux/getloadavg.c b/sysdeps/unix/sysv/linux/getloadavg.c
> index 64bad17..4b75741 100644
> --- a/sysdeps/unix/sysv/linux/getloadavg.c
> +++ b/sysdeps/unix/sysv/linux/getloadavg.c
> @@ -43,7 +43,7 @@ getloadavg (double loadavg[], int nelem)
> int i;
>
> nread = __read_nocancel (fd, buf, sizeof buf - 1);
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> if (nread <= 0)
> return -1;
> buf[nread - 1] = '\0';
> diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c
> index 1de746b..45c468f 100644
> --- a/sysdeps/unix/sysv/linux/getlogin_r.c
> +++ b/sysdeps/unix/sysv/linux/getlogin_r.c
> @@ -43,7 +43,7 @@ __getlogin_r_loginuid (char *name, size_t namesize)
> char uidbuf[12];
> ssize_t n = TEMP_FAILURE_RETRY (__read_nocancel (fd, uidbuf,
> sizeof (uidbuf)));
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> uid_t uid;
> char *endp;
> diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
> index d1400d6..d02c86d 100644
> --- a/sysdeps/unix/sysv/linux/getsysstats.c
> +++ b/sysdeps/unix/sysv/linux/getsysstats.c
> @@ -180,7 +180,7 @@ __get_nprocs (void)
> }
> while (l < re);
>
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> if (result > 0)
> goto out;
> @@ -207,7 +207,7 @@ __get_nprocs (void)
> else if (isdigit (l[3]))
> ++result;
>
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> }
> else
> {
> @@ -215,7 +215,7 @@ __get_nprocs (void)
> if (fd != -1)
> {
> GET_NPROCS_PARSER (fd, buffer, cp, re, buffer_end, result);
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> }
> }
>
> diff --git a/sysdeps/unix/sysv/linux/grantpt.c b/sysdeps/unix/sysv/linux/grantpt.c
> index 97c6ba7..2030e07 100644
> --- a/sysdeps/unix/sysv/linux/grantpt.c
> +++ b/sysdeps/unix/sysv/linux/grantpt.c
> @@ -26,7 +26,7 @@ close_all_fds (void)
> char *endp;
> long int fd = strtol (d->d_name, &endp, 10);
> if (*endp == '\0' && fd != PTY_FILENO && fd != dirfd (dir))
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> }
>
> __closedir (dir);
> diff --git a/sysdeps/unix/sysv/linux/i386/smp.h b/sysdeps/unix/sysv/linux/i386/smp.h
> index eb1ac5d..320958a 100644
> --- a/sysdeps/unix/sysv/linux/i386/smp.h
> +++ b/sysdeps/unix/sysv/linux/i386/smp.h
> @@ -47,7 +47,7 @@ is_smp_system (void)
> /* This also didn't work. We give up and say it's a UP machine. */
> u.buf[0] = '\0';
>
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> cp = u.buf;
> }
>
> diff --git a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
> index 6aab1e8..79c95b4 100644
> --- a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
> +++ b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
> @@ -41,7 +41,7 @@ has_cpuclock (void)
> || buf[0] != '0' || buf[1] != '\n')
> newval = -1;
>
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> }
>
> itc_usable = newval;
> diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c
> index 8ba5eae..56f3f13 100644
> --- a/sysdeps/unix/sysv/linux/if_index.c
> +++ b/sysdeps/unix/sysv/linux/if_index.c
> @@ -47,12 +47,12 @@ __if_nametoindex (const char *ifname)
> if (__ioctl (fd, SIOCGIFINDEX, &ifr) < 0)
> {
> int saved_errno = errno;
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> if (saved_errno == EINVAL)
> __set_errno (ENOSYS);
> return 0;
> }
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> return ifr.ifr_ifindex;
> #endif
> }
> @@ -224,7 +224,7 @@ __if_indextoname (unsigned int ifindex, char *ifname)
> ifr.ifr_ifindex = ifindex;
> status = __ioctl (fd, SIOCGIFNAME, &ifr);
>
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> if (status < 0)
> {
> diff --git a/sysdeps/unix/sysv/linux/libc_fatal.c b/sysdeps/unix/sysv/linux/libc_fatal.c
> index c7c6a07..4bc1521 100644
> --- a/sysdeps/unix/sysv/linux/libc_fatal.c
> +++ b/sysdeps/unix/sysv/linux/libc_fatal.c
> @@ -59,7 +59,7 @@ backtrace_and_maps (int do_abort, bool written, int fd)
> while ((n2 = __read_nocancel (fd2, buf, sizeof (buf))) > 0)
> if (__write_nocancel (fd, buf, n2) != n2)
> break;
> - close_not_cancel_no_status (fd2);
> + __close_nocancel_nostatus (fd2);
> }
> }
> }
> diff --git a/sysdeps/unix/sysv/linux/malloc-sysdep.h b/sysdeps/unix/sysv/linux/malloc-sysdep.h
> index 7a7acba..4bb7bc0 100644
> --- a/sysdeps/unix/sysv/linux/malloc-sysdep.h
> +++ b/sysdeps/unix/sysv/linux/malloc-sysdep.h
> @@ -49,7 +49,7 @@ check_may_shrink_heap (void)
> char val;
> ssize_t n = __read_nocancel (fd, &val, 1);
> may_shrink_heap = n > 0 && val == '2';
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
> }
> }
>
> diff --git a/sysdeps/unix/sysv/linux/mq_notify.c b/sysdeps/unix/sysv/linux/mq_notify.c
> index 626430c..f12e6f5 100644
> --- a/sysdeps/unix/sysv/linux/mq_notify.c
> +++ b/sysdeps/unix/sysv/linux/mq_notify.c
> @@ -209,7 +209,7 @@ init_mq_netlink (void)
>
> if (err != 0)
> {
> - close_not_cancel_no_status (netlink_socket);
> + __close_nocancel_nostatus (netlink_socket);
> netlink_socket = -1;
> }
> }
> diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
> index 08ad773..684541a 100644
> --- a/sysdeps/unix/sysv/linux/not-cancel.h
> +++ b/sysdeps/unix/sysv/linux/not-cancel.h
> @@ -51,13 +51,17 @@ __typeof (__write) __write_nocancel;
> libc_hidden_proto (__write_nocancel)
>
> /* Uncancelable close. */
> -#define __close_nocancel(fd) \
> - INLINE_SYSCALL (close, 1, fd)
> -#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)); })
> +__typeof (__close) __close_nocancel;
> +libc_hidden_proto (__close_nocancel)
> +
> +/* Non cancellable close syscall that does not also set errno in case of
> + failure. */
> +static inline void
> +__close_nocancel_nostatus (int fd)
> +{
> + INTERNAL_SYSCALL_DECL (err);
> + INTERNAL_SYSCALL (close, err, 1, (fd));
> +}
>
> /* Uncancelable writev. */
> #define writev_not_cancel_no_status(fd, iov, n) \
> diff --git a/sysdeps/unix/sysv/linux/pthread_getname.c b/sysdeps/unix/sysv/linux/pthread_getname.c
> index 93c1dfd..d3dfee0 100644
> --- a/sysdeps/unix/sysv/linux/pthread_getname.c
> +++ b/sysdeps/unix/sysv/linux/pthread_getname.c
> @@ -63,7 +63,7 @@ pthread_getname_np (pthread_t th, char *buf, size_t len)
> buf[n] = '\0';
> }
>
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> return res;
> }
> diff --git a/sysdeps/unix/sysv/linux/pthread_setname.c b/sysdeps/unix/sysv/linux/pthread_setname.c
> index c5e9a33..2f68086 100644
> --- a/sysdeps/unix/sysv/linux/pthread_setname.c
> +++ b/sysdeps/unix/sysv/linux/pthread_setname.c
> @@ -57,7 +57,7 @@ pthread_setname_np (pthread_t th, const char *name)
> else if (n != name_len)
> res = EIO;
>
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> return res;
> }
> diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c
> index 4994a07..dea1650 100644
> --- a/sysdeps/unix/sysv/linux/spawni.c
> +++ b/sysdeps/unix/sysv/linux/spawni.c
> @@ -205,7 +205,7 @@ __spawni_child (void *arguments)
> switch (action->tag)
> {
> case spawn_do_close:
> - if (close_not_cancel (action->action.close_action.fd) != 0)
> + if (__close_nocancel (action->action.close_action.fd) != 0)
> {
> if (!have_fdlimit)
> {
> @@ -228,7 +228,7 @@ __spawni_child (void *arguments)
> with the process already at maximum number of file descriptor
> opened and also for multiple actions on single-open special
> paths (like /dev/watchdog). */
> - close_not_cancel (action->action.open_action.fd);
> + __close_nocancel (action->action.open_action.fd);
>
> int ret = __open_nocancel (action->action.open_action.path,
> action->action.
> @@ -247,7 +247,7 @@ __spawni_child (void *arguments)
> != action->action.open_action.fd)
> goto fail;
>
> - if (close_not_cancel (new_fd) != 0)
> + if (__close_nocancel (new_fd) != 0)
> goto fail;
> }
> }
> diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c
> index f9becfb..773a6ac 100644
> --- a/sysdeps/unix/sysv/linux/sysconf.c
> +++ b/sysdeps/unix/sysv/linux/sysconf.c
> @@ -122,7 +122,7 @@ __sysconf (int name)
> char buf[32];
> ssize_t n;
> n = TEMP_FAILURE_RETRY (__read_nocancel (fd, buf, sizeof (buf) - 1));
> - close_not_cancel_no_status (fd);
> + __close_nocancel_nostatus (fd);
>
> if (n > 0)
> {
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 07/14] Consolidate non cancellable fcntl call
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
` (7 preceding siblings ...)
2017-08-03 13:12 ` [PATCH 05/14] Consolidate non cancellable close call Adhemerval Zanella
@ 2017-08-03 13:12 ` Adhemerval Zanella
2017-08-21 14:37 ` Adhemerval Zanella
2017-08-03 13:12 ` [PATCH 01/14] Consolidate non cancellable open call Adhemerval Zanella
` (5 subsequent siblings)
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:12 UTC (permalink / raw)
To: libc-alpha
This patch consolidates all the non cancellable fcntl calls to use
the __fcntl_nocancel identifier. For non cancellable targets it will
be just a macro to call the default respective symbol while on Linux
will be a internal one.
Since its prototype is already defined at internal fcntl.h header, it
is removed from not-cancel.h one.
Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
* login/utmp_file.c (timeout_handler): Replace fcntl_not_cancel with
__fcntl_nocancel.
* sysdeps/generic/not-cancel.h (fcntl_not_cancel): Remove macro.
* sysdeps/unix/sysv/linux/not-cancel.h (fcntl_not_cancel): Likewise.
---
ChangeLog | 5 +++++
login/utmp_file.c | 4 ++--
sysdeps/generic/not-cancel.h | 2 --
sysdeps/unix/sysv/linux/not-cancel.h | 4 ----
4 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index fbf0c6a..e1df1c1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * login/utmp_file.c (timeout_handler): Replace fcntl_not_cancel with
+ __fcntl_nocancel.
+ * sysdeps/generic/not-cancel.h (fcntl_not_cancel): Remove macro.
+ * sysdeps/unix/sysv/linux/not-cancel.h (fcntl_not_cancel): Likewise.
+
* gmon/gmon.c (write_hist): Replace writev_not_cancel_no_status with
__writev_nocancel_nostatus.
(write_call_graph): Likewise.
diff --git a/login/utmp_file.c b/login/utmp_file.c
index 68e00f2..d410b6c 100644
--- a/login/utmp_file.c
+++ b/login/utmp_file.c
@@ -81,7 +81,7 @@ static void timeout_handler (int signum) {};
memset (&fl, '\0', sizeof (struct flock)); \
fl.l_type = (type); \
fl.l_whence = SEEK_SET; \
- if (fcntl_not_cancel ((fd), F_SETLKW, &fl) < 0)
+ if (__fcntl_nocancel ((fd), F_SETLKW, &fl) < 0)
#define LOCKING_FAILED() \
goto unalarm_return
@@ -89,7 +89,7 @@ static void timeout_handler (int signum) {};
#define UNLOCK_FILE(fd) \
/* Unlock the file. */ \
fl.l_type = F_UNLCK; \
- fcntl_not_cancel ((fd), F_SETLKW, &fl); \
+ __fcntl_nocancel ((fd), F_SETLKW, &fl); \
\
unalarm_return: \
/* Reset the signal handler and alarm. We must reset the alarm \
diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
index e3ed0e6..cf84550 100644
--- a/sysdeps/generic/not-cancel.h
+++ b/sysdeps/generic/not-cancel.h
@@ -36,8 +36,6 @@
__write (fd, buf, n)
#define __writev_nocancel_nostatus(fd, iov, n) \
(void) __writev (fd, iov, n)
-#define fcntl_not_cancel(fd, cmd, val) \
- __fcntl (fd, cmd, val)
# define waitpid_not_cancel(pid, stat_loc, options) \
__waitpid (pid, stat_loc, options)
#define pause_not_cancel() \
diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
index 419a3fa..8f567d3 100644
--- a/sysdeps/unix/sysv/linux/not-cancel.h
+++ b/sysdeps/unix/sysv/linux/not-cancel.h
@@ -72,10 +72,6 @@ __writev_nocancel_nostatus (int fd, const struct iovec *iov, int iovcnt)
INTERNAL_SYSCALL_CALL (writev, err, fd, iov, iovcnt);
}
-/* Uncancelable fcntl. */
-#define fcntl_not_cancel(fd, cmd, val) \
- __fcntl_nocancel (fd, cmd, val)
-
/* Uncancelable waitpid. */
#define __waitpid_nocancel(pid, stat_loc, options) \
INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL)
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 07/14] Consolidate non cancellable fcntl call
2017-08-03 13:12 ` [PATCH 07/14] Consolidate non cancellable fcntl call Adhemerval Zanella
@ 2017-08-21 14:37 ` Adhemerval Zanella
0 siblings, 0 replies; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-21 14:37 UTC (permalink / raw)
To: libc-alpha
Since this is a refactor, if no one opposes I will commit it shortly.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> This patch consolidates all the non cancellable fcntl calls to use
> the __fcntl_nocancel identifier. For non cancellable targets it will
> be just a macro to call the default respective symbol while on Linux
> will be a internal one.
>
> Since its prototype is already defined at internal fcntl.h header, it
> is removed from not-cancel.h one.
>
> Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
>
> * login/utmp_file.c (timeout_handler): Replace fcntl_not_cancel with
> __fcntl_nocancel.
> * sysdeps/generic/not-cancel.h (fcntl_not_cancel): Remove macro.
> * sysdeps/unix/sysv/linux/not-cancel.h (fcntl_not_cancel): Likewise.
> ---
> ChangeLog | 5 +++++
> login/utmp_file.c | 4 ++--
> sysdeps/generic/not-cancel.h | 2 --
> sysdeps/unix/sysv/linux/not-cancel.h | 4 ----
> 4 files changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index fbf0c6a..e1df1c1 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,10 @@
> 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> + * login/utmp_file.c (timeout_handler): Replace fcntl_not_cancel with
> + __fcntl_nocancel.
> + * sysdeps/generic/not-cancel.h (fcntl_not_cancel): Remove macro.
> + * sysdeps/unix/sysv/linux/not-cancel.h (fcntl_not_cancel): Likewise.
> +
> * gmon/gmon.c (write_hist): Replace writev_not_cancel_no_status with
> __writev_nocancel_nostatus.
> (write_call_graph): Likewise.
> diff --git a/login/utmp_file.c b/login/utmp_file.c
> index 68e00f2..d410b6c 100644
> --- a/login/utmp_file.c
> +++ b/login/utmp_file.c
> @@ -81,7 +81,7 @@ static void timeout_handler (int signum) {};
> memset (&fl, '\0', sizeof (struct flock)); \
> fl.l_type = (type); \
> fl.l_whence = SEEK_SET; \
> - if (fcntl_not_cancel ((fd), F_SETLKW, &fl) < 0)
> + if (__fcntl_nocancel ((fd), F_SETLKW, &fl) < 0)
>
> #define LOCKING_FAILED() \
> goto unalarm_return
> @@ -89,7 +89,7 @@ static void timeout_handler (int signum) {};
> #define UNLOCK_FILE(fd) \
> /* Unlock the file. */ \
> fl.l_type = F_UNLCK; \
> - fcntl_not_cancel ((fd), F_SETLKW, &fl); \
> + __fcntl_nocancel ((fd), F_SETLKW, &fl); \
> \
> unalarm_return: \
> /* Reset the signal handler and alarm. We must reset the alarm \
> diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
> index e3ed0e6..cf84550 100644
> --- a/sysdeps/generic/not-cancel.h
> +++ b/sysdeps/generic/not-cancel.h
> @@ -36,8 +36,6 @@
> __write (fd, buf, n)
> #define __writev_nocancel_nostatus(fd, iov, n) \
> (void) __writev (fd, iov, n)
> -#define fcntl_not_cancel(fd, cmd, val) \
> - __fcntl (fd, cmd, val)
> # define waitpid_not_cancel(pid, stat_loc, options) \
> __waitpid (pid, stat_loc, options)
> #define pause_not_cancel() \
> diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
> index 419a3fa..8f567d3 100644
> --- a/sysdeps/unix/sysv/linux/not-cancel.h
> +++ b/sysdeps/unix/sysv/linux/not-cancel.h
> @@ -72,10 +72,6 @@ __writev_nocancel_nostatus (int fd, const struct iovec *iov, int iovcnt)
> INTERNAL_SYSCALL_CALL (writev, err, fd, iov, iovcnt);
> }
>
> -/* Uncancelable fcntl. */
> -#define fcntl_not_cancel(fd, cmd, val) \
> - __fcntl_nocancel (fd, cmd, val)
> -
> /* Uncancelable waitpid. */
> #define __waitpid_nocancel(pid, stat_loc, options) \
> INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL)
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 01/14] Consolidate non cancellable open call
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
` (8 preceding siblings ...)
2017-08-03 13:12 ` [PATCH 07/14] Consolidate non cancellable fcntl call Adhemerval Zanella
@ 2017-08-03 13:12 ` Adhemerval Zanella
2017-08-16 20:07 ` Adhemerval Zanella
2017-08-03 13:12 ` [PATCH 04/14] Consolidate non cancellable openat call Adhemerval Zanella
` (4 subsequent siblings)
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:12 UTC (permalink / raw)
To: libc-alpha
This patch consolidates all the non cancellable open calls to use
the __open_nocancel identifier. For non cancellable targets it will
be just a macro to call the default respective symbol while on Linux
will be a internal one.
To be consistent with the following non cancellable openat call, a
new __open64_nocancel is also added (although not currently used).
Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
* sysdeps/generic/not-cancel.h (open_not_cancel): Remove macro.
(open_not_cancel_2): Likewise.
(open_nocancel): New macro.
(open64_nocancel): Likewise.
* sysdeps/unix/sysv/linux/not-cancel.h (open_not_cancel): Remove macro.
(open_not_cancel_2): Likewise.
(__open_nocancel): New prototype.
(__open64_nocancel): Likewise.
* sysdeps/unix/sysv/linux/Versions (libc) [GLIBC_PRIVATE]: Add
__open_nocancel.
* sysdeps/unix/sysv/linux/open.c (__open_nocancel): New function.
* sysdeps/unix/sysv/linux/open64.c (__open64_nocancel): Likewise.
* catgets/open_catalog.c (__open_catalog): Replace open_not_cancel{_2}
with __open_nocancel.
* csu/check_fds.c (check_one_fd): Likewise.
* gmon/gmon.c (write_gmon): Likewise.
* iconv/gconv_cache.c (__gconv_load_cached): Likewise.
* intl/loadmsgcat.c (open): Likewise.
* libio/fileops.c (_IO_file_open): Likewise.
* locale/loadarchive.c (_nl_load_locale_from_archive): Likewise.
* locale/loadlocale.c (_nl_load_locale): Likewise.
* login/utmp_file.c (setutent_file): Likewise.
* misc/daemon.c (daemon): Likewise.
* nss/nss_db/db-open.c (internal_setent): Likewise.
* sysdeps/mach/hurd/opendir.c (__opendirat): Likewise.
* sysdeps/posix/libc_fatal.c (__libc_message): Likewise.
* sysdeps/posix/opendir.c (tryopen_o_directory): Likewise.
(__opendir): Likewise.
* sysdeps/posix/spawni.c (__spawni_child): Likewise.
* sysdeps/unix/sysv/linux/fips-private.h (fips_enable_p): Likewise.
* sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise.
(gethostid): Likewise.
* sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise.
* sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
Likewise.
* sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Likewise.
* sysdeps/unix/sysv/linux/grantpt.c (__close_all_fds): Likewise.
* sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
* sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock):
Likewise.
* sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps):
Likewise.
* sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap):
Likewise.
* sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c (__get_clockfreq):
Likewise.
* sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np):
Likewise.
* sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np):
Likewise.
* sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise.
* sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise.
---
ChangeLog | 55 +++++++++++++++++++++++++
catgets/open_catalog.c | 4 +-
csu/check_fds.c | 2 +-
gmon/gmon.c | 4 +-
iconv/gconv_cache.c | 2 +-
intl/loadmsgcat.c | 2 +-
libio/fileops.c | 2 +-
locale/loadarchive.c | 6 +--
locale/loadlocale.c | 4 +-
login/utmp_file.c | 6 +--
misc/daemon.c | 2 +-
nss/nss_db/db-open.c | 2 +-
sysdeps/generic/not-cancel.h | 8 ++--
sysdeps/mach/hurd/opendir.c | 2 +-
sysdeps/posix/libc_fatal.c | 2 +-
sysdeps/posix/opendir.c | 4 +-
sysdeps/posix/spawni.c | 2 +-
sysdeps/unix/sysv/linux/Versions | 1 +
sysdeps/unix/sysv/linux/fips-private.h | 2 +-
sysdeps/unix/sysv/linux/gethostid.c | 4 +-
sysdeps/unix/sysv/linux/getloadavg.c | 2 +-
sysdeps/unix/sysv/linux/getlogin_r.c | 2 +-
sysdeps/unix/sysv/linux/getsysstats.c | 6 +--
sysdeps/unix/sysv/linux/grantpt.c | 4 +-
sysdeps/unix/sysv/linux/i386/smp.h | 2 +-
sysdeps/unix/sysv/linux/ia64/has_cpuclock.c | 2 +-
sysdeps/unix/sysv/linux/libc_fatal.c | 2 +-
sysdeps/unix/sysv/linux/malloc-sysdep.h | 4 +-
sysdeps/unix/sysv/linux/not-cancel.h | 20 ++++-----
sysdeps/unix/sysv/linux/open.c | 21 ++++++++++
sysdeps/unix/sysv/linux/open64.c | 38 ++++++++++++++---
sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c | 2 +-
sysdeps/unix/sysv/linux/pthread_getname.c | 2 +-
sysdeps/unix/sysv/linux/pthread_setname.c | 2 +-
sysdeps/unix/sysv/linux/spawni.c | 2 +-
sysdeps/unix/sysv/linux/sysconf.c | 2 +-
36 files changed, 164 insertions(+), 65 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index c28024e..04e9f71 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,58 @@
+2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+
+ * sysdeps/generic/not-cancel.h (open_not_cancel): Remove macro.
+ (open_not_cancel_2): Likewise.
+ (open_nocancel): New macro.
+ (open64_nocancel): Likewise.
+ * sysdeps/unix/sysv/linux/not-cancel.h (open_not_cancel): Remove macro.
+ (open_not_cancel_2): Likewise.
+ (__open_nocancel): New prototype.
+ (__open64_nocancel): Likewise.
+ * sysdeps/unix/sysv/linux/Versions (libc) [GLIBC_PRIVATE]: Add
+ __open_nocancel.
+ * sysdeps/unix/sysv/linux/open.c (__open_nocancel): New function.
+ * sysdeps/unix/sysv/linux/open64.c (__open64_nocancel): Likewise.
+ * catgets/open_catalog.c (__open_catalog): Replace open_not_cancel{_2}
+ with __open_nocancel.
+ * csu/check_fds.c (check_one_fd): Likewise.
+ * gmon/gmon.c (write_gmon): Likewise.
+ * iconv/gconv_cache.c (__gconv_load_cached): Likewise.
+ * intl/loadmsgcat.c (open): Likewise.
+ * libio/fileops.c (_IO_file_open): Likewise.
+ * locale/loadarchive.c (_nl_load_locale_from_archive): Likewise.
+ * locale/loadlocale.c (_nl_load_locale): Likewise.
+ * login/utmp_file.c (setutent_file): Likewise.
+ * misc/daemon.c (daemon): Likewise.
+ * nss/nss_db/db-open.c (internal_setent): Likewise.
+ * sysdeps/mach/hurd/opendir.c (__opendirat): Likewise.
+ * sysdeps/posix/libc_fatal.c (__libc_message): Likewise.
+ * sysdeps/posix/opendir.c (tryopen_o_directory): Likewise.
+ (__opendir): Likewise.
+ * sysdeps/posix/spawni.c (__spawni_child): Likewise.
+ * sysdeps/unix/sysv/linux/fips-private.h (fips_enable_p): Likewise.
+ * sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise.
+ (gethostid): Likewise.
+ * sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise.
+ * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
+ Likewise.
+ * sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Likewise.
+ * sysdeps/unix/sysv/linux/grantpt.c (__close_all_fds): Likewise.
+ * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
+ * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock):
+ Likewise.
+ * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps):
+ Likewise.
+ * sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap):
+ Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c (__get_clockfreq):
+ Likewise.
+ * sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np):
+ Likewise.
+ * sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np):
+ Likewise.
+ * sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise.
+ * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise.
+
2017-08-02 Siddhesh Poyarekar <siddhesh@sourceware.org>
* version.h (RELEASE): Set to "development"
diff --git a/catgets/open_catalog.c b/catgets/open_catalog.c
index cbb305a..4621b26 100644
--- a/catgets/open_catalog.c
+++ b/catgets/open_catalog.c
@@ -50,7 +50,7 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var,
char *buf = NULL;
if (strchr (cat_name, '/') != NULL || nlspath == NULL)
- fd = open_not_cancel_2 (cat_name, O_RDONLY);
+ fd = __open_nocancel (cat_name, O_RDONLY);
else
{
const char *run_nlspath = nlspath;
@@ -178,7 +178,7 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var,
if (bufact != 0)
{
- fd = open_not_cancel_2 (buf, O_RDONLY);
+ fd = __open_nocancel (buf, O_RDONLY);
if (fd >= 0)
break;
}
diff --git a/csu/check_fds.c b/csu/check_fds.c
index 062c879..5bd6392 100644
--- a/csu/check_fds.c
+++ b/csu/check_fds.c
@@ -61,7 +61,7 @@ check_one_fd (int fd, int mode)
/* Something is wrong with this descriptor, it's probably not
opened. Open /dev/null so that the SUID program we are
about to start does not accidentally use this descriptor. */
- int nullfd = open_not_cancel (name, mode, 0);
+ int nullfd = __open_nocancel (name, mode, 0);
/* We are very paranoid here. With all means we try to ensure
that we are actually opening the /dev/null device and nothing
diff --git a/gmon/gmon.c b/gmon/gmon.c
index f394a78..87c3c4e 100644
--- a/gmon/gmon.c
+++ b/gmon/gmon.c
@@ -342,12 +342,12 @@ write_gmon (void)
size_t len = strlen (env);
char buf[len + 20];
__snprintf (buf, sizeof (buf), "%s.%u", env, __getpid ());
- fd = open_not_cancel (buf, O_CREAT|O_TRUNC|O_WRONLY|O_NOFOLLOW, 0666);
+ fd = __open_nocancel (buf, O_CREAT|O_TRUNC|O_WRONLY|O_NOFOLLOW, 0666);
}
if (fd == -1)
{
- fd = open_not_cancel ("gmon.out", O_CREAT|O_TRUNC|O_WRONLY|O_NOFOLLOW,
+ fd = __open_nocancel ("gmon.out", O_CREAT|O_TRUNC|O_WRONLY|O_NOFOLLOW,
0666);
if (fd < 0)
{
diff --git a/iconv/gconv_cache.c b/iconv/gconv_cache.c
index 0cadea3..f1dce29 100644
--- a/iconv/gconv_cache.c
+++ b/iconv/gconv_cache.c
@@ -59,7 +59,7 @@ __gconv_load_cache (void)
return -1;
/* See whether the cache file exists. */
- fd = open_not_cancel (GCONV_MODULES_CACHE, O_RDONLY, 0);
+ fd = __open_nocancel (GCONV_MODULES_CACHE, O_RDONLY, 0);
if (__builtin_expect (fd, 0) == -1)
/* Not available. */
return -1;
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
index c2ff64e..adca419 100644
--- a/intl/loadmsgcat.c
+++ b/intl/loadmsgcat.c
@@ -445,7 +445,7 @@
/* Rename the non ISO C functions. This is required by the standard
because some ISO C functions will require linking with this object
file and the name space must not be polluted. */
-# define open(name, flags) open_not_cancel_2 (name, flags)
+# define open(name, flags) __open_nocancel (name, flags)
# define close(fd) close_not_cancel_no_status (fd)
# define read(fd, buf, n) read_not_cancel (fd, buf, n)
# define mmap(addr, len, prot, flags, fd, offset) \
diff --git a/libio/fileops.c b/libio/fileops.c
index c55e196..67f3d72 100644
--- a/libio/fileops.c
+++ b/libio/fileops.c
@@ -223,7 +223,7 @@ _IO_file_open (_IO_FILE *fp, const char *filename, int posix_mode, int prot,
int fdesc;
#ifdef _LIBC
if (__glibc_unlikely (fp->_flags2 & _IO_FLAGS2_NOTCANCEL))
- fdesc = open_not_cancel (filename,
+ fdesc = __open_nocancel (filename,
posix_mode | (is32not64 ? 0 : O_LARGEFILE), prot);
else
fdesc = open (filename, posix_mode | (is32not64 ? 0 : O_LARGEFILE), prot);
diff --git a/locale/loadarchive.c b/locale/loadarchive.c
index e6e1a05..7825a1c 100644
--- a/locale/loadarchive.c
+++ b/locale/loadarchive.c
@@ -203,7 +203,7 @@ _nl_load_locale_from_archive (int category, const char **namep)
archmapped = &headmap;
/* The archive has never been opened. */
- fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
if (fd < 0)
/* Cannot open the archive, for whatever reason. */
return NULL;
@@ -398,8 +398,8 @@ _nl_load_locale_from_archive (int category, const char **namep)
if (fd == -1)
{
struct stat64 st;
- fd = open_not_cancel_2 (archfname,
- O_RDONLY|O_LARGEFILE|O_CLOEXEC);
+ fd = __open_nocancel (archfname,
+ O_RDONLY|O_LARGEFILE|O_CLOEXEC);
if (fd == -1)
/* Cannot open the archive, for whatever reason. */
return NULL;
diff --git a/locale/loadlocale.c b/locale/loadlocale.c
index 9bca304..9c69ad4 100644
--- a/locale/loadlocale.c
+++ b/locale/loadlocale.c
@@ -173,7 +173,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
file->decided = 1;
file->data = NULL;
- fd = open_not_cancel_2 (file->filename, O_RDONLY | O_CLOEXEC);
+ fd = __open_nocancel (file->filename, O_RDONLY | O_CLOEXEC);
if (__builtin_expect (fd, 0) < 0)
/* Cannot open the file. */
return;
@@ -201,7 +201,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
_nl_category_names.str + _nl_category_name_idxs[category],
_nl_category_name_sizes[category] + 1);
- fd = open_not_cancel_2 (newp, O_RDONLY | O_CLOEXEC);
+ fd = __open_nocancel (newp, O_RDONLY | O_CLOEXEC);
if (__builtin_expect (fd, 0) < 0)
return;
diff --git a/login/utmp_file.c b/login/utmp_file.c
index 240e0e3..1407116 100644
--- a/login/utmp_file.c
+++ b/login/utmp_file.c
@@ -143,7 +143,7 @@ setutent_file (void)
file_name = TRANSFORM_UTMP_FILE_NAME (__libc_utmp_file_name);
file_writable = false;
- file_fd = open_not_cancel_2
+ file_fd = __open_nocancel
(file_name, O_RDONLY | O_LARGEFILE | O_CLOEXEC);
if (file_fd == -1)
return 0;
@@ -374,7 +374,7 @@ pututline_file (const struct utmp *data)
/* We must make the file descriptor writable before going on. */
const char *file_name = TRANSFORM_UTMP_FILE_NAME (__libc_utmp_file_name);
- int new_fd = open_not_cancel_2
+ int new_fd = __open_nocancel
(file_name, O_RDWR | O_LARGEFILE | O_CLOEXEC);
if (new_fd == -1)
return NULL;
@@ -484,7 +484,7 @@ updwtmp_file (const char *file, const struct utmp *utmp)
int fd;
/* Open WTMP file. */
- fd = open_not_cancel_2 (file, O_WRONLY | O_LARGEFILE);
+ fd = __open_nocancel (file, O_WRONLY | O_LARGEFILE);
if (fd < 0)
return -1;
diff --git a/misc/daemon.c b/misc/daemon.c
index 9d186b2..dd38f2b 100644
--- a/misc/daemon.c
+++ b/misc/daemon.c
@@ -63,7 +63,7 @@ daemon (int nochdir, int noclose)
if (!noclose) {
struct stat64 st;
- if ((fd = open_not_cancel(_PATH_DEVNULL, O_RDWR, 0)) != -1
+ if ((fd = __open_nocancel(_PATH_DEVNULL, O_RDWR, 0)) != -1
&& (__builtin_expect (__fxstat64 (_STAT_VER, fd, &st), 0)
== 0)) {
if (__builtin_expect (S_ISCHR (st.st_mode), 1) != 0
diff --git a/nss/nss_db/db-open.c b/nss/nss_db/db-open.c
index 1c58bd1..40a2540 100644
--- a/nss/nss_db/db-open.c
+++ b/nss/nss_db/db-open.c
@@ -36,7 +36,7 @@ internal_setent (const char *file, struct nss_db_map *mapping)
{
enum nss_status status = NSS_STATUS_UNAVAIL;
- int fd = open_not_cancel_2 (file, O_RDONLY | O_LARGEFILE | O_CLOEXEC);
+ int fd = __open_nocancel (file, O_RDONLY | O_LARGEFILE | O_CLOEXEC);
if (fd != -1)
{
struct nss_db_header header;
diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
index 5eabd2b..a4f7b7b 100644
--- a/sysdeps/generic/not-cancel.h
+++ b/sysdeps/generic/not-cancel.h
@@ -18,10 +18,10 @@
<http://www.gnu.org/licenses/>. */
/* By default we have none. Map the name to the normal functions. */
-#define open_not_cancel(name, flags, mode) \
- __libc_open (name, flags, mode)
-#define open_not_cancel_2(name, flags) \
- __libc_open (name, flags)
+#define __open_nocancel(...) \
+ __open (__VA_ARGS__)
+#define __open64_nocancel(...) \
+ __open64 (__VA_ARGS__)
#define openat_not_cancel(fd, name, flags, mode) \
__openat (fd, name, flags, mode)
#define openat_not_cancel_3(fd, name, flags) \
diff --git a/sysdeps/mach/hurd/opendir.c b/sysdeps/mach/hurd/opendir.c
index b3dab24..8db70b2 100644
--- a/sysdeps/mach/hurd/opendir.c
+++ b/sysdeps/mach/hurd/opendir.c
@@ -84,7 +84,7 @@ __opendirat (int dfd, const char *name)
int fd;
#if IS_IN (rtld)
assert (dfd == AT_FDCWD);
- fd = open_not_cancel_2 (name, flags);
+ fd = __open_nocancel (name, flags);
#else
fd = openat_not_cancel_3 (dfd, name, flags);
#endif
diff --git a/sysdeps/posix/libc_fatal.c b/sysdeps/posix/libc_fatal.c
index c918919..fbb1bec 100644
--- a/sysdeps/posix/libc_fatal.c
+++ b/sysdeps/posix/libc_fatal.c
@@ -83,7 +83,7 @@ __libc_message (enum __libc_message_action action, const char *fmt, ...)
requests errors on standard error. */
const char *on_2 = __libc_secure_getenv ("LIBC_FATAL_STDERR_");
if (on_2 == NULL || *on_2 == '\0')
- fd = open_not_cancel_2 (_PATH_TTY, O_RDWR | O_NOCTTY | O_NDELAY);
+ fd = __open_nocancel (_PATH_TTY, O_RDWR | O_NOCTTY | O_NDELAY);
}
if (fd == -1)
diff --git a/sysdeps/posix/opendir.c b/sysdeps/posix/opendir.c
index 909aa61..3ee27b2 100644
--- a/sysdeps/posix/opendir.c
+++ b/sysdeps/posix/opendir.c
@@ -61,7 +61,7 @@ static void
tryopen_o_directory (void)
{
int serrno = errno;
- int x = open_not_cancel_2 ("/dev/null", O_RDONLY|O_NDELAY|O_DIRECTORY);
+ int x = __open_nocancel ("/dev/null", O_RDONLY|O_NDELAY|O_DIRECTORY);
if (x >= 0)
{
@@ -188,7 +188,7 @@ __opendir (const char *name)
}
}
- return opendir_tail (open_not_cancel_2 (name, opendir_oflags));
+ return opendir_tail (__open_nocancel (name, opendir_oflags));
}
weak_alias (__opendir, opendir)
diff --git a/sysdeps/posix/spawni.c b/sysdeps/posix/spawni.c
index 0b5ef08..823db11 100644
--- a/sysdeps/posix/spawni.c
+++ b/sysdeps/posix/spawni.c
@@ -182,7 +182,7 @@ __spawni_child (void *arguments)
paths (like /dev/watchdog). */
close_not_cancel (action->action.open_action.fd);
- int new_fd = open_not_cancel (action->action.open_action.path,
+ int new_fd = __open_nocancel (action->action.open_action.path,
action->action.open_action.oflag
| O_LARGEFILE,
action->action.open_action.mode);
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 202ffcc..3c64077 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -169,6 +169,7 @@ libc {
GLIBC_PRIVATE {
# functions used in other libraries
__syscall_rt_sigqueueinfo;
+ __open_nocancel;
# functions used by nscd
__netlink_assert_response;
}
diff --git a/sysdeps/unix/sysv/linux/fips-private.h b/sysdeps/unix/sysv/linux/fips-private.h
index c9fe266..3a83a0f 100644
--- a/sysdeps/unix/sysv/linux/fips-private.h
+++ b/sysdeps/unix/sysv/linux/fips-private.h
@@ -42,7 +42,7 @@ fips_enabled_p (void)
if (checked == FIPS_UNTESTED)
{
- int fd = open_not_cancel_2 ("/proc/sys/crypto/fips_enabled", O_RDONLY);
+ int fd = __open_nocancel ("/proc/sys/crypto/fips_enabled", O_RDONLY);
if (fd != -1)
{
diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c
index cc108aa..3ea8656 100644
--- a/sysdeps/unix/sysv/linux/gethostid.c
+++ b/sysdeps/unix/sysv/linux/gethostid.c
@@ -47,7 +47,7 @@ sethostid (long int id)
}
/* Open file for writing. Everybody is allowed to read this file. */
- fd = open_not_cancel (HOSTIDFILE, O_CREAT|O_WRONLY|O_TRUNC, 0644);
+ fd = __open_nocancel (HOSTIDFILE, O_CREAT|O_WRONLY|O_TRUNC, 0644);
if (fd < 0)
return -1;
@@ -77,7 +77,7 @@ gethostid (void)
int fd;
/* First try to get the ID from a former invocation of sethostid. */
- fd = open_not_cancel (HOSTIDFILE, O_RDONLY|O_LARGEFILE, 0);
+ fd = __open_nocancel (HOSTIDFILE, O_RDONLY|O_LARGEFILE, 0);
if (fd >= 0)
{
ssize_t n = read_not_cancel (fd, &id, sizeof (id));
diff --git a/sysdeps/unix/sysv/linux/getloadavg.c b/sysdeps/unix/sysv/linux/getloadavg.c
index 117f8c2..0bfe41d 100644
--- a/sysdeps/unix/sysv/linux/getloadavg.c
+++ b/sysdeps/unix/sysv/linux/getloadavg.c
@@ -33,7 +33,7 @@ getloadavg (double loadavg[], int nelem)
{
int fd;
- fd = open_not_cancel_2 ("/proc/loadavg", O_RDONLY);
+ fd = __open_nocancel ("/proc/loadavg", O_RDONLY);
if (fd < 0)
return -1;
else
diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c
index 05ac36b..2519792 100644
--- a/sysdeps/unix/sysv/linux/getlogin_r.c
+++ b/sysdeps/unix/sysv/linux/getlogin_r.c
@@ -34,7 +34,7 @@ int
attribute_hidden
__getlogin_r_loginuid (char *name, size_t namesize)
{
- int fd = open_not_cancel_2 ("/proc/self/loginuid", O_RDONLY);
+ int fd = __open_nocancel ("/proc/self/loginuid", O_RDONLY);
if (fd == -1)
return -1;
diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
index a0dd6eb..e21a34c 100644
--- a/sysdeps/unix/sysv/linux/getsysstats.c
+++ b/sysdeps/unix/sysv/linux/getsysstats.c
@@ -143,7 +143,7 @@ __get_nprocs (void)
char *re = buffer_end;
const int flags = O_RDONLY | O_CLOEXEC;
- int fd = open_not_cancel_2 ("/sys/devices/system/cpu/online", flags);
+ int fd = __open_nocancel ("/sys/devices/system/cpu/online", flags);
char *l;
int result = 0;
if (fd != -1)
@@ -194,7 +194,7 @@ __get_nprocs (void)
result = 2;
/* The /proc/stat format is more uniform, use it by default. */
- fd = open_not_cancel_2 ("/proc/stat", flags);
+ fd = __open_nocancel ("/proc/stat", flags);
if (fd != -1)
{
result = 0;
@@ -211,7 +211,7 @@ __get_nprocs (void)
}
else
{
- fd = open_not_cancel_2 ("/proc/cpuinfo", flags);
+ fd = __open_nocancel ("/proc/cpuinfo", flags);
if (fd != -1)
{
GET_NPROCS_PARSER (fd, buffer, cp, re, buffer_end, result);
diff --git a/sysdeps/unix/sysv/linux/grantpt.c b/sysdeps/unix/sysv/linux/grantpt.c
index 8cebde3..97c6ba7 100644
--- a/sysdeps/unix/sysv/linux/grantpt.c
+++ b/sysdeps/unix/sysv/linux/grantpt.c
@@ -31,9 +31,9 @@ close_all_fds (void)
__closedir (dir);
- int nullfd = open_not_cancel_2 (_PATH_DEVNULL, O_RDONLY);
+ int nullfd = __open_nocancel (_PATH_DEVNULL, O_RDONLY);
assert (nullfd == STDIN_FILENO);
- nullfd = open_not_cancel_2 (_PATH_DEVNULL, O_WRONLY);
+ nullfd = __open_nocancel (_PATH_DEVNULL, O_WRONLY);
assert (nullfd == STDOUT_FILENO);
__dup2 (STDOUT_FILENO, STDERR_FILENO);
}
diff --git a/sysdeps/unix/sysv/linux/i386/smp.h b/sysdeps/unix/sysv/linux/i386/smp.h
index 3109ea9..c24f2fd 100644
--- a/sysdeps/unix/sysv/linux/i386/smp.h
+++ b/sysdeps/unix/sysv/linux/i386/smp.h
@@ -41,7 +41,7 @@ is_smp_system (void)
else
{
/* This was not successful. Now try reading the /proc filesystem. */
- int fd = open_not_cancel_2 ("/proc/sys/kernel/version", O_RDONLY);
+ int fd = __open_nocancel ("/proc/sys/kernel/version", O_RDONLY);
if (__builtin_expect (fd, 0) == -1
|| read_not_cancel (fd, u.buf, sizeof (u.buf)) <= 0)
/* This also didn't work. We give up and say it's a UP machine. */
diff --git a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
index 2207c88..04e395b 100644
--- a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
+++ b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
@@ -30,7 +30,7 @@ has_cpuclock (void)
if (__builtin_expect (itc_usable == 0, 0))
{
int newval = 1;
- int fd = open_not_cancel_2 ("/proc/sal/itc_drift", O_RDONLY);
+ int fd = __open_nocancel ("/proc/sal/itc_drift", O_RDONLY);
if (__builtin_expect (fd != -1, 1))
{
char buf[16];
diff --git a/sysdeps/unix/sysv/linux/libc_fatal.c b/sysdeps/unix/sysv/linux/libc_fatal.c
index d22bfdc..5b484cf 100644
--- a/sysdeps/unix/sysv/linux/libc_fatal.c
+++ b/sysdeps/unix/sysv/linux/libc_fatal.c
@@ -53,7 +53,7 @@ backtrace_and_maps (int do_abort, bool written, int fd)
__backtrace_symbols_fd (addrs + 1, n - 1, fd);
writestr (strnsize ("======= Memory map: ========\n"));
- int fd2 = open_not_cancel_2 ("/proc/self/maps", O_RDONLY);
+ int fd2 = __open_nocancel ("/proc/self/maps", O_RDONLY);
char buf[1024];
ssize_t n2;
while ((n2 = read_not_cancel (fd2, buf, sizeof (buf))) > 0)
diff --git a/sysdeps/unix/sysv/linux/malloc-sysdep.h b/sysdeps/unix/sysv/linux/malloc-sysdep.h
index 48cf7c1..cb87b58 100644
--- a/sysdeps/unix/sysv/linux/malloc-sysdep.h
+++ b/sysdeps/unix/sysv/linux/malloc-sysdep.h
@@ -42,8 +42,8 @@ check_may_shrink_heap (void)
if (__builtin_expect (may_shrink_heap == 0, 1))
{
- int fd = open_not_cancel_2 ("/proc/sys/vm/overcommit_memory",
- O_RDONLY | O_CLOEXEC);
+ int fd = __open_nocancel ("/proc/sys/vm/overcommit_memory",
+ O_RDONLY | O_CLOEXEC);
if (fd >= 0)
{
char val;
diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
index 43959ba..8d897f0 100644
--- a/sysdeps/unix/sysv/linux/not-cancel.h
+++ b/sysdeps/unix/sysv/linux/not-cancel.h
@@ -20,23 +20,19 @@
#ifndef NOT_CANCEL_H
# define NOT_CANCEL_H
+#include <fcntl.h>
#include <sysdep.h>
#include <errno.h>
#include <unistd.h>
#include <sys/syscall.h>
-/* Uncancelable open. */
-#ifdef __NR_open
-# define open_not_cancel(name, flags, mode) \
- INLINE_SYSCALL (open, 3, name, flags, mode)
-# define open_not_cancel_2(name, flags) \
- INLINE_SYSCALL (open, 2, name, flags)
-#else
-# define open_not_cancel(name, flags, mode) \
- INLINE_SYSCALL (openat, 4, AT_FDCWD, name, flags, mode)
-# define open_not_cancel_2(name, flags) \
- INLINE_SYSCALL (openat, 3, AT_FDCWD, name, flags)
-#endif
+/* Non cancellable open syscall. */
+__typeof (open) __open_nocancel;
+libc_hidden_proto (__open_nocancel)
+
+/* Non cancellable open syscall (LFS version). */
+__typeof (open64) __open64_nocancel;
+libc_hidden_proto (__open64_nocancel)
/* Uncancelable read. */
#define __read_nocancel(fd, buf, len) \
diff --git a/sysdeps/unix/sysv/linux/open.c b/sysdeps/unix/sysv/linux/open.c
index b3912d5..3ef0e53 100644
--- a/sysdeps/unix/sysv/linux/open.c
+++ b/sysdeps/unix/sysv/linux/open.c
@@ -22,6 +22,7 @@
#include <stdarg.h>
#include <sysdep-cancel.h>
+#include <not-cancel.h>
#ifndef __OFF_T_MATCHES_OFF64_T
@@ -48,4 +49,24 @@ weak_alias (__libc_open, __open)
libc_hidden_weak (__open)
weak_alias (__libc_open, open)
+# if !IS_IN (rtld)
+int
+__open_nocancel (const char *file, int oflag, ...)
+{
+ int mode = 0;
+
+ if (__OPEN_NEEDS_MODE (oflag))
+ {
+ va_list arg;
+ va_start (arg, oflag);
+ mode = va_arg (arg, int);
+ va_end (arg);
+ }
+
+ return INLINE_SYSCALL_CALL (openat, AT_FDCWD, file, oflag, mode);
+}
+# else
+strong_alias (__libc_open, __open_nocancel)
+# endif
+libc_hidden_def (__open_nocancel)
#endif
diff --git a/sysdeps/unix/sysv/linux/open64.c b/sysdeps/unix/sysv/linux/open64.c
index fcac984..b4702c3 100644
--- a/sysdeps/unix/sysv/linux/open64.c
+++ b/sysdeps/unix/sysv/linux/open64.c
@@ -21,6 +21,13 @@
#include <stdarg.h>
#include <sysdep-cancel.h>
+#include <not-cancel.h>
+
+#ifdef __OFF_T_MATCHES_OFF64_T
+# define EXTRA_OPEN_FLAGS 0
+#else
+# define EXTRA_OPEN_FLAGS O_LARGEFILE
+#endif
/* Open FILE with access OFLAG. If O_CREAT or O_TMPFILE is in OFLAG,
a third argument is the file protection. */
@@ -37,12 +44,6 @@ __libc_open64 (const char *file, int oflag, ...)
va_end (arg);
}
-#ifdef __OFF_T_MATCHES_OFF64_T
-# define EXTRA_OPEN_FLAGS 0
-#else
-# define EXTRA_OPEN_FLAGS O_LARGEFILE
-#endif
-
return SYSCALL_CANCEL (openat, AT_FDCWD, file, oflag | EXTRA_OPEN_FLAGS,
mode);
}
@@ -51,9 +52,34 @@ strong_alias (__libc_open64, __open64)
libc_hidden_weak (__open64)
weak_alias (__libc_open64, open64)
+# if !IS_IN (rtld)
+int
+__open64_nocancel (const char *file, int oflag, ...)
+{
+ int mode = 0;
+
+ if (__OPEN_NEEDS_MODE (oflag))
+ {
+ va_list arg;
+ va_start (arg, oflag);
+ mode = va_arg (arg, int);
+ va_end (arg);
+ }
+
+ return INLINE_SYSCALL_CALL (openat, AT_FDCWD, file, oflag | EXTRA_OPEN_FLAGS,
+ mode);
+}
+#else
+strong_alias (__libc_open64, __open64_nocancel)
+#endif
+libc_hidden_def (__open64_nocancel)
+
#ifdef __OFF_T_MATCHES_OFF64_T
strong_alias (__libc_open64, __libc_open)
strong_alias (__libc_open64, __open)
libc_hidden_weak (__open)
weak_alias (__libc_open64, open)
+
+strong_alias (__open64_nocancel, __open_nocancel)
+libc_hidden_weak (__open_nocancel)
#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c b/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c
index b8d01d8..c99e7de 100644
--- a/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c
+++ b/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c
@@ -40,7 +40,7 @@ __get_clockfreq (void)
contains at least one line like:
timebase : 33333333
We search for this line and convert the number into an integer. */
- int fd = open_not_cancel_2 ("/proc/cpuinfo", O_RDONLY);
+ int fd = __open_nocancel ("/proc/cpuinfo", O_RDONLY);
if (__glibc_likely (fd != -1))
return result;
diff --git a/sysdeps/unix/sysv/linux/pthread_getname.c b/sysdeps/unix/sysv/linux/pthread_getname.c
index 9a5343a..caab2cc 100644
--- a/sysdeps/unix/sysv/linux/pthread_getname.c
+++ b/sysdeps/unix/sysv/linux/pthread_getname.c
@@ -45,7 +45,7 @@ pthread_getname_np (pthread_t th, char *buf, size_t len)
char fname[sizeof (FMT) + 8];
sprintf (fname, FMT, (unsigned int) pd->tid);
- int fd = open_not_cancel_2 (fname, O_RDONLY);
+ int fd = __open_nocancel (fname, O_RDONLY);
if (fd == -1)
return errno;
diff --git a/sysdeps/unix/sysv/linux/pthread_setname.c b/sysdeps/unix/sysv/linux/pthread_setname.c
index 5769c5b..93f0e9d 100644
--- a/sysdeps/unix/sysv/linux/pthread_setname.c
+++ b/sysdeps/unix/sysv/linux/pthread_setname.c
@@ -46,7 +46,7 @@ pthread_setname_np (pthread_t th, const char *name)
char fname[sizeof (FMT) + 8];
sprintf (fname, FMT, (unsigned int) pd->tid);
- int fd = open_not_cancel_2 (fname, O_RDWR);
+ int fd = __open_nocancel (fname, O_RDWR);
if (fd == -1)
return errno;
diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c
index c56f894..4994a07 100644
--- a/sysdeps/unix/sysv/linux/spawni.c
+++ b/sysdeps/unix/sysv/linux/spawni.c
@@ -230,7 +230,7 @@ __spawni_child (void *arguments)
paths (like /dev/watchdog). */
close_not_cancel (action->action.open_action.fd);
- int ret = open_not_cancel (action->action.open_action.path,
+ int ret = __open_nocancel (action->action.open_action.path,
action->action.
open_action.oflag | O_LARGEFILE,
action->action.open_action.mode);
diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c
index db20977..ab068ab 100644
--- a/sysdeps/unix/sysv/linux/sysconf.c
+++ b/sysdeps/unix/sysv/linux/sysconf.c
@@ -115,7 +115,7 @@ __sysconf (int name)
if (procfname != NULL)
{
- int fd = open_not_cancel_2 (procfname, O_RDONLY);
+ int fd = __open_nocancel (procfname, O_RDONLY);
if (fd != -1)
{
/* This is more than enough, the file contains a single integer. */
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 01/14] Consolidate non cancellable open call
2017-08-03 13:12 ` [PATCH 01/14] Consolidate non cancellable open call Adhemerval Zanella
@ 2017-08-16 20:07 ` Adhemerval Zanella
0 siblings, 0 replies; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-16 20:07 UTC (permalink / raw)
To: libc-alpha
Since this is a refactor, if no one opposes I will commit it shortly.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> This patch consolidates all the non cancellable open calls to use
> the __open_nocancel identifier. For non cancellable targets it will
> be just a macro to call the default respective symbol while on Linux
> will be a internal one.
>
> To be consistent with the following non cancellable openat call, a
> new __open64_nocancel is also added (although not currently used).
>
> Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
>
> * sysdeps/generic/not-cancel.h (open_not_cancel): Remove macro.
> (open_not_cancel_2): Likewise.
> (open_nocancel): New macro.
> (open64_nocancel): Likewise.
> * sysdeps/unix/sysv/linux/not-cancel.h (open_not_cancel): Remove macro.
> (open_not_cancel_2): Likewise.
> (__open_nocancel): New prototype.
> (__open64_nocancel): Likewise.
> * sysdeps/unix/sysv/linux/Versions (libc) [GLIBC_PRIVATE]: Add
> __open_nocancel.
> * sysdeps/unix/sysv/linux/open.c (__open_nocancel): New function.
> * sysdeps/unix/sysv/linux/open64.c (__open64_nocancel): Likewise.
> * catgets/open_catalog.c (__open_catalog): Replace open_not_cancel{_2}
> with __open_nocancel.
> * csu/check_fds.c (check_one_fd): Likewise.
> * gmon/gmon.c (write_gmon): Likewise.
> * iconv/gconv_cache.c (__gconv_load_cached): Likewise.
> * intl/loadmsgcat.c (open): Likewise.
> * libio/fileops.c (_IO_file_open): Likewise.
> * locale/loadarchive.c (_nl_load_locale_from_archive): Likewise.
> * locale/loadlocale.c (_nl_load_locale): Likewise.
> * login/utmp_file.c (setutent_file): Likewise.
> * misc/daemon.c (daemon): Likewise.
> * nss/nss_db/db-open.c (internal_setent): Likewise.
> * sysdeps/mach/hurd/opendir.c (__opendirat): Likewise.
> * sysdeps/posix/libc_fatal.c (__libc_message): Likewise.
> * sysdeps/posix/opendir.c (tryopen_o_directory): Likewise.
> (__opendir): Likewise.
> * sysdeps/posix/spawni.c (__spawni_child): Likewise.
> * sysdeps/unix/sysv/linux/fips-private.h (fips_enable_p): Likewise.
> * sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise.
> (gethostid): Likewise.
> * sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise.
> * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
> Likewise.
> * sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Likewise.
> * sysdeps/unix/sysv/linux/grantpt.c (__close_all_fds): Likewise.
> * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
> * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock):
> Likewise.
> * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps):
> Likewise.
> * sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap):
> Likewise.
> * sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c (__get_clockfreq):
> Likewise.
> * sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np):
> Likewise.
> * sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np):
> Likewise.
> * sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise.
> * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise.
> ---
> ChangeLog | 55 +++++++++++++++++++++++++
> catgets/open_catalog.c | 4 +-
> csu/check_fds.c | 2 +-
> gmon/gmon.c | 4 +-
> iconv/gconv_cache.c | 2 +-
> intl/loadmsgcat.c | 2 +-
> libio/fileops.c | 2 +-
> locale/loadarchive.c | 6 +--
> locale/loadlocale.c | 4 +-
> login/utmp_file.c | 6 +--
> misc/daemon.c | 2 +-
> nss/nss_db/db-open.c | 2 +-
> sysdeps/generic/not-cancel.h | 8 ++--
> sysdeps/mach/hurd/opendir.c | 2 +-
> sysdeps/posix/libc_fatal.c | 2 +-
> sysdeps/posix/opendir.c | 4 +-
> sysdeps/posix/spawni.c | 2 +-
> sysdeps/unix/sysv/linux/Versions | 1 +
> sysdeps/unix/sysv/linux/fips-private.h | 2 +-
> sysdeps/unix/sysv/linux/gethostid.c | 4 +-
> sysdeps/unix/sysv/linux/getloadavg.c | 2 +-
> sysdeps/unix/sysv/linux/getlogin_r.c | 2 +-
> sysdeps/unix/sysv/linux/getsysstats.c | 6 +--
> sysdeps/unix/sysv/linux/grantpt.c | 4 +-
> sysdeps/unix/sysv/linux/i386/smp.h | 2 +-
> sysdeps/unix/sysv/linux/ia64/has_cpuclock.c | 2 +-
> sysdeps/unix/sysv/linux/libc_fatal.c | 2 +-
> sysdeps/unix/sysv/linux/malloc-sysdep.h | 4 +-
> sysdeps/unix/sysv/linux/not-cancel.h | 20 ++++-----
> sysdeps/unix/sysv/linux/open.c | 21 ++++++++++
> sysdeps/unix/sysv/linux/open64.c | 38 ++++++++++++++---
> sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c | 2 +-
> sysdeps/unix/sysv/linux/pthread_getname.c | 2 +-
> sysdeps/unix/sysv/linux/pthread_setname.c | 2 +-
> sysdeps/unix/sysv/linux/spawni.c | 2 +-
> sysdeps/unix/sysv/linux/sysconf.c | 2 +-
> 36 files changed, 164 insertions(+), 65 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index c28024e..04e9f71 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,58 @@
> +2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
> +
> + * sysdeps/generic/not-cancel.h (open_not_cancel): Remove macro.
> + (open_not_cancel_2): Likewise.
> + (open_nocancel): New macro.
> + (open64_nocancel): Likewise.
> + * sysdeps/unix/sysv/linux/not-cancel.h (open_not_cancel): Remove macro.
> + (open_not_cancel_2): Likewise.
> + (__open_nocancel): New prototype.
> + (__open64_nocancel): Likewise.
> + * sysdeps/unix/sysv/linux/Versions (libc) [GLIBC_PRIVATE]: Add
> + __open_nocancel.
> + * sysdeps/unix/sysv/linux/open.c (__open_nocancel): New function.
> + * sysdeps/unix/sysv/linux/open64.c (__open64_nocancel): Likewise.
> + * catgets/open_catalog.c (__open_catalog): Replace open_not_cancel{_2}
> + with __open_nocancel.
> + * csu/check_fds.c (check_one_fd): Likewise.
> + * gmon/gmon.c (write_gmon): Likewise.
> + * iconv/gconv_cache.c (__gconv_load_cached): Likewise.
> + * intl/loadmsgcat.c (open): Likewise.
> + * libio/fileops.c (_IO_file_open): Likewise.
> + * locale/loadarchive.c (_nl_load_locale_from_archive): Likewise.
> + * locale/loadlocale.c (_nl_load_locale): Likewise.
> + * login/utmp_file.c (setutent_file): Likewise.
> + * misc/daemon.c (daemon): Likewise.
> + * nss/nss_db/db-open.c (internal_setent): Likewise.
> + * sysdeps/mach/hurd/opendir.c (__opendirat): Likewise.
> + * sysdeps/posix/libc_fatal.c (__libc_message): Likewise.
> + * sysdeps/posix/opendir.c (tryopen_o_directory): Likewise.
> + (__opendir): Likewise.
> + * sysdeps/posix/spawni.c (__spawni_child): Likewise.
> + * sysdeps/unix/sysv/linux/fips-private.h (fips_enable_p): Likewise.
> + * sysdeps/unix/sysv/linux/gethostid.c (sethostid): Likewise.
> + (gethostid): Likewise.
> + * sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Likewise.
> + * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
> + Likewise.
> + * sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Likewise.
> + * sysdeps/unix/sysv/linux/grantpt.c (__close_all_fds): Likewise.
> + * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
> + * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c (has_cpuclock):
> + Likewise.
> + * sysdeps/unix/sysv/linux/libc_fatal.c (backtrace_and_maps):
> + Likewise.
> + * sysdeps/unix/sysv/linux/malloc-sysdep.h (check_may_shrink_heap):
> + Likewise.
> + * sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c (__get_clockfreq):
> + Likewise.
> + * sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np):
> + Likewise.
> + * sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np):
> + Likewise.
> + * sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise.
> + * sysdeps/unix/sysv/linux/sysconf.c (__sysconf): Likewise.
> +
> 2017-08-02 Siddhesh Poyarekar <siddhesh@sourceware.org>
>
> * version.h (RELEASE): Set to "development"
> diff --git a/catgets/open_catalog.c b/catgets/open_catalog.c
> index cbb305a..4621b26 100644
> --- a/catgets/open_catalog.c
> +++ b/catgets/open_catalog.c
> @@ -50,7 +50,7 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var,
> char *buf = NULL;
>
> if (strchr (cat_name, '/') != NULL || nlspath == NULL)
> - fd = open_not_cancel_2 (cat_name, O_RDONLY);
> + fd = __open_nocancel (cat_name, O_RDONLY);
> else
> {
> const char *run_nlspath = nlspath;
> @@ -178,7 +178,7 @@ __open_catalog (const char *cat_name, const char *nlspath, const char *env_var,
>
> if (bufact != 0)
> {
> - fd = open_not_cancel_2 (buf, O_RDONLY);
> + fd = __open_nocancel (buf, O_RDONLY);
> if (fd >= 0)
> break;
> }
> diff --git a/csu/check_fds.c b/csu/check_fds.c
> index 062c879..5bd6392 100644
> --- a/csu/check_fds.c
> +++ b/csu/check_fds.c
> @@ -61,7 +61,7 @@ check_one_fd (int fd, int mode)
> /* Something is wrong with this descriptor, it's probably not
> opened. Open /dev/null so that the SUID program we are
> about to start does not accidentally use this descriptor. */
> - int nullfd = open_not_cancel (name, mode, 0);
> + int nullfd = __open_nocancel (name, mode, 0);
>
> /* We are very paranoid here. With all means we try to ensure
> that we are actually opening the /dev/null device and nothing
> diff --git a/gmon/gmon.c b/gmon/gmon.c
> index f394a78..87c3c4e 100644
> --- a/gmon/gmon.c
> +++ b/gmon/gmon.c
> @@ -342,12 +342,12 @@ write_gmon (void)
> size_t len = strlen (env);
> char buf[len + 20];
> __snprintf (buf, sizeof (buf), "%s.%u", env, __getpid ());
> - fd = open_not_cancel (buf, O_CREAT|O_TRUNC|O_WRONLY|O_NOFOLLOW, 0666);
> + fd = __open_nocancel (buf, O_CREAT|O_TRUNC|O_WRONLY|O_NOFOLLOW, 0666);
> }
>
> if (fd == -1)
> {
> - fd = open_not_cancel ("gmon.out", O_CREAT|O_TRUNC|O_WRONLY|O_NOFOLLOW,
> + fd = __open_nocancel ("gmon.out", O_CREAT|O_TRUNC|O_WRONLY|O_NOFOLLOW,
> 0666);
> if (fd < 0)
> {
> diff --git a/iconv/gconv_cache.c b/iconv/gconv_cache.c
> index 0cadea3..f1dce29 100644
> --- a/iconv/gconv_cache.c
> +++ b/iconv/gconv_cache.c
> @@ -59,7 +59,7 @@ __gconv_load_cache (void)
> return -1;
>
> /* See whether the cache file exists. */
> - fd = open_not_cancel (GCONV_MODULES_CACHE, O_RDONLY, 0);
> + fd = __open_nocancel (GCONV_MODULES_CACHE, O_RDONLY, 0);
> if (__builtin_expect (fd, 0) == -1)
> /* Not available. */
> return -1;
> diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
> index c2ff64e..adca419 100644
> --- a/intl/loadmsgcat.c
> +++ b/intl/loadmsgcat.c
> @@ -445,7 +445,7 @@
> /* Rename the non ISO C functions. This is required by the standard
> because some ISO C functions will require linking with this object
> file and the name space must not be polluted. */
> -# define open(name, flags) open_not_cancel_2 (name, flags)
> +# define open(name, flags) __open_nocancel (name, flags)
> # define close(fd) close_not_cancel_no_status (fd)
> # define read(fd, buf, n) read_not_cancel (fd, buf, n)
> # define mmap(addr, len, prot, flags, fd, offset) \
> diff --git a/libio/fileops.c b/libio/fileops.c
> index c55e196..67f3d72 100644
> --- a/libio/fileops.c
> +++ b/libio/fileops.c
> @@ -223,7 +223,7 @@ _IO_file_open (_IO_FILE *fp, const char *filename, int posix_mode, int prot,
> int fdesc;
> #ifdef _LIBC
> if (__glibc_unlikely (fp->_flags2 & _IO_FLAGS2_NOTCANCEL))
> - fdesc = open_not_cancel (filename,
> + fdesc = __open_nocancel (filename,
> posix_mode | (is32not64 ? 0 : O_LARGEFILE), prot);
> else
> fdesc = open (filename, posix_mode | (is32not64 ? 0 : O_LARGEFILE), prot);
> diff --git a/locale/loadarchive.c b/locale/loadarchive.c
> index e6e1a05..7825a1c 100644
> --- a/locale/loadarchive.c
> +++ b/locale/loadarchive.c
> @@ -203,7 +203,7 @@ _nl_load_locale_from_archive (int category, const char **namep)
> archmapped = &headmap;
>
> /* The archive has never been opened. */
> - fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
> + fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
> if (fd < 0)
> /* Cannot open the archive, for whatever reason. */
> return NULL;
> @@ -398,8 +398,8 @@ _nl_load_locale_from_archive (int category, const char **namep)
> if (fd == -1)
> {
> struct stat64 st;
> - fd = open_not_cancel_2 (archfname,
> - O_RDONLY|O_LARGEFILE|O_CLOEXEC);
> + fd = __open_nocancel (archfname,
> + O_RDONLY|O_LARGEFILE|O_CLOEXEC);
> if (fd == -1)
> /* Cannot open the archive, for whatever reason. */
> return NULL;
> diff --git a/locale/loadlocale.c b/locale/loadlocale.c
> index 9bca304..9c69ad4 100644
> --- a/locale/loadlocale.c
> +++ b/locale/loadlocale.c
> @@ -173,7 +173,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
> file->decided = 1;
> file->data = NULL;
>
> - fd = open_not_cancel_2 (file->filename, O_RDONLY | O_CLOEXEC);
> + fd = __open_nocancel (file->filename, O_RDONLY | O_CLOEXEC);
> if (__builtin_expect (fd, 0) < 0)
> /* Cannot open the file. */
> return;
> @@ -201,7 +201,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
> _nl_category_names.str + _nl_category_name_idxs[category],
> _nl_category_name_sizes[category] + 1);
>
> - fd = open_not_cancel_2 (newp, O_RDONLY | O_CLOEXEC);
> + fd = __open_nocancel (newp, O_RDONLY | O_CLOEXEC);
> if (__builtin_expect (fd, 0) < 0)
> return;
>
> diff --git a/login/utmp_file.c b/login/utmp_file.c
> index 240e0e3..1407116 100644
> --- a/login/utmp_file.c
> +++ b/login/utmp_file.c
> @@ -143,7 +143,7 @@ setutent_file (void)
> file_name = TRANSFORM_UTMP_FILE_NAME (__libc_utmp_file_name);
>
> file_writable = false;
> - file_fd = open_not_cancel_2
> + file_fd = __open_nocancel
> (file_name, O_RDONLY | O_LARGEFILE | O_CLOEXEC);
> if (file_fd == -1)
> return 0;
> @@ -374,7 +374,7 @@ pututline_file (const struct utmp *data)
> /* We must make the file descriptor writable before going on. */
> const char *file_name = TRANSFORM_UTMP_FILE_NAME (__libc_utmp_file_name);
>
> - int new_fd = open_not_cancel_2
> + int new_fd = __open_nocancel
> (file_name, O_RDWR | O_LARGEFILE | O_CLOEXEC);
> if (new_fd == -1)
> return NULL;
> @@ -484,7 +484,7 @@ updwtmp_file (const char *file, const struct utmp *utmp)
> int fd;
>
> /* Open WTMP file. */
> - fd = open_not_cancel_2 (file, O_WRONLY | O_LARGEFILE);
> + fd = __open_nocancel (file, O_WRONLY | O_LARGEFILE);
> if (fd < 0)
> return -1;
>
> diff --git a/misc/daemon.c b/misc/daemon.c
> index 9d186b2..dd38f2b 100644
> --- a/misc/daemon.c
> +++ b/misc/daemon.c
> @@ -63,7 +63,7 @@ daemon (int nochdir, int noclose)
> if (!noclose) {
> struct stat64 st;
>
> - if ((fd = open_not_cancel(_PATH_DEVNULL, O_RDWR, 0)) != -1
> + if ((fd = __open_nocancel(_PATH_DEVNULL, O_RDWR, 0)) != -1
> && (__builtin_expect (__fxstat64 (_STAT_VER, fd, &st), 0)
> == 0)) {
> if (__builtin_expect (S_ISCHR (st.st_mode), 1) != 0
> diff --git a/nss/nss_db/db-open.c b/nss/nss_db/db-open.c
> index 1c58bd1..40a2540 100644
> --- a/nss/nss_db/db-open.c
> +++ b/nss/nss_db/db-open.c
> @@ -36,7 +36,7 @@ internal_setent (const char *file, struct nss_db_map *mapping)
> {
> enum nss_status status = NSS_STATUS_UNAVAIL;
>
> - int fd = open_not_cancel_2 (file, O_RDONLY | O_LARGEFILE | O_CLOEXEC);
> + int fd = __open_nocancel (file, O_RDONLY | O_LARGEFILE | O_CLOEXEC);
> if (fd != -1)
> {
> struct nss_db_header header;
> diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
> index 5eabd2b..a4f7b7b 100644
> --- a/sysdeps/generic/not-cancel.h
> +++ b/sysdeps/generic/not-cancel.h
> @@ -18,10 +18,10 @@
> <http://www.gnu.org/licenses/>. */
>
> /* By default we have none. Map the name to the normal functions. */
> -#define open_not_cancel(name, flags, mode) \
> - __libc_open (name, flags, mode)
> -#define open_not_cancel_2(name, flags) \
> - __libc_open (name, flags)
> +#define __open_nocancel(...) \
> + __open (__VA_ARGS__)
> +#define __open64_nocancel(...) \
> + __open64 (__VA_ARGS__)
> #define openat_not_cancel(fd, name, flags, mode) \
> __openat (fd, name, flags, mode)
> #define openat_not_cancel_3(fd, name, flags) \
> diff --git a/sysdeps/mach/hurd/opendir.c b/sysdeps/mach/hurd/opendir.c
> index b3dab24..8db70b2 100644
> --- a/sysdeps/mach/hurd/opendir.c
> +++ b/sysdeps/mach/hurd/opendir.c
> @@ -84,7 +84,7 @@ __opendirat (int dfd, const char *name)
> int fd;
> #if IS_IN (rtld)
> assert (dfd == AT_FDCWD);
> - fd = open_not_cancel_2 (name, flags);
> + fd = __open_nocancel (name, flags);
> #else
> fd = openat_not_cancel_3 (dfd, name, flags);
> #endif
> diff --git a/sysdeps/posix/libc_fatal.c b/sysdeps/posix/libc_fatal.c
> index c918919..fbb1bec 100644
> --- a/sysdeps/posix/libc_fatal.c
> +++ b/sysdeps/posix/libc_fatal.c
> @@ -83,7 +83,7 @@ __libc_message (enum __libc_message_action action, const char *fmt, ...)
> requests errors on standard error. */
> const char *on_2 = __libc_secure_getenv ("LIBC_FATAL_STDERR_");
> if (on_2 == NULL || *on_2 == '\0')
> - fd = open_not_cancel_2 (_PATH_TTY, O_RDWR | O_NOCTTY | O_NDELAY);
> + fd = __open_nocancel (_PATH_TTY, O_RDWR | O_NOCTTY | O_NDELAY);
> }
>
> if (fd == -1)
> diff --git a/sysdeps/posix/opendir.c b/sysdeps/posix/opendir.c
> index 909aa61..3ee27b2 100644
> --- a/sysdeps/posix/opendir.c
> +++ b/sysdeps/posix/opendir.c
> @@ -61,7 +61,7 @@ static void
> tryopen_o_directory (void)
> {
> int serrno = errno;
> - int x = open_not_cancel_2 ("/dev/null", O_RDONLY|O_NDELAY|O_DIRECTORY);
> + int x = __open_nocancel ("/dev/null", O_RDONLY|O_NDELAY|O_DIRECTORY);
>
> if (x >= 0)
> {
> @@ -188,7 +188,7 @@ __opendir (const char *name)
> }
> }
>
> - return opendir_tail (open_not_cancel_2 (name, opendir_oflags));
> + return opendir_tail (__open_nocancel (name, opendir_oflags));
> }
> weak_alias (__opendir, opendir)
>
> diff --git a/sysdeps/posix/spawni.c b/sysdeps/posix/spawni.c
> index 0b5ef08..823db11 100644
> --- a/sysdeps/posix/spawni.c
> +++ b/sysdeps/posix/spawni.c
> @@ -182,7 +182,7 @@ __spawni_child (void *arguments)
> paths (like /dev/watchdog). */
> close_not_cancel (action->action.open_action.fd);
>
> - int new_fd = open_not_cancel (action->action.open_action.path,
> + int new_fd = __open_nocancel (action->action.open_action.path,
> action->action.open_action.oflag
> | O_LARGEFILE,
> action->action.open_action.mode);
> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> index 202ffcc..3c64077 100644
> --- a/sysdeps/unix/sysv/linux/Versions
> +++ b/sysdeps/unix/sysv/linux/Versions
> @@ -169,6 +169,7 @@ libc {
> GLIBC_PRIVATE {
> # functions used in other libraries
> __syscall_rt_sigqueueinfo;
> + __open_nocancel;
> # functions used by nscd
> __netlink_assert_response;
> }
> diff --git a/sysdeps/unix/sysv/linux/fips-private.h b/sysdeps/unix/sysv/linux/fips-private.h
> index c9fe266..3a83a0f 100644
> --- a/sysdeps/unix/sysv/linux/fips-private.h
> +++ b/sysdeps/unix/sysv/linux/fips-private.h
> @@ -42,7 +42,7 @@ fips_enabled_p (void)
>
> if (checked == FIPS_UNTESTED)
> {
> - int fd = open_not_cancel_2 ("/proc/sys/crypto/fips_enabled", O_RDONLY);
> + int fd = __open_nocancel ("/proc/sys/crypto/fips_enabled", O_RDONLY);
>
> if (fd != -1)
> {
> diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c
> index cc108aa..3ea8656 100644
> --- a/sysdeps/unix/sysv/linux/gethostid.c
> +++ b/sysdeps/unix/sysv/linux/gethostid.c
> @@ -47,7 +47,7 @@ sethostid (long int id)
> }
>
> /* Open file for writing. Everybody is allowed to read this file. */
> - fd = open_not_cancel (HOSTIDFILE, O_CREAT|O_WRONLY|O_TRUNC, 0644);
> + fd = __open_nocancel (HOSTIDFILE, O_CREAT|O_WRONLY|O_TRUNC, 0644);
> if (fd < 0)
> return -1;
>
> @@ -77,7 +77,7 @@ gethostid (void)
> int fd;
>
> /* First try to get the ID from a former invocation of sethostid. */
> - fd = open_not_cancel (HOSTIDFILE, O_RDONLY|O_LARGEFILE, 0);
> + fd = __open_nocancel (HOSTIDFILE, O_RDONLY|O_LARGEFILE, 0);
> if (fd >= 0)
> {
> ssize_t n = read_not_cancel (fd, &id, sizeof (id));
> diff --git a/sysdeps/unix/sysv/linux/getloadavg.c b/sysdeps/unix/sysv/linux/getloadavg.c
> index 117f8c2..0bfe41d 100644
> --- a/sysdeps/unix/sysv/linux/getloadavg.c
> +++ b/sysdeps/unix/sysv/linux/getloadavg.c
> @@ -33,7 +33,7 @@ getloadavg (double loadavg[], int nelem)
> {
> int fd;
>
> - fd = open_not_cancel_2 ("/proc/loadavg", O_RDONLY);
> + fd = __open_nocancel ("/proc/loadavg", O_RDONLY);
> if (fd < 0)
> return -1;
> else
> diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c
> index 05ac36b..2519792 100644
> --- a/sysdeps/unix/sysv/linux/getlogin_r.c
> +++ b/sysdeps/unix/sysv/linux/getlogin_r.c
> @@ -34,7 +34,7 @@ int
> attribute_hidden
> __getlogin_r_loginuid (char *name, size_t namesize)
> {
> - int fd = open_not_cancel_2 ("/proc/self/loginuid", O_RDONLY);
> + int fd = __open_nocancel ("/proc/self/loginuid", O_RDONLY);
> if (fd == -1)
> return -1;
>
> diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
> index a0dd6eb..e21a34c 100644
> --- a/sysdeps/unix/sysv/linux/getsysstats.c
> +++ b/sysdeps/unix/sysv/linux/getsysstats.c
> @@ -143,7 +143,7 @@ __get_nprocs (void)
> char *re = buffer_end;
>
> const int flags = O_RDONLY | O_CLOEXEC;
> - int fd = open_not_cancel_2 ("/sys/devices/system/cpu/online", flags);
> + int fd = __open_nocancel ("/sys/devices/system/cpu/online", flags);
> char *l;
> int result = 0;
> if (fd != -1)
> @@ -194,7 +194,7 @@ __get_nprocs (void)
> result = 2;
>
> /* The /proc/stat format is more uniform, use it by default. */
> - fd = open_not_cancel_2 ("/proc/stat", flags);
> + fd = __open_nocancel ("/proc/stat", flags);
> if (fd != -1)
> {
> result = 0;
> @@ -211,7 +211,7 @@ __get_nprocs (void)
> }
> else
> {
> - fd = open_not_cancel_2 ("/proc/cpuinfo", flags);
> + fd = __open_nocancel ("/proc/cpuinfo", flags);
> if (fd != -1)
> {
> GET_NPROCS_PARSER (fd, buffer, cp, re, buffer_end, result);
> diff --git a/sysdeps/unix/sysv/linux/grantpt.c b/sysdeps/unix/sysv/linux/grantpt.c
> index 8cebde3..97c6ba7 100644
> --- a/sysdeps/unix/sysv/linux/grantpt.c
> +++ b/sysdeps/unix/sysv/linux/grantpt.c
> @@ -31,9 +31,9 @@ close_all_fds (void)
>
> __closedir (dir);
>
> - int nullfd = open_not_cancel_2 (_PATH_DEVNULL, O_RDONLY);
> + int nullfd = __open_nocancel (_PATH_DEVNULL, O_RDONLY);
> assert (nullfd == STDIN_FILENO);
> - nullfd = open_not_cancel_2 (_PATH_DEVNULL, O_WRONLY);
> + nullfd = __open_nocancel (_PATH_DEVNULL, O_WRONLY);
> assert (nullfd == STDOUT_FILENO);
> __dup2 (STDOUT_FILENO, STDERR_FILENO);
> }
> diff --git a/sysdeps/unix/sysv/linux/i386/smp.h b/sysdeps/unix/sysv/linux/i386/smp.h
> index 3109ea9..c24f2fd 100644
> --- a/sysdeps/unix/sysv/linux/i386/smp.h
> +++ b/sysdeps/unix/sysv/linux/i386/smp.h
> @@ -41,7 +41,7 @@ is_smp_system (void)
> else
> {
> /* This was not successful. Now try reading the /proc filesystem. */
> - int fd = open_not_cancel_2 ("/proc/sys/kernel/version", O_RDONLY);
> + int fd = __open_nocancel ("/proc/sys/kernel/version", O_RDONLY);
> if (__builtin_expect (fd, 0) == -1
> || read_not_cancel (fd, u.buf, sizeof (u.buf)) <= 0)
> /* This also didn't work. We give up and say it's a UP machine. */
> diff --git a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
> index 2207c88..04e395b 100644
> --- a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
> +++ b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
> @@ -30,7 +30,7 @@ has_cpuclock (void)
> if (__builtin_expect (itc_usable == 0, 0))
> {
> int newval = 1;
> - int fd = open_not_cancel_2 ("/proc/sal/itc_drift", O_RDONLY);
> + int fd = __open_nocancel ("/proc/sal/itc_drift", O_RDONLY);
> if (__builtin_expect (fd != -1, 1))
> {
> char buf[16];
> diff --git a/sysdeps/unix/sysv/linux/libc_fatal.c b/sysdeps/unix/sysv/linux/libc_fatal.c
> index d22bfdc..5b484cf 100644
> --- a/sysdeps/unix/sysv/linux/libc_fatal.c
> +++ b/sysdeps/unix/sysv/linux/libc_fatal.c
> @@ -53,7 +53,7 @@ backtrace_and_maps (int do_abort, bool written, int fd)
> __backtrace_symbols_fd (addrs + 1, n - 1, fd);
>
> writestr (strnsize ("======= Memory map: ========\n"));
> - int fd2 = open_not_cancel_2 ("/proc/self/maps", O_RDONLY);
> + int fd2 = __open_nocancel ("/proc/self/maps", O_RDONLY);
> char buf[1024];
> ssize_t n2;
> while ((n2 = read_not_cancel (fd2, buf, sizeof (buf))) > 0)
> diff --git a/sysdeps/unix/sysv/linux/malloc-sysdep.h b/sysdeps/unix/sysv/linux/malloc-sysdep.h
> index 48cf7c1..cb87b58 100644
> --- a/sysdeps/unix/sysv/linux/malloc-sysdep.h
> +++ b/sysdeps/unix/sysv/linux/malloc-sysdep.h
> @@ -42,8 +42,8 @@ check_may_shrink_heap (void)
>
> if (__builtin_expect (may_shrink_heap == 0, 1))
> {
> - int fd = open_not_cancel_2 ("/proc/sys/vm/overcommit_memory",
> - O_RDONLY | O_CLOEXEC);
> + int fd = __open_nocancel ("/proc/sys/vm/overcommit_memory",
> + O_RDONLY | O_CLOEXEC);
> if (fd >= 0)
> {
> char val;
> diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
> index 43959ba..8d897f0 100644
> --- a/sysdeps/unix/sysv/linux/not-cancel.h
> +++ b/sysdeps/unix/sysv/linux/not-cancel.h
> @@ -20,23 +20,19 @@
> #ifndef NOT_CANCEL_H
> # define NOT_CANCEL_H
>
> +#include <fcntl.h>
> #include <sysdep.h>
> #include <errno.h>
> #include <unistd.h>
> #include <sys/syscall.h>
>
> -/* Uncancelable open. */
> -#ifdef __NR_open
> -# define open_not_cancel(name, flags, mode) \
> - INLINE_SYSCALL (open, 3, name, flags, mode)
> -# define open_not_cancel_2(name, flags) \
> - INLINE_SYSCALL (open, 2, name, flags)
> -#else
> -# define open_not_cancel(name, flags, mode) \
> - INLINE_SYSCALL (openat, 4, AT_FDCWD, name, flags, mode)
> -# define open_not_cancel_2(name, flags) \
> - INLINE_SYSCALL (openat, 3, AT_FDCWD, name, flags)
> -#endif
> +/* Non cancellable open syscall. */
> +__typeof (open) __open_nocancel;
> +libc_hidden_proto (__open_nocancel)
> +
> +/* Non cancellable open syscall (LFS version). */
> +__typeof (open64) __open64_nocancel;
> +libc_hidden_proto (__open64_nocancel)
>
> /* Uncancelable read. */
> #define __read_nocancel(fd, buf, len) \
> diff --git a/sysdeps/unix/sysv/linux/open.c b/sysdeps/unix/sysv/linux/open.c
> index b3912d5..3ef0e53 100644
> --- a/sysdeps/unix/sysv/linux/open.c
> +++ b/sysdeps/unix/sysv/linux/open.c
> @@ -22,6 +22,7 @@
> #include <stdarg.h>
>
> #include <sysdep-cancel.h>
> +#include <not-cancel.h>
>
> #ifndef __OFF_T_MATCHES_OFF64_T
>
> @@ -48,4 +49,24 @@ weak_alias (__libc_open, __open)
> libc_hidden_weak (__open)
> weak_alias (__libc_open, open)
>
> +# if !IS_IN (rtld)
> +int
> +__open_nocancel (const char *file, int oflag, ...)
> +{
> + int mode = 0;
> +
> + if (__OPEN_NEEDS_MODE (oflag))
> + {
> + va_list arg;
> + va_start (arg, oflag);
> + mode = va_arg (arg, int);
> + va_end (arg);
> + }
> +
> + return INLINE_SYSCALL_CALL (openat, AT_FDCWD, file, oflag, mode);
> +}
> +# else
> +strong_alias (__libc_open, __open_nocancel)
> +# endif
> +libc_hidden_def (__open_nocancel)
> #endif
> diff --git a/sysdeps/unix/sysv/linux/open64.c b/sysdeps/unix/sysv/linux/open64.c
> index fcac984..b4702c3 100644
> --- a/sysdeps/unix/sysv/linux/open64.c
> +++ b/sysdeps/unix/sysv/linux/open64.c
> @@ -21,6 +21,13 @@
> #include <stdarg.h>
>
> #include <sysdep-cancel.h>
> +#include <not-cancel.h>
> +
> +#ifdef __OFF_T_MATCHES_OFF64_T
> +# define EXTRA_OPEN_FLAGS 0
> +#else
> +# define EXTRA_OPEN_FLAGS O_LARGEFILE
> +#endif
>
> /* Open FILE with access OFLAG. If O_CREAT or O_TMPFILE is in OFLAG,
> a third argument is the file protection. */
> @@ -37,12 +44,6 @@ __libc_open64 (const char *file, int oflag, ...)
> va_end (arg);
> }
>
> -#ifdef __OFF_T_MATCHES_OFF64_T
> -# define EXTRA_OPEN_FLAGS 0
> -#else
> -# define EXTRA_OPEN_FLAGS O_LARGEFILE
> -#endif
> -
> return SYSCALL_CANCEL (openat, AT_FDCWD, file, oflag | EXTRA_OPEN_FLAGS,
> mode);
> }
> @@ -51,9 +52,34 @@ strong_alias (__libc_open64, __open64)
> libc_hidden_weak (__open64)
> weak_alias (__libc_open64, open64)
>
> +# if !IS_IN (rtld)
> +int
> +__open64_nocancel (const char *file, int oflag, ...)
> +{
> + int mode = 0;
> +
> + if (__OPEN_NEEDS_MODE (oflag))
> + {
> + va_list arg;
> + va_start (arg, oflag);
> + mode = va_arg (arg, int);
> + va_end (arg);
> + }
> +
> + return INLINE_SYSCALL_CALL (openat, AT_FDCWD, file, oflag | EXTRA_OPEN_FLAGS,
> + mode);
> +}
> +#else
> +strong_alias (__libc_open64, __open64_nocancel)
> +#endif
> +libc_hidden_def (__open64_nocancel)
> +
> #ifdef __OFF_T_MATCHES_OFF64_T
> strong_alias (__libc_open64, __libc_open)
> strong_alias (__libc_open64, __open)
> libc_hidden_weak (__open)
> weak_alias (__libc_open64, open)
> +
> +strong_alias (__open64_nocancel, __open_nocancel)
> +libc_hidden_weak (__open_nocancel)
> #endif
> diff --git a/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c b/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c
> index b8d01d8..c99e7de 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c
> +++ b/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c
> @@ -40,7 +40,7 @@ __get_clockfreq (void)
> contains at least one line like:
> timebase : 33333333
> We search for this line and convert the number into an integer. */
> - int fd = open_not_cancel_2 ("/proc/cpuinfo", O_RDONLY);
> + int fd = __open_nocancel ("/proc/cpuinfo", O_RDONLY);
> if (__glibc_likely (fd != -1))
> return result;
>
> diff --git a/sysdeps/unix/sysv/linux/pthread_getname.c b/sysdeps/unix/sysv/linux/pthread_getname.c
> index 9a5343a..caab2cc 100644
> --- a/sysdeps/unix/sysv/linux/pthread_getname.c
> +++ b/sysdeps/unix/sysv/linux/pthread_getname.c
> @@ -45,7 +45,7 @@ pthread_getname_np (pthread_t th, char *buf, size_t len)
> char fname[sizeof (FMT) + 8];
> sprintf (fname, FMT, (unsigned int) pd->tid);
>
> - int fd = open_not_cancel_2 (fname, O_RDONLY);
> + int fd = __open_nocancel (fname, O_RDONLY);
> if (fd == -1)
> return errno;
>
> diff --git a/sysdeps/unix/sysv/linux/pthread_setname.c b/sysdeps/unix/sysv/linux/pthread_setname.c
> index 5769c5b..93f0e9d 100644
> --- a/sysdeps/unix/sysv/linux/pthread_setname.c
> +++ b/sysdeps/unix/sysv/linux/pthread_setname.c
> @@ -46,7 +46,7 @@ pthread_setname_np (pthread_t th, const char *name)
> char fname[sizeof (FMT) + 8];
> sprintf (fname, FMT, (unsigned int) pd->tid);
>
> - int fd = open_not_cancel_2 (fname, O_RDWR);
> + int fd = __open_nocancel (fname, O_RDWR);
> if (fd == -1)
> return errno;
>
> diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c
> index c56f894..4994a07 100644
> --- a/sysdeps/unix/sysv/linux/spawni.c
> +++ b/sysdeps/unix/sysv/linux/spawni.c
> @@ -230,7 +230,7 @@ __spawni_child (void *arguments)
> paths (like /dev/watchdog). */
> close_not_cancel (action->action.open_action.fd);
>
> - int ret = open_not_cancel (action->action.open_action.path,
> + int ret = __open_nocancel (action->action.open_action.path,
> action->action.
> open_action.oflag | O_LARGEFILE,
> action->action.open_action.mode);
> diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c
> index db20977..ab068ab 100644
> --- a/sysdeps/unix/sysv/linux/sysconf.c
> +++ b/sysdeps/unix/sysv/linux/sysconf.c
> @@ -115,7 +115,7 @@ __sysconf (int name)
>
> if (procfname != NULL)
> {
> - int fd = open_not_cancel_2 (procfname, O_RDONLY);
> + int fd = __open_nocancel (procfname, O_RDONLY);
> if (fd != -1)
> {
> /* This is more than enough, the file contains a single integer. */
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 04/14] Consolidate non cancellable openat call
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
` (9 preceding siblings ...)
2017-08-03 13:12 ` [PATCH 01/14] Consolidate non cancellable open call Adhemerval Zanella
@ 2017-08-03 13:12 ` Adhemerval Zanella
2017-08-18 13:55 ` Adhemerval Zanella
2017-08-03 13:12 ` [PATCH 12/14] Fix {INLINE,INTERNAL}_SYSCALL macros for x32 Adhemerval Zanella
` (3 subsequent siblings)
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:12 UTC (permalink / raw)
To: libc-alpha
This patch consolidates all the non cancellable openat{64} calls to use
the __openat{64}_nocancel identifier. For non cancellable targets it will
be just a macro to call the default respective symbol while on Linux
will be a internal one.
Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
* sysdeps/generic/not-cancel.h (openat_not_cancel): Remove macro.
(openat_not_cancel_3): Likewise.
(openat64_not_cancel_3): Likewise).
(openat_not_cancel_3): Likewise).
* sysdeps/unix/sysv/linux/not-cancel.h (openat_not_cancel): Remove
macro.
(openat_not_cancel_3): Likewise.
(openat64_not_cancel): Likewise.
(openat64_not_cancel_3): Likewise.
* sysdeps/unix/sysv/linux/openat.c (__openat_nocancel): New function.
* sysdeps/unix/sysv/linux/openat64.c (__openat64_nocancel): Likewise.
* io/ftw.c (open_dir_stream): Replace openat{64}_not_cancel{_3} with
__open{64}_nocancel.
* sysdeps/mach/hurd/opendir.c (__opendirat): Likewise.
* sysdeps/posix/getcwd.c (__getcwd): Likewise.
* sysdeps/posix/opendir.c (__opendirat): Likewise.
---
ChangeLog | 17 +++++++++++++++++
io/ftw.c | 4 ++--
sysdeps/generic/not-cancel.h | 12 ++++--------
sysdeps/mach/hurd/opendir.c | 2 +-
sysdeps/posix/getcwd.c | 4 ++--
sysdeps/posix/opendir.c | 2 +-
sysdeps/unix/sysv/linux/not-cancel.h | 18 ++++++++----------
sysdeps/unix/sysv/linux/openat.c | 20 ++++++++++++++++++++
sysdeps/unix/sysv/linux/openat64.c | 36 ++++++++++++++++++++++++++++++------
9 files changed, 85 insertions(+), 30 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 0bc21b6..d40900c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,22 @@
2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * sysdeps/generic/not-cancel.h (openat_not_cancel): Remove macro.
+ (openat_not_cancel_3): Likewise.
+ (openat64_not_cancel_3): Likewise).
+ (openat_not_cancel_3): Likewise).
+ * sysdeps/unix/sysv/linux/not-cancel.h (openat_not_cancel): Remove
+ macro.
+ (openat_not_cancel_3): Likewise.
+ (openat64_not_cancel): Likewise.
+ (openat64_not_cancel_3): Likewise.
+ * sysdeps/unix/sysv/linux/openat.c (__openat_nocancel): New function.
+ * sysdeps/unix/sysv/linux/openat64.c (__openat64_nocancel): Likewise.
+ * io/ftw.c (open_dir_stream): Replace openat{64}_not_cancel{_3} with
+ __open{64}_nocancel.
+ * sysdeps/mach/hurd/opendir.c (__opendirat): Likewise.
+ * sysdeps/posix/getcwd.c (__getcwd): Likewise.
+ * sysdeps/posix/opendir.c (__opendirat): Likewise.
+
* sysdeps/generic/not-cancel.h (write_not_cancel): Remove macro.
(__write_nocancel): New macro.
* sysdeps/unix/sysv/linux/not-cancel.h (__write_nocancel):
diff --git a/io/ftw.c b/io/ftw.c
index 140a237..f33fed3 100644
--- a/io/ftw.c
+++ b/io/ftw.c
@@ -337,8 +337,8 @@ open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp)
if (dfdp != NULL && *dfdp != -1)
{
- int fd = openat64_not_cancel_3 (*dfdp, data->dirbuf + data->ftw.base,
- O_RDONLY | O_DIRECTORY | O_NDELAY);
+ int fd = __openat64_nocancel (*dfdp, data->dirbuf + data->ftw.base,
+ O_RDONLY | O_DIRECTORY | O_NDELAY);
dirp->stream = NULL;
if (fd != -1 && (dirp->stream = __fdopendir (fd)) == NULL)
close_not_cancel_no_status (fd);
diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
index e91cb6c..df9aea6 100644
--- a/sysdeps/generic/not-cancel.h
+++ b/sysdeps/generic/not-cancel.h
@@ -22,14 +22,10 @@
__open (__VA_ARGS__)
#define __open64_nocancel(...) \
__open64 (__VA_ARGS__)
-#define openat_not_cancel(fd, name, flags, mode) \
- __openat (fd, name, flags, mode)
-#define openat_not_cancel_3(fd, name, flags) \
- __openat (fd, name, flags, 0)
-#define openat64_not_cancel(fd, name, flags, mode) \
- __openat64 (fd, name, flags, mode)
-#define openat64_not_cancel_3(fd, name, flags) \
- __openat64 (fd, name, flags, 0)
+#define __openat_nocancel(...) \
+ __openat (__VA_ARGS__)
+#define __openat64_nocancel(...) \
+ __openat64 (__VA_ARGS__)
#define close_not_cancel(fd) \
__close (fd)
#define close_not_cancel_no_status(fd) \
diff --git a/sysdeps/mach/hurd/opendir.c b/sysdeps/mach/hurd/opendir.c
index 8db70b2..d3757f0 100644
--- a/sysdeps/mach/hurd/opendir.c
+++ b/sysdeps/mach/hurd/opendir.c
@@ -86,7 +86,7 @@ __opendirat (int dfd, const char *name)
assert (dfd == AT_FDCWD);
fd = __open_nocancel (name, flags);
#else
- fd = openat_not_cancel_3 (dfd, name, flags);
+ fd = __openat_nocancel (dfd, name, flags);
#endif
if (fd < 0)
return NULL;
diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c
index eb1706a..ecae628 100644
--- a/sysdeps/posix/getcwd.c
+++ b/sysdeps/posix/getcwd.c
@@ -175,7 +175,7 @@ extern char *alloca ();
# include <not-cancel.h>
# include <kernel-features.h>
#else
-# define openat64_not_cancel_3(dfd, name, mode) openat64 (dfd, name, mode)
+# define __openat64_nocancel(dfd, name, mode) openat64 (dfd, name, mode)
# define close_not_cancel_no_status(fd) close (fd)
#endif
@@ -281,7 +281,7 @@ __getcwd (char *buf, size_t size)
while (!(thisdev == rootdev && thisino == rootino))
{
if (__have_atfcts >= 0)
- fd = openat64_not_cancel_3 (fd, "..", O_RDONLY | O_CLOEXEC);
+ fd = __openat64_nocancel (fd, "..", O_RDONLY | O_CLOEXEC);
else
fd = -1;
if (fd >= 0)
diff --git a/sysdeps/posix/opendir.c b/sysdeps/posix/opendir.c
index 3ee27b2..51a92e8 100644
--- a/sysdeps/posix/opendir.c
+++ b/sysdeps/posix/opendir.c
@@ -161,7 +161,7 @@ __opendirat (int dfd, const char *name)
}
}
- return opendir_tail (openat_not_cancel_3 (dfd, name, opendir_oflags));
+ return opendir_tail (__openat_nocancel (dfd, name, opendir_oflags));
}
#endif
diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
index 84dc72a..08ad773 100644
--- a/sysdeps/unix/sysv/linux/not-cancel.h
+++ b/sysdeps/unix/sysv/linux/not-cancel.h
@@ -34,6 +34,14 @@ libc_hidden_proto (__open_nocancel)
__typeof (open64) __open64_nocancel;
libc_hidden_proto (__open64_nocancel)
+/* Non cancellable openat syscall. */
+__typeof (openat) __openat_nocancel;
+libc_hidden_proto (__openat_nocancel)
+
+/* Non cacellable openat syscall (LFS version). */
+__typeof (openat64) __openat64_nocancel;
+libc_hidden_proto (__openat64_nocancel)
+
/* Non cancellable read syscall. */
__typeof (__read) __read_nocancel;
libc_hidden_proto (__read_nocancel)
@@ -42,16 +50,6 @@ libc_hidden_proto (__read_nocancel)
__typeof (__write) __write_nocancel;
libc_hidden_proto (__write_nocancel)
-/* Uncancelable openat. */
-#define openat_not_cancel(fd, fname, oflag, mode) \
- INLINE_SYSCALL (openat, 4, fd, fname, oflag, mode)
-#define openat_not_cancel_3(fd, fname, oflag) \
- INLINE_SYSCALL (openat, 3, fd, fname, oflag)
-#define openat64_not_cancel(fd, fname, oflag, mode) \
- INLINE_SYSCALL (openat, 4, fd, fname, oflag | O_LARGEFILE, mode)
-#define openat64_not_cancel_3(fd, fname, oflag) \
- INLINE_SYSCALL (openat, 3, fd, fname, oflag | O_LARGEFILE)
-
/* Uncancelable close. */
#define __close_nocancel(fd) \
INLINE_SYSCALL (close, 1, fd)
diff --git a/sysdeps/unix/sysv/linux/openat.c b/sysdeps/unix/sysv/linux/openat.c
index 1587305..f995775 100644
--- a/sysdeps/unix/sysv/linux/openat.c
+++ b/sysdeps/unix/sysv/linux/openat.c
@@ -19,6 +19,7 @@
#include <stdarg.h>
#include <sysdep-cancel.h>
+#include <not-cancel.h>
#ifndef __OFF_T_MATCHES_OFF64_T
@@ -43,4 +44,23 @@ weak_alias (__libc_openat, __openat)
libc_hidden_weak (__openat)
weak_alias (__libc_openat, openat)
+# if !IS_IN (rtld)
+int
+__openat_nocancel (int fd, const char *file, int oflag, ...)
+{
+ mode_t mode = 0;
+ if (__OPEN_NEEDS_MODE (oflag))
+ {
+ va_list arg;
+ va_start (arg, oflag);
+ mode = va_arg (arg, mode_t);
+ va_end (arg);
+ }
+
+ return SYSCALL_CANCEL (openat, fd, file, oflag, mode);
+}
+# else
+strong_alias (__libc_openat, __openat_nocancel)
+# endif
+libc_hidden_weak (__openat_nocancel)
#endif
diff --git a/sysdeps/unix/sysv/linux/openat64.c b/sysdeps/unix/sysv/linux/openat64.c
index 4942061..816e8f1 100644
--- a/sysdeps/unix/sysv/linux/openat64.c
+++ b/sysdeps/unix/sysv/linux/openat64.c
@@ -19,6 +19,13 @@
#include <stdarg.h>
#include <sysdep-cancel.h>
+#include <not-cancel.h>
+
+#ifdef __OFF_T_MATCHES_OFF64_T
+# define EXTRA_OPEN_FLAGS 0
+#else
+# define EXTRA_OPEN_FLAGS O_LARGEFILE
+#endif
/* Open FILE with access OFLAG. Interpret relative paths relative to
the directory associated with FD. If OFLAG includes O_CREAT or
@@ -35,12 +42,6 @@ __libc_openat64 (int fd, const char *file, int oflag, ...)
va_end (arg);
}
-#ifdef __OFF_T_MATCHES_OFF64_T
-# define EXTRA_OPEN_FLAGS 0
-#else
-# define EXTRA_OPEN_FLAGS O_LARGEFILE
-#endif
-
return SYSCALL_CANCEL (openat, fd, file, oflag | EXTRA_OPEN_FLAGS, mode);
}
@@ -48,8 +49,31 @@ strong_alias (__libc_openat64, __openat64)
libc_hidden_weak (__openat64)
weak_alias (__libc_openat64, openat64)
+#if !IS_IN (rtld)
+int
+__openat64_nocancel (int fd, const char *file, int oflag, ...)
+{
+ mode_t mode = 0;
+ if (__OPEN_NEEDS_MODE (oflag))
+ {
+ va_list arg;
+ va_start (arg, oflag);
+ mode = va_arg (arg, mode_t);
+ va_end (arg);
+ }
+
+ return INLINE_SYSCALL_CALL (openat, fd, file, oflag | EXTRA_OPEN_FLAGS,
+ mode);
+}
+#else
+strong_alias (__libc_openat64, __openat64_nocancel)
+#endif
+libc_hidden_def (__openat64_nocancel)
+
#ifdef __OFF_T_MATCHES_OFF64_T
strong_alias (__libc_openat64, __openat)
libc_hidden_weak (__openat)
weak_alias (__libc_openat64, openat)
+
+strong_alias (__openat64_nocancel, __openat_nocancel)
#endif
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 04/14] Consolidate non cancellable openat call
2017-08-03 13:12 ` [PATCH 04/14] Consolidate non cancellable openat call Adhemerval Zanella
@ 2017-08-18 13:55 ` Adhemerval Zanella
2017-08-18 13:58 ` Adhemerval Zanella
0 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-18 13:55 UTC (permalink / raw)
To: libc-alpha
Since this is a refactor, if no one opposes I will commit it shortly.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> This patch consolidates all the non cancellable openat{64} calls to use
> the __openat{64}_nocancel identifier. For non cancellable targets it will
> be just a macro to call the default respective symbol while on Linux
> will be a internal one.
>
> Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
>
> * sysdeps/generic/not-cancel.h (openat_not_cancel): Remove macro.
> (openat_not_cancel_3): Likewise.
> (openat64_not_cancel_3): Likewise).
> (openat_not_cancel_3): Likewise).
> * sysdeps/unix/sysv/linux/not-cancel.h (openat_not_cancel): Remove
> macro.
> (openat_not_cancel_3): Likewise.
> (openat64_not_cancel): Likewise.
> (openat64_not_cancel_3): Likewise.
> * sysdeps/unix/sysv/linux/openat.c (__openat_nocancel): New function.
> * sysdeps/unix/sysv/linux/openat64.c (__openat64_nocancel): Likewise.
> * io/ftw.c (open_dir_stream): Replace openat{64}_not_cancel{_3} with
> __open{64}_nocancel.
> * sysdeps/mach/hurd/opendir.c (__opendirat): Likewise.
> * sysdeps/posix/getcwd.c (__getcwd): Likewise.
> * sysdeps/posix/opendir.c (__opendirat): Likewise.
> ---
> ChangeLog | 17 +++++++++++++++++
> io/ftw.c | 4 ++--
> sysdeps/generic/not-cancel.h | 12 ++++--------
> sysdeps/mach/hurd/opendir.c | 2 +-
> sysdeps/posix/getcwd.c | 4 ++--
> sysdeps/posix/opendir.c | 2 +-
> sysdeps/unix/sysv/linux/not-cancel.h | 18 ++++++++----------
> sysdeps/unix/sysv/linux/openat.c | 20 ++++++++++++++++++++
> sysdeps/unix/sysv/linux/openat64.c | 36 ++++++++++++++++++++++++++++++------
> 9 files changed, 85 insertions(+), 30 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 0bc21b6..d40900c 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,22 @@
> 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> + * sysdeps/generic/not-cancel.h (openat_not_cancel): Remove macro.
> + (openat_not_cancel_3): Likewise.
> + (openat64_not_cancel_3): Likewise).
> + (openat_not_cancel_3): Likewise).
> + * sysdeps/unix/sysv/linux/not-cancel.h (openat_not_cancel): Remove
> + macro.
> + (openat_not_cancel_3): Likewise.
> + (openat64_not_cancel): Likewise.
> + (openat64_not_cancel_3): Likewise.
> + * sysdeps/unix/sysv/linux/openat.c (__openat_nocancel): New function.
> + * sysdeps/unix/sysv/linux/openat64.c (__openat64_nocancel): Likewise.
> + * io/ftw.c (open_dir_stream): Replace openat{64}_not_cancel{_3} with
> + __open{64}_nocancel.
> + * sysdeps/mach/hurd/opendir.c (__opendirat): Likewise.
> + * sysdeps/posix/getcwd.c (__getcwd): Likewise.
> + * sysdeps/posix/opendir.c (__opendirat): Likewise.
> +
> * sysdeps/generic/not-cancel.h (write_not_cancel): Remove macro.
> (__write_nocancel): New macro.
> * sysdeps/unix/sysv/linux/not-cancel.h (__write_nocancel):
> diff --git a/io/ftw.c b/io/ftw.c
> index 140a237..f33fed3 100644
> --- a/io/ftw.c
> +++ b/io/ftw.c
> @@ -337,8 +337,8 @@ open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp)
>
> if (dfdp != NULL && *dfdp != -1)
> {
> - int fd = openat64_not_cancel_3 (*dfdp, data->dirbuf + data->ftw.base,
> - O_RDONLY | O_DIRECTORY | O_NDELAY);
> + int fd = __openat64_nocancel (*dfdp, data->dirbuf + data->ftw.base,
> + O_RDONLY | O_DIRECTORY | O_NDELAY);
> dirp->stream = NULL;
> if (fd != -1 && (dirp->stream = __fdopendir (fd)) == NULL)
> close_not_cancel_no_status (fd);
> diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
> index e91cb6c..df9aea6 100644
> --- a/sysdeps/generic/not-cancel.h
> +++ b/sysdeps/generic/not-cancel.h
> @@ -22,14 +22,10 @@
> __open (__VA_ARGS__)
> #define __open64_nocancel(...) \
> __open64 (__VA_ARGS__)
> -#define openat_not_cancel(fd, name, flags, mode) \
> - __openat (fd, name, flags, mode)
> -#define openat_not_cancel_3(fd, name, flags) \
> - __openat (fd, name, flags, 0)
> -#define openat64_not_cancel(fd, name, flags, mode) \
> - __openat64 (fd, name, flags, mode)
> -#define openat64_not_cancel_3(fd, name, flags) \
> - __openat64 (fd, name, flags, 0)
> +#define __openat_nocancel(...) \
> + __openat (__VA_ARGS__)
> +#define __openat64_nocancel(...) \
> + __openat64 (__VA_ARGS__)
> #define close_not_cancel(fd) \
> __close (fd)
> #define close_not_cancel_no_status(fd) \
> diff --git a/sysdeps/mach/hurd/opendir.c b/sysdeps/mach/hurd/opendir.c
> index 8db70b2..d3757f0 100644
> --- a/sysdeps/mach/hurd/opendir.c
> +++ b/sysdeps/mach/hurd/opendir.c
> @@ -86,7 +86,7 @@ __opendirat (int dfd, const char *name)
> assert (dfd == AT_FDCWD);
> fd = __open_nocancel (name, flags);
> #else
> - fd = openat_not_cancel_3 (dfd, name, flags);
> + fd = __openat_nocancel (dfd, name, flags);
> #endif
> if (fd < 0)
> return NULL;
> diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c
> index eb1706a..ecae628 100644
> --- a/sysdeps/posix/getcwd.c
> +++ b/sysdeps/posix/getcwd.c
> @@ -175,7 +175,7 @@ extern char *alloca ();
> # include <not-cancel.h>
> # include <kernel-features.h>
> #else
> -# define openat64_not_cancel_3(dfd, name, mode) openat64 (dfd, name, mode)
> +# define __openat64_nocancel(dfd, name, mode) openat64 (dfd, name, mode)
> # define close_not_cancel_no_status(fd) close (fd)
> #endif
>
> @@ -281,7 +281,7 @@ __getcwd (char *buf, size_t size)
> while (!(thisdev == rootdev && thisino == rootino))
> {
> if (__have_atfcts >= 0)
> - fd = openat64_not_cancel_3 (fd, "..", O_RDONLY | O_CLOEXEC);
> + fd = __openat64_nocancel (fd, "..", O_RDONLY | O_CLOEXEC);
> else
> fd = -1;
> if (fd >= 0)
> diff --git a/sysdeps/posix/opendir.c b/sysdeps/posix/opendir.c
> index 3ee27b2..51a92e8 100644
> --- a/sysdeps/posix/opendir.c
> +++ b/sysdeps/posix/opendir.c
> @@ -161,7 +161,7 @@ __opendirat (int dfd, const char *name)
> }
> }
>
> - return opendir_tail (openat_not_cancel_3 (dfd, name, opendir_oflags));
> + return opendir_tail (__openat_nocancel (dfd, name, opendir_oflags));
> }
> #endif
>
> diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
> index 84dc72a..08ad773 100644
> --- a/sysdeps/unix/sysv/linux/not-cancel.h
> +++ b/sysdeps/unix/sysv/linux/not-cancel.h
> @@ -34,6 +34,14 @@ libc_hidden_proto (__open_nocancel)
> __typeof (open64) __open64_nocancel;
> libc_hidden_proto (__open64_nocancel)
>
> +/* Non cancellable openat syscall. */
> +__typeof (openat) __openat_nocancel;
> +libc_hidden_proto (__openat_nocancel)
> +
> +/* Non cacellable openat syscall (LFS version). */
> +__typeof (openat64) __openat64_nocancel;
> +libc_hidden_proto (__openat64_nocancel)
> +
> /* Non cancellable read syscall. */
> __typeof (__read) __read_nocancel;
> libc_hidden_proto (__read_nocancel)
> @@ -42,16 +50,6 @@ libc_hidden_proto (__read_nocancel)
> __typeof (__write) __write_nocancel;
> libc_hidden_proto (__write_nocancel)
>
> -/* Uncancelable openat. */
> -#define openat_not_cancel(fd, fname, oflag, mode) \
> - INLINE_SYSCALL (openat, 4, fd, fname, oflag, mode)
> -#define openat_not_cancel_3(fd, fname, oflag) \
> - INLINE_SYSCALL (openat, 3, fd, fname, oflag)
> -#define openat64_not_cancel(fd, fname, oflag, mode) \
> - INLINE_SYSCALL (openat, 4, fd, fname, oflag | O_LARGEFILE, mode)
> -#define openat64_not_cancel_3(fd, fname, oflag) \
> - INLINE_SYSCALL (openat, 3, fd, fname, oflag | O_LARGEFILE)
> -
> /* Uncancelable close. */
> #define __close_nocancel(fd) \
> INLINE_SYSCALL (close, 1, fd)
> diff --git a/sysdeps/unix/sysv/linux/openat.c b/sysdeps/unix/sysv/linux/openat.c
> index 1587305..f995775 100644
> --- a/sysdeps/unix/sysv/linux/openat.c
> +++ b/sysdeps/unix/sysv/linux/openat.c
> @@ -19,6 +19,7 @@
> #include <stdarg.h>
>
> #include <sysdep-cancel.h>
> +#include <not-cancel.h>
>
> #ifndef __OFF_T_MATCHES_OFF64_T
>
> @@ -43,4 +44,23 @@ weak_alias (__libc_openat, __openat)
> libc_hidden_weak (__openat)
> weak_alias (__libc_openat, openat)
>
> +# if !IS_IN (rtld)
> +int
> +__openat_nocancel (int fd, const char *file, int oflag, ...)
> +{
> + mode_t mode = 0;
> + if (__OPEN_NEEDS_MODE (oflag))
> + {
> + va_list arg;
> + va_start (arg, oflag);
> + mode = va_arg (arg, mode_t);
> + va_end (arg);
> + }
> +
> + return SYSCALL_CANCEL (openat, fd, file, oflag, mode);
> +}
> +# else
> +strong_alias (__libc_openat, __openat_nocancel)
> +# endif
> +libc_hidden_weak (__openat_nocancel)
> #endif
> diff --git a/sysdeps/unix/sysv/linux/openat64.c b/sysdeps/unix/sysv/linux/openat64.c
> index 4942061..816e8f1 100644
> --- a/sysdeps/unix/sysv/linux/openat64.c
> +++ b/sysdeps/unix/sysv/linux/openat64.c
> @@ -19,6 +19,13 @@
> #include <stdarg.h>
>
> #include <sysdep-cancel.h>
> +#include <not-cancel.h>
> +
> +#ifdef __OFF_T_MATCHES_OFF64_T
> +# define EXTRA_OPEN_FLAGS 0
> +#else
> +# define EXTRA_OPEN_FLAGS O_LARGEFILE
> +#endif
>
> /* Open FILE with access OFLAG. Interpret relative paths relative to
> the directory associated with FD. If OFLAG includes O_CREAT or
> @@ -35,12 +42,6 @@ __libc_openat64 (int fd, const char *file, int oflag, ...)
> va_end (arg);
> }
>
> -#ifdef __OFF_T_MATCHES_OFF64_T
> -# define EXTRA_OPEN_FLAGS 0
> -#else
> -# define EXTRA_OPEN_FLAGS O_LARGEFILE
> -#endif
> -
> return SYSCALL_CANCEL (openat, fd, file, oflag | EXTRA_OPEN_FLAGS, mode);
> }
>
> @@ -48,8 +49,31 @@ strong_alias (__libc_openat64, __openat64)
> libc_hidden_weak (__openat64)
> weak_alias (__libc_openat64, openat64)
>
> +#if !IS_IN (rtld)
> +int
> +__openat64_nocancel (int fd, const char *file, int oflag, ...)
> +{
> + mode_t mode = 0;
> + if (__OPEN_NEEDS_MODE (oflag))
> + {
> + va_list arg;
> + va_start (arg, oflag);
> + mode = va_arg (arg, mode_t);
> + va_end (arg);
> + }
> +
> + return INLINE_SYSCALL_CALL (openat, fd, file, oflag | EXTRA_OPEN_FLAGS,
> + mode);
> +}
> +#else
> +strong_alias (__libc_openat64, __openat64_nocancel)
> +#endif
> +libc_hidden_def (__openat64_nocancel)
> +
> #ifdef __OFF_T_MATCHES_OFF64_T
> strong_alias (__libc_openat64, __openat)
> libc_hidden_weak (__openat)
> weak_alias (__libc_openat64, openat)
> +
> +strong_alias (__openat64_nocancel, __openat_nocancel)
> #endif
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 04/14] Consolidate non cancellable openat call
2017-08-18 13:55 ` Adhemerval Zanella
@ 2017-08-18 13:58 ` Adhemerval Zanella
0 siblings, 0 replies; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-18 13:58 UTC (permalink / raw)
To: libc-alpha
On 18/08/2017 10:55, Adhemerval Zanella wrote:
> Since this is a refactor, if no one opposes I will commit it shortly.
>> diff --git a/sysdeps/unix/sysv/linux/openat.c b/sysdeps/unix/sysv/linux/openat.c
>> index 1587305..f995775 100644
>> --- a/sysdeps/unix/sysv/linux/openat.c
>> +++ b/sysdeps/unix/sysv/linux/openat.c
>> @@ -19,6 +19,7 @@
>> #include <stdarg.h>
>>
>> #include <sysdep-cancel.h>
>> +#include <not-cancel.h>
>>
>> #ifndef __OFF_T_MATCHES_OFF64_T
>>
>> @@ -43,4 +44,23 @@ weak_alias (__libc_openat, __openat)
>> libc_hidden_weak (__openat)
>> weak_alias (__libc_openat, openat)
>>
>> +# if !IS_IN (rtld)
>> +int
>> +__openat_nocancel (int fd, const char *file, int oflag, ...)
>> +{
>> + mode_t mode = 0;
>> + if (__OPEN_NEEDS_MODE (oflag))
>> + {
>> + va_list arg;
>> + va_start (arg, oflag);
>> + mode = va_arg (arg, mode_t);
>> + va_end (arg);
>> + }
>> +
>> + return SYSCALL_CANCEL (openat, fd, file, oflag, mode);
And this is blatantly wrong, I will fix it.
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 12/14] Fix {INLINE,INTERNAL}_SYSCALL macros for x32
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
` (10 preceding siblings ...)
2017-08-03 13:12 ` [PATCH 04/14] Consolidate non cancellable openat call Adhemerval Zanella
@ 2017-08-03 13:12 ` Adhemerval Zanella
2017-08-22 18:25 ` Adhemerval Zanella
2017-08-03 13:12 ` [PATCH 13/14] Remove p{read,write}{v} and fallocate from x86 auto-generation list Adhemerval Zanella
` (2 subsequent siblings)
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:12 UTC (permalink / raw)
To: libc-alpha; +Cc: Adhemerval Zanella
From: Adhemerval Zanella <adhemerval.zanella@linaro.com>
The problem for x32 is the {INTERNAL,INLINE}_SYSCALL C macros explicit
cast the arguments to 'long int', thus passing as 32 bits arguments
that should be passed to 64 bits.
Previous x32 implementation uses the auto-generated syscalls from
assembly macros (syscalls.list), so the {INTERNAL,INLINE}_SYSCALL
macros are never used with 64 bit argument in x32 (which are
internally broken for this ILP).
To fix it I used a strategy similar to MIPS64n32 (although both
ABI differs for some syscalls on how top pass 64-bits arguments)
where argument types for kernel call are defined using GCC extension
'typeof' with a arithmetic operation. This allows 64-bits arguments
to be defined while 32-bits argument will still passed as 32-bits.
I also cleanup the {INLINE,INTERNAL}_SYSCALL definition by defining
'inline_syscallX' instead of constructing the argument passing using
macros (it adds some readability) and removed the ununsed
INTERNAL_SYSCALL_NCS_TYPES define (since the patch idea is exactly to
avoid requiric explicit types passing).
Tested on x86_64 and x32.
* sysdeps/unix/sysv/linux/x86_64/sysdep.h
(INTERNAL_SYSCALL_NCS_TYPES): Remove define.
(LOAD_ARGS_0): Likewise.
(LOAD_ARGS_1): Likewise.
(LOAD_ARGS_2): Likewise.
(LOAD_ARGS_3): Likewise.
(LOAD_ARGS_4): Likewise.
(LOAD_ARGS_5): Likewise.
(LOAD_ARGS_6): Likewise.
(LOAD_REGS_0): Likewise.
(LOAD_REGS_1): Likewise.
(LOAD_REGS_2): Likewise.
(LOAD_REGS_3): Likewise.
(LOAD_REGS_4): Likewise.
(LOAD_REGS_5): Likewise.
(LOAD_REGS_6): Likewise.
(ASM_ARGS_0): Likewise.
(ASM_ARGS_1): Likewise.
(ASM_ARGS_2): Likewise.
(ASM_ARGS_3): Likewise.
(ASM_ARGS_4): Likewise.
(ASM_ARGS_5): Likewise.
(ASM_ARGS_6): Likewise.
(LOAD_ARGS_TYPES_1): Likewise.
(LOAD_ARGS_TYPES_2): Likewise.
(LOAD_ARGS_TYPES_3): Likewise.
(LOAD_ARGS_TYPES_4): Likewise.
(LOAD_ARGS_TYPES_5): Likewise.
(LOAD_ARGS_TYPES_6): Likewise.
(LOAD_REGS_TYPES_1): Likewise.
(LOAD_REGS_TYPES_2): Likewise.
(LOAD_REGS_TYPES_3): Likewise.
(LOAD_REGS_TYPES_4): Likewise.
(LOAD_REGS_TYPES_5): Likewise.
(LOAD_REGS_TYPES_6): Likewise.
(TYPEFY): New define.
(ARGIFY): Likewise.
(internal_syscall0): Likewise.
(internal_syscall1): Likewise.
(internal_syscall2): Likewise.
(internal_syscall3): Likewise.
(internal_syscall4): Likewise.
(internal_syscall5): Likewise.
(internal_syscall6): Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/times.c
(INTERNAL_SYSCALL_NCS): Remove define.
(internal_syscall1): Add define.
---
ChangeLog | 48 ++++++
sysdeps/unix/sysv/linux/x86_64/sysdep.h | 251 ++++++++++++++++-------------
sysdeps/unix/sysv/linux/x86_64/x32/times.c | 24 +--
3 files changed, 203 insertions(+), 120 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 9ed9789..a5f917f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,53 @@
2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * sysdeps/unix/sysv/linux/x86_64/sysdep.h
+ (INTERNAL_SYSCALL_NCS_TYPES): Remove define.
+ (LOAD_ARGS_0): Likewise.
+ (LOAD_ARGS_1): Likewise.
+ (LOAD_ARGS_2): Likewise.
+ (LOAD_ARGS_3): Likewise.
+ (LOAD_ARGS_4): Likewise.
+ (LOAD_ARGS_5): Likewise.
+ (LOAD_ARGS_6): Likewise.
+ (LOAD_REGS_0): Likewise.
+ (LOAD_REGS_1): Likewise.
+ (LOAD_REGS_2): Likewise.
+ (LOAD_REGS_3): Likewise.
+ (LOAD_REGS_4): Likewise.
+ (LOAD_REGS_5): Likewise.
+ (LOAD_REGS_6): Likewise.
+ (ASM_ARGS_0): Likewise.
+ (ASM_ARGS_1): Likewise.
+ (ASM_ARGS_2): Likewise.
+ (ASM_ARGS_3): Likewise.
+ (ASM_ARGS_4): Likewise.
+ (ASM_ARGS_5): Likewise.
+ (ASM_ARGS_6): Likewise.
+ (LOAD_ARGS_TYPES_1): Likewise.
+ (LOAD_ARGS_TYPES_2): Likewise.
+ (LOAD_ARGS_TYPES_3): Likewise.
+ (LOAD_ARGS_TYPES_4): Likewise.
+ (LOAD_ARGS_TYPES_5): Likewise.
+ (LOAD_ARGS_TYPES_6): Likewise.
+ (LOAD_REGS_TYPES_1): Likewise.
+ (LOAD_REGS_TYPES_2): Likewise.
+ (LOAD_REGS_TYPES_3): Likewise.
+ (LOAD_REGS_TYPES_4): Likewise.
+ (LOAD_REGS_TYPES_5): Likewise.
+ (LOAD_REGS_TYPES_6): Likewise.
+ (TYPEFY): New define.
+ (ARGIFY): Likewise.
+ (internal_syscall0): Likewise.
+ (internal_syscall1): Likewise.
+ (internal_syscall2): Likewise.
+ (internal_syscall3): Likewise.
+ (internal_syscall4): Likewise.
+ (internal_syscall5): Likewise.
+ (internal_syscall6): Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/x32/times.c
+ (INTERNAL_SYSCALL_NCS): Remove define.
+ (internal_syscall1): Add define.
+
* sysdeps/generic/not-cancel.h (sigsuspend_not_cancel): Remove
macro.
* sysdeps/unix/sysv/linux/not-cancel.h (sigsuspend_not_cancel):
diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
index 880e496..f299bf2 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
@@ -221,33 +221,148 @@
/* Registers clobbered by syscall. */
# define REGISTERS_CLOBBERED_BY_SYSCALL "cc", "r11", "cx"
-# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
- ({ \
- unsigned long int resultvar; \
- LOAD_ARGS_##nr (args) \
- LOAD_REGS_##nr \
- asm volatile ( \
- "syscall\n\t" \
- : "=a" (resultvar) \
- : "0" (name) ASM_ARGS_##nr : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
- (long int) resultvar; })
-# undef INTERNAL_SYSCALL
-# define INTERNAL_SYSCALL(name, err, nr, args...) \
- INTERNAL_SYSCALL_NCS (__NR_##name, err, nr, ##args)
-
-# define INTERNAL_SYSCALL_NCS_TYPES(name, err, nr, args...) \
- ({ \
- unsigned long int resultvar; \
- LOAD_ARGS_TYPES_##nr (args) \
- LOAD_REGS_TYPES_##nr (args) \
- asm volatile ( \
- "syscall\n\t" \
- : "=a" (resultvar) \
- : "0" (name) ASM_ARGS_##nr : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
- (long int) resultvar; })
-# undef INTERNAL_SYSCALL_TYPES
-# define INTERNAL_SYSCALL_TYPES(name, err, nr, args...) \
- INTERNAL_SYSCALL_NCS_TYPES (__NR_##name, err, nr, ##args)
+/* Create a variable 'name' based on type 'X' to avoid explicit types.
+ This is mainly used set use 64-bits arguments in x32. */
+#define TYPEFY(X, name) __typeof__ ((X) - (X)) name
+/* Explicit cast the argument to avoid integer from pointer warning on
+ x32. */
+#define ARGIFY(X) ((__typeof__ ((X) - (X))) (X))
+
+#undef INTERNAL_SYSCALL
+#define INTERNAL_SYSCALL(name, err, nr, args...) \
+ internal_syscall##nr (SYS_ify (name), err, args)
+
+#undef INTERNAL_SYSCALL_NCS
+#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \
+ internal_syscall##nr (number, err, args)
+
+#undef internal_syscall0
+#define internal_syscall0(number, err, dummy...) \
+({ \
+ unsigned long int resultvar; \
+ asm volatile ( \
+ "syscall\n\t" \
+ : "=a" (resultvar) \
+ : "0" (number) \
+ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
+ (long int) resultvar; \
+})
+
+#undef internal_syscall1
+#define internal_syscall1(number, err, arg1) \
+({ \
+ unsigned long int resultvar; \
+ TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
+ register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
+ asm volatile ( \
+ "syscall\n\t" \
+ : "=a" (resultvar) \
+ : "0" (number), "r" (_a1) \
+ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
+ (long int) resultvar; \
+})
+
+#undef internal_syscall2
+#define internal_syscall2(number, err, arg1, arg2) \
+({ \
+ unsigned long int resultvar; \
+ TYPEFY (arg2, __arg2) = ARGIFY (arg2); \
+ TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
+ register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
+ register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
+ asm volatile ( \
+ "syscall\n\t" \
+ : "=a" (resultvar) \
+ : "0" (number), "r" (_a1), "r" (_a2) \
+ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
+ (long int) resultvar; \
+})
+
+#undef internal_syscall3
+#define internal_syscall3(number, err, arg1, arg2, arg3) \
+({ \
+ unsigned long int resultvar; \
+ TYPEFY (arg3, __arg3) = ARGIFY (arg3); \
+ TYPEFY (arg2, __arg2) = ARGIFY (arg2); \
+ TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
+ register TYPEFY (arg3, _a3) asm ("rdx") = __arg3; \
+ register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
+ register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
+ asm volatile ( \
+ "syscall\n\t" \
+ : "=a" (resultvar) \
+ : "0" (number), "r" (_a1), "r" (_a2), "r" (_a3) \
+ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
+ (long int) resultvar; \
+})
+
+#undef internal_syscall4
+#define internal_syscall4(number, err, arg1, arg2, arg3, arg4) \
+({ \
+ unsigned long int resultvar; \
+ TYPEFY (arg4, __arg4) = ARGIFY (arg4); \
+ TYPEFY (arg3, __arg3) = ARGIFY (arg3); \
+ TYPEFY (arg2, __arg2) = ARGIFY (arg2); \
+ TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
+ register TYPEFY (arg4, _a4) asm ("r10") = __arg4; \
+ register TYPEFY (arg3, _a3) asm ("rdx") = __arg3; \
+ register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
+ register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
+ asm volatile ( \
+ "syscall\n\t" \
+ : "=a" (resultvar) \
+ : "0" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4) \
+ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
+ (long int) resultvar; \
+})
+
+#undef internal_syscall5
+#define internal_syscall5(number, err, arg1, arg2, arg3, arg4, arg5) \
+({ \
+ unsigned long int resultvar; \
+ TYPEFY (arg5, __arg5) = ARGIFY (arg5); \
+ TYPEFY (arg4, __arg4) = ARGIFY (arg4); \
+ TYPEFY (arg3, __arg3) = ARGIFY (arg3); \
+ TYPEFY (arg2, __arg2) = ARGIFY (arg2); \
+ TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
+ register TYPEFY (arg5, _a5) asm ("r8") = __arg5; \
+ register TYPEFY (arg4, _a4) asm ("r10") = __arg4; \
+ register TYPEFY (arg3, _a3) asm ("rdx") = __arg3; \
+ register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
+ register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
+ asm volatile ( \
+ "syscall\n\t" \
+ : "=a" (resultvar) \
+ : "0" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4), \
+ "r" (_a5) \
+ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
+ (long int) resultvar; \
+})
+
+#undef internal_syscall6
+#define internal_syscall6(number, err, arg1, arg2, arg3, arg4, arg5, arg6) \
+({ \
+ unsigned long int resultvar; \
+ TYPEFY (arg6, __arg6) = ARGIFY (arg6); \
+ TYPEFY (arg5, __arg5) = ARGIFY (arg5); \
+ TYPEFY (arg4, __arg4) = ARGIFY (arg4); \
+ TYPEFY (arg3, __arg3) = ARGIFY (arg3); \
+ TYPEFY (arg2, __arg2) = ARGIFY (arg2); \
+ TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
+ register TYPEFY (arg6, _a6) asm ("r9") = __arg6; \
+ register TYPEFY (arg5, _a5) asm ("r8") = __arg5; \
+ register TYPEFY (arg4, _a4) asm ("r10") = __arg4; \
+ register TYPEFY (arg3, _a3) asm ("rdx") = __arg3; \
+ register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
+ register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
+ asm volatile ( \
+ "syscall\n\t" \
+ : "=a" (resultvar) \
+ : "0" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4), \
+ "r" (_a5), "r" (_a6) \
+ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
+ (long int) resultvar; \
+})
# undef INTERNAL_SYSCALL_ERROR_P
# define INTERNAL_SYSCALL_ERROR_P(val, err) \
@@ -261,88 +376,6 @@
# define HAVE_GETTIMEOFDAY_VSYSCALL 1
# define HAVE_GETCPU_VSYSCALL 1
-# define LOAD_ARGS_0()
-# define LOAD_REGS_0
-# define ASM_ARGS_0
-
-# define LOAD_ARGS_TYPES_1(t1, a1) \
- t1 __arg1 = (t1) (a1); \
- LOAD_ARGS_0 ()
-# define LOAD_REGS_TYPES_1(t1, a1) \
- register t1 _a1 asm ("rdi") = __arg1; \
- LOAD_REGS_0
-# define ASM_ARGS_1 ASM_ARGS_0, "r" (_a1)
-# define LOAD_ARGS_1(a1) \
- LOAD_ARGS_TYPES_1 (long int, a1)
-# define LOAD_REGS_1 \
- LOAD_REGS_TYPES_1 (long int, a1)
-
-# define LOAD_ARGS_TYPES_2(t1, a1, t2, a2) \
- t2 __arg2 = (t2) (a2); \
- LOAD_ARGS_TYPES_1 (t1, a1)
-# define LOAD_REGS_TYPES_2(t1, a1, t2, a2) \
- register t2 _a2 asm ("rsi") = __arg2; \
- LOAD_REGS_TYPES_1(t1, a1)
-# define ASM_ARGS_2 ASM_ARGS_1, "r" (_a2)
-# define LOAD_ARGS_2(a1, a2) \
- LOAD_ARGS_TYPES_2 (long int, a1, long int, a2)
-# define LOAD_REGS_2 \
- LOAD_REGS_TYPES_2 (long int, a1, long int, a2)
-
-# define LOAD_ARGS_TYPES_3(t1, a1, t2, a2, t3, a3) \
- t3 __arg3 = (t3) (a3); \
- LOAD_ARGS_TYPES_2 (t1, a1, t2, a2)
-# define LOAD_REGS_TYPES_3(t1, a1, t2, a2, t3, a3) \
- register t3 _a3 asm ("rdx") = __arg3; \
- LOAD_REGS_TYPES_2(t1, a1, t2, a2)
-# define ASM_ARGS_3 ASM_ARGS_2, "r" (_a3)
-# define LOAD_ARGS_3(a1, a2, a3) \
- LOAD_ARGS_TYPES_3 (long int, a1, long int, a2, long int, a3)
-# define LOAD_REGS_3 \
- LOAD_REGS_TYPES_3 (long int, a1, long int, a2, long int, a3)
-
-# define LOAD_ARGS_TYPES_4(t1, a1, t2, a2, t3, a3, t4, a4) \
- t4 __arg4 = (t4) (a4); \
- LOAD_ARGS_TYPES_3 (t1, a1, t2, a2, t3, a3)
-# define LOAD_REGS_TYPES_4(t1, a1, t2, a2, t3, a3, t4, a4) \
- register t4 _a4 asm ("r10") = __arg4; \
- LOAD_REGS_TYPES_3(t1, a2, t2, a2, t3, a3)
-# define ASM_ARGS_4 ASM_ARGS_3, "r" (_a4)
-# define LOAD_ARGS_4(a1, a2, a3, a4) \
- LOAD_ARGS_TYPES_4 (long int, a1, long int, a2, long int, a3, \
- long int, a4)
-# define LOAD_REGS_4 \
- LOAD_REGS_TYPES_4 (long int, a1, long int, a2, long int, a3, \
- long int, a4)
-
-# define LOAD_ARGS_TYPES_5(t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) \
- t5 __arg5 = (t5) (a5); \
- LOAD_ARGS_TYPES_4 (t1, a1, t2, a2, t3, a3, t4, a4)
-# define LOAD_REGS_TYPES_5(t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) \
- register t5 _a5 asm ("r8") = __arg5; \
- LOAD_REGS_TYPES_4 (t1, a1, t2, a2, t3, a3, t4, a4)
-# define ASM_ARGS_5 ASM_ARGS_4, "r" (_a5)
-# define LOAD_ARGS_5(a1, a2, a3, a4, a5) \
- LOAD_ARGS_TYPES_5 (long int, a1, long int, a2, long int, a3, \
- long int, a4, long int, a5)
-# define LOAD_REGS_5 \
- LOAD_REGS_TYPES_5 (long int, a1, long int, a2, long int, a3, \
- long int, a4, long int, a5)
-
-# define LOAD_ARGS_TYPES_6(t1, a1, t2, a2, t3, a3, t4, a4, t5, a5, t6, a6) \
- t6 __arg6 = (t6) (a6); \
- LOAD_ARGS_TYPES_5 (t1, a1, t2, a2, t3, a3, t4, a4, t5, a5)
-# define LOAD_REGS_TYPES_6(t1, a1, t2, a2, t3, a3, t4, a4, t5, a5, t6, a6) \
- register t6 _a6 asm ("r9") = __arg6; \
- LOAD_REGS_TYPES_5 (t1, a1, t2, a2, t3, a3, t4, a4, t5, a5)
-# define ASM_ARGS_6 ASM_ARGS_5, "r" (_a6)
-# define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \
- LOAD_ARGS_TYPES_6 (long int, a1, long int, a2, long int, a3, \
- long int, a4, long int, a5, long int, a6)
-# define LOAD_REGS_6 \
- LOAD_REGS_TYPES_6 (long int, a1, long int, a2, long int, a3, \
- long int, a4, long int, a5, long int, a6)
-
#endif /* __ASSEMBLER__ */
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/times.c b/sysdeps/unix/sysv/linux/x86_64/x32/times.c
index d56106e..8763047 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/times.c
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/times.c
@@ -19,17 +19,19 @@
#include <sysdep.h>
/* Linux times system call returns 64-bit integer. */
-#undef INTERNAL_SYSCALL_NCS
-#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
- ({ \
- unsigned long long int resultvar; \
- LOAD_ARGS_##nr (args) \
- LOAD_REGS_##nr \
- asm volatile ( \
- "syscall\n\t" \
- : "=a" (resultvar) \
- : "0" (name) ASM_ARGS_##nr : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
- (long long int) resultvar; })
+#undef internal_syscall1
+#define internal_syscall1(number, err, arg1) \
+({ \
+ unsigned long long int resultvar; \
+ TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
+ register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
+ asm volatile ( \
+ "syscall\n\t" \
+ : "=a" (resultvar) \
+ : "0" (number), "r" (_a1) \
+ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
+ (long long int) resultvar; \
+})
#undef INTERNAL_SYSCALL_ERROR_P
#define INTERNAL_SYSCALL_ERROR_P(val, err) \
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 12/14] Fix {INLINE,INTERNAL}_SYSCALL macros for x32
2017-08-03 13:12 ` [PATCH 12/14] Fix {INLINE,INTERNAL}_SYSCALL macros for x32 Adhemerval Zanella
@ 2017-08-22 18:25 ` Adhemerval Zanella
2017-08-22 18:32 ` H.J. Lu
0 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-22 18:25 UTC (permalink / raw)
To: libc-alpha; +Cc: H.J. Lu
Now that all non cancellable syscall wrapper are done with proper
function prototype, this patch for x32 is safe to be applied (take
from H.J. Lu replied on previous version [1]).
H.J. Lu, do you any other objection about it? I would like also
to push the 13/14 part [2].
[1] https://sourceware.org/ml/libc-alpha/2017-07/msg00124.html
[2] https://sourceware.org/ml/libc-alpha/2017-08/msg00103.html
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> From: Adhemerval Zanella <adhemerval.zanella@linaro.com>
>
> The problem for x32 is the {INTERNAL,INLINE}_SYSCALL C macros explicit
> cast the arguments to 'long int', thus passing as 32 bits arguments
> that should be passed to 64 bits.
>
> Previous x32 implementation uses the auto-generated syscalls from
> assembly macros (syscalls.list), so the {INTERNAL,INLINE}_SYSCALL
> macros are never used with 64 bit argument in x32 (which are
> internally broken for this ILP).
>
> To fix it I used a strategy similar to MIPS64n32 (although both
> ABI differs for some syscalls on how top pass 64-bits arguments)
> where argument types for kernel call are defined using GCC extension
> 'typeof' with a arithmetic operation. This allows 64-bits arguments
> to be defined while 32-bits argument will still passed as 32-bits.
>
> I also cleanup the {INLINE,INTERNAL}_SYSCALL definition by defining
> 'inline_syscallX' instead of constructing the argument passing using
> macros (it adds some readability) and removed the ununsed
> INTERNAL_SYSCALL_NCS_TYPES define (since the patch idea is exactly to
> avoid requiric explicit types passing).
>
> Tested on x86_64 and x32.
>
> * sysdeps/unix/sysv/linux/x86_64/sysdep.h
> (INTERNAL_SYSCALL_NCS_TYPES): Remove define.
> (LOAD_ARGS_0): Likewise.
> (LOAD_ARGS_1): Likewise.
> (LOAD_ARGS_2): Likewise.
> (LOAD_ARGS_3): Likewise.
> (LOAD_ARGS_4): Likewise.
> (LOAD_ARGS_5): Likewise.
> (LOAD_ARGS_6): Likewise.
> (LOAD_REGS_0): Likewise.
> (LOAD_REGS_1): Likewise.
> (LOAD_REGS_2): Likewise.
> (LOAD_REGS_3): Likewise.
> (LOAD_REGS_4): Likewise.
> (LOAD_REGS_5): Likewise.
> (LOAD_REGS_6): Likewise.
> (ASM_ARGS_0): Likewise.
> (ASM_ARGS_1): Likewise.
> (ASM_ARGS_2): Likewise.
> (ASM_ARGS_3): Likewise.
> (ASM_ARGS_4): Likewise.
> (ASM_ARGS_5): Likewise.
> (ASM_ARGS_6): Likewise.
> (LOAD_ARGS_TYPES_1): Likewise.
> (LOAD_ARGS_TYPES_2): Likewise.
> (LOAD_ARGS_TYPES_3): Likewise.
> (LOAD_ARGS_TYPES_4): Likewise.
> (LOAD_ARGS_TYPES_5): Likewise.
> (LOAD_ARGS_TYPES_6): Likewise.
> (LOAD_REGS_TYPES_1): Likewise.
> (LOAD_REGS_TYPES_2): Likewise.
> (LOAD_REGS_TYPES_3): Likewise.
> (LOAD_REGS_TYPES_4): Likewise.
> (LOAD_REGS_TYPES_5): Likewise.
> (LOAD_REGS_TYPES_6): Likewise.
> (TYPEFY): New define.
> (ARGIFY): Likewise.
> (internal_syscall0): Likewise.
> (internal_syscall1): Likewise.
> (internal_syscall2): Likewise.
> (internal_syscall3): Likewise.
> (internal_syscall4): Likewise.
> (internal_syscall5): Likewise.
> (internal_syscall6): Likewise.
> * sysdeps/unix/sysv/linux/x86_64/x32/times.c
> (INTERNAL_SYSCALL_NCS): Remove define.
> (internal_syscall1): Add define.
> ---
> ChangeLog | 48 ++++++
> sysdeps/unix/sysv/linux/x86_64/sysdep.h | 251 ++++++++++++++++-------------
> sysdeps/unix/sysv/linux/x86_64/x32/times.c | 24 +--
> 3 files changed, 203 insertions(+), 120 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 9ed9789..a5f917f 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,53 @@
> 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> + * sysdeps/unix/sysv/linux/x86_64/sysdep.h
> + (INTERNAL_SYSCALL_NCS_TYPES): Remove define.
> + (LOAD_ARGS_0): Likewise.
> + (LOAD_ARGS_1): Likewise.
> + (LOAD_ARGS_2): Likewise.
> + (LOAD_ARGS_3): Likewise.
> + (LOAD_ARGS_4): Likewise.
> + (LOAD_ARGS_5): Likewise.
> + (LOAD_ARGS_6): Likewise.
> + (LOAD_REGS_0): Likewise.
> + (LOAD_REGS_1): Likewise.
> + (LOAD_REGS_2): Likewise.
> + (LOAD_REGS_3): Likewise.
> + (LOAD_REGS_4): Likewise.
> + (LOAD_REGS_5): Likewise.
> + (LOAD_REGS_6): Likewise.
> + (ASM_ARGS_0): Likewise.
> + (ASM_ARGS_1): Likewise.
> + (ASM_ARGS_2): Likewise.
> + (ASM_ARGS_3): Likewise.
> + (ASM_ARGS_4): Likewise.
> + (ASM_ARGS_5): Likewise.
> + (ASM_ARGS_6): Likewise.
> + (LOAD_ARGS_TYPES_1): Likewise.
> + (LOAD_ARGS_TYPES_2): Likewise.
> + (LOAD_ARGS_TYPES_3): Likewise.
> + (LOAD_ARGS_TYPES_4): Likewise.
> + (LOAD_ARGS_TYPES_5): Likewise.
> + (LOAD_ARGS_TYPES_6): Likewise.
> + (LOAD_REGS_TYPES_1): Likewise.
> + (LOAD_REGS_TYPES_2): Likewise.
> + (LOAD_REGS_TYPES_3): Likewise.
> + (LOAD_REGS_TYPES_4): Likewise.
> + (LOAD_REGS_TYPES_5): Likewise.
> + (LOAD_REGS_TYPES_6): Likewise.
> + (TYPEFY): New define.
> + (ARGIFY): Likewise.
> + (internal_syscall0): Likewise.
> + (internal_syscall1): Likewise.
> + (internal_syscall2): Likewise.
> + (internal_syscall3): Likewise.
> + (internal_syscall4): Likewise.
> + (internal_syscall5): Likewise.
> + (internal_syscall6): Likewise.
> + * sysdeps/unix/sysv/linux/x86_64/x32/times.c
> + (INTERNAL_SYSCALL_NCS): Remove define.
> + (internal_syscall1): Add define.
> +
> * sysdeps/generic/not-cancel.h (sigsuspend_not_cancel): Remove
> macro.
> * sysdeps/unix/sysv/linux/not-cancel.h (sigsuspend_not_cancel):
> diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
> index 880e496..f299bf2 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h
> +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
> @@ -221,33 +221,148 @@
> /* Registers clobbered by syscall. */
> # define REGISTERS_CLOBBERED_BY_SYSCALL "cc", "r11", "cx"
>
> -# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
> - ({ \
> - unsigned long int resultvar; \
> - LOAD_ARGS_##nr (args) \
> - LOAD_REGS_##nr \
> - asm volatile ( \
> - "syscall\n\t" \
> - : "=a" (resultvar) \
> - : "0" (name) ASM_ARGS_##nr : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
> - (long int) resultvar; })
> -# undef INTERNAL_SYSCALL
> -# define INTERNAL_SYSCALL(name, err, nr, args...) \
> - INTERNAL_SYSCALL_NCS (__NR_##name, err, nr, ##args)
> -
> -# define INTERNAL_SYSCALL_NCS_TYPES(name, err, nr, args...) \
> - ({ \
> - unsigned long int resultvar; \
> - LOAD_ARGS_TYPES_##nr (args) \
> - LOAD_REGS_TYPES_##nr (args) \
> - asm volatile ( \
> - "syscall\n\t" \
> - : "=a" (resultvar) \
> - : "0" (name) ASM_ARGS_##nr : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
> - (long int) resultvar; })
> -# undef INTERNAL_SYSCALL_TYPES
> -# define INTERNAL_SYSCALL_TYPES(name, err, nr, args...) \
> - INTERNAL_SYSCALL_NCS_TYPES (__NR_##name, err, nr, ##args)
> +/* Create a variable 'name' based on type 'X' to avoid explicit types.
> + This is mainly used set use 64-bits arguments in x32. */
> +#define TYPEFY(X, name) __typeof__ ((X) - (X)) name
> +/* Explicit cast the argument to avoid integer from pointer warning on
> + x32. */
> +#define ARGIFY(X) ((__typeof__ ((X) - (X))) (X))
> +
> +#undef INTERNAL_SYSCALL
> +#define INTERNAL_SYSCALL(name, err, nr, args...) \
> + internal_syscall##nr (SYS_ify (name), err, args)
> +
> +#undef INTERNAL_SYSCALL_NCS
> +#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \
> + internal_syscall##nr (number, err, args)
> +
> +#undef internal_syscall0
> +#define internal_syscall0(number, err, dummy...) \
> +({ \
> + unsigned long int resultvar; \
> + asm volatile ( \
> + "syscall\n\t" \
> + : "=a" (resultvar) \
> + : "0" (number) \
> + : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
> + (long int) resultvar; \
> +})
> +
> +#undef internal_syscall1
> +#define internal_syscall1(number, err, arg1) \
> +({ \
> + unsigned long int resultvar; \
> + TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
> + register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
> + asm volatile ( \
> + "syscall\n\t" \
> + : "=a" (resultvar) \
> + : "0" (number), "r" (_a1) \
> + : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
> + (long int) resultvar; \
> +})
> +
> +#undef internal_syscall2
> +#define internal_syscall2(number, err, arg1, arg2) \
> +({ \
> + unsigned long int resultvar; \
> + TYPEFY (arg2, __arg2) = ARGIFY (arg2); \
> + TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
> + register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
> + register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
> + asm volatile ( \
> + "syscall\n\t" \
> + : "=a" (resultvar) \
> + : "0" (number), "r" (_a1), "r" (_a2) \
> + : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
> + (long int) resultvar; \
> +})
> +
> +#undef internal_syscall3
> +#define internal_syscall3(number, err, arg1, arg2, arg3) \
> +({ \
> + unsigned long int resultvar; \
> + TYPEFY (arg3, __arg3) = ARGIFY (arg3); \
> + TYPEFY (arg2, __arg2) = ARGIFY (arg2); \
> + TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
> + register TYPEFY (arg3, _a3) asm ("rdx") = __arg3; \
> + register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
> + register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
> + asm volatile ( \
> + "syscall\n\t" \
> + : "=a" (resultvar) \
> + : "0" (number), "r" (_a1), "r" (_a2), "r" (_a3) \
> + : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
> + (long int) resultvar; \
> +})
> +
> +#undef internal_syscall4
> +#define internal_syscall4(number, err, arg1, arg2, arg3, arg4) \
> +({ \
> + unsigned long int resultvar; \
> + TYPEFY (arg4, __arg4) = ARGIFY (arg4); \
> + TYPEFY (arg3, __arg3) = ARGIFY (arg3); \
> + TYPEFY (arg2, __arg2) = ARGIFY (arg2); \
> + TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
> + register TYPEFY (arg4, _a4) asm ("r10") = __arg4; \
> + register TYPEFY (arg3, _a3) asm ("rdx") = __arg3; \
> + register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
> + register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
> + asm volatile ( \
> + "syscall\n\t" \
> + : "=a" (resultvar) \
> + : "0" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4) \
> + : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
> + (long int) resultvar; \
> +})
> +
> +#undef internal_syscall5
> +#define internal_syscall5(number, err, arg1, arg2, arg3, arg4, arg5) \
> +({ \
> + unsigned long int resultvar; \
> + TYPEFY (arg5, __arg5) = ARGIFY (arg5); \
> + TYPEFY (arg4, __arg4) = ARGIFY (arg4); \
> + TYPEFY (arg3, __arg3) = ARGIFY (arg3); \
> + TYPEFY (arg2, __arg2) = ARGIFY (arg2); \
> + TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
> + register TYPEFY (arg5, _a5) asm ("r8") = __arg5; \
> + register TYPEFY (arg4, _a4) asm ("r10") = __arg4; \
> + register TYPEFY (arg3, _a3) asm ("rdx") = __arg3; \
> + register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
> + register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
> + asm volatile ( \
> + "syscall\n\t" \
> + : "=a" (resultvar) \
> + : "0" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4), \
> + "r" (_a5) \
> + : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
> + (long int) resultvar; \
> +})
> +
> +#undef internal_syscall6
> +#define internal_syscall6(number, err, arg1, arg2, arg3, arg4, arg5, arg6) \
> +({ \
> + unsigned long int resultvar; \
> + TYPEFY (arg6, __arg6) = ARGIFY (arg6); \
> + TYPEFY (arg5, __arg5) = ARGIFY (arg5); \
> + TYPEFY (arg4, __arg4) = ARGIFY (arg4); \
> + TYPEFY (arg3, __arg3) = ARGIFY (arg3); \
> + TYPEFY (arg2, __arg2) = ARGIFY (arg2); \
> + TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
> + register TYPEFY (arg6, _a6) asm ("r9") = __arg6; \
> + register TYPEFY (arg5, _a5) asm ("r8") = __arg5; \
> + register TYPEFY (arg4, _a4) asm ("r10") = __arg4; \
> + register TYPEFY (arg3, _a3) asm ("rdx") = __arg3; \
> + register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
> + register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
> + asm volatile ( \
> + "syscall\n\t" \
> + : "=a" (resultvar) \
> + : "0" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4), \
> + "r" (_a5), "r" (_a6) \
> + : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
> + (long int) resultvar; \
> +})
>
> # undef INTERNAL_SYSCALL_ERROR_P
> # define INTERNAL_SYSCALL_ERROR_P(val, err) \
> @@ -261,88 +376,6 @@
> # define HAVE_GETTIMEOFDAY_VSYSCALL 1
> # define HAVE_GETCPU_VSYSCALL 1
>
> -# define LOAD_ARGS_0()
> -# define LOAD_REGS_0
> -# define ASM_ARGS_0
> -
> -# define LOAD_ARGS_TYPES_1(t1, a1) \
> - t1 __arg1 = (t1) (a1); \
> - LOAD_ARGS_0 ()
> -# define LOAD_REGS_TYPES_1(t1, a1) \
> - register t1 _a1 asm ("rdi") = __arg1; \
> - LOAD_REGS_0
> -# define ASM_ARGS_1 ASM_ARGS_0, "r" (_a1)
> -# define LOAD_ARGS_1(a1) \
> - LOAD_ARGS_TYPES_1 (long int, a1)
> -# define LOAD_REGS_1 \
> - LOAD_REGS_TYPES_1 (long int, a1)
> -
> -# define LOAD_ARGS_TYPES_2(t1, a1, t2, a2) \
> - t2 __arg2 = (t2) (a2); \
> - LOAD_ARGS_TYPES_1 (t1, a1)
> -# define LOAD_REGS_TYPES_2(t1, a1, t2, a2) \
> - register t2 _a2 asm ("rsi") = __arg2; \
> - LOAD_REGS_TYPES_1(t1, a1)
> -# define ASM_ARGS_2 ASM_ARGS_1, "r" (_a2)
> -# define LOAD_ARGS_2(a1, a2) \
> - LOAD_ARGS_TYPES_2 (long int, a1, long int, a2)
> -# define LOAD_REGS_2 \
> - LOAD_REGS_TYPES_2 (long int, a1, long int, a2)
> -
> -# define LOAD_ARGS_TYPES_3(t1, a1, t2, a2, t3, a3) \
> - t3 __arg3 = (t3) (a3); \
> - LOAD_ARGS_TYPES_2 (t1, a1, t2, a2)
> -# define LOAD_REGS_TYPES_3(t1, a1, t2, a2, t3, a3) \
> - register t3 _a3 asm ("rdx") = __arg3; \
> - LOAD_REGS_TYPES_2(t1, a1, t2, a2)
> -# define ASM_ARGS_3 ASM_ARGS_2, "r" (_a3)
> -# define LOAD_ARGS_3(a1, a2, a3) \
> - LOAD_ARGS_TYPES_3 (long int, a1, long int, a2, long int, a3)
> -# define LOAD_REGS_3 \
> - LOAD_REGS_TYPES_3 (long int, a1, long int, a2, long int, a3)
> -
> -# define LOAD_ARGS_TYPES_4(t1, a1, t2, a2, t3, a3, t4, a4) \
> - t4 __arg4 = (t4) (a4); \
> - LOAD_ARGS_TYPES_3 (t1, a1, t2, a2, t3, a3)
> -# define LOAD_REGS_TYPES_4(t1, a1, t2, a2, t3, a3, t4, a4) \
> - register t4 _a4 asm ("r10") = __arg4; \
> - LOAD_REGS_TYPES_3(t1, a2, t2, a2, t3, a3)
> -# define ASM_ARGS_4 ASM_ARGS_3, "r" (_a4)
> -# define LOAD_ARGS_4(a1, a2, a3, a4) \
> - LOAD_ARGS_TYPES_4 (long int, a1, long int, a2, long int, a3, \
> - long int, a4)
> -# define LOAD_REGS_4 \
> - LOAD_REGS_TYPES_4 (long int, a1, long int, a2, long int, a3, \
> - long int, a4)
> -
> -# define LOAD_ARGS_TYPES_5(t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) \
> - t5 __arg5 = (t5) (a5); \
> - LOAD_ARGS_TYPES_4 (t1, a1, t2, a2, t3, a3, t4, a4)
> -# define LOAD_REGS_TYPES_5(t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) \
> - register t5 _a5 asm ("r8") = __arg5; \
> - LOAD_REGS_TYPES_4 (t1, a1, t2, a2, t3, a3, t4, a4)
> -# define ASM_ARGS_5 ASM_ARGS_4, "r" (_a5)
> -# define LOAD_ARGS_5(a1, a2, a3, a4, a5) \
> - LOAD_ARGS_TYPES_5 (long int, a1, long int, a2, long int, a3, \
> - long int, a4, long int, a5)
> -# define LOAD_REGS_5 \
> - LOAD_REGS_TYPES_5 (long int, a1, long int, a2, long int, a3, \
> - long int, a4, long int, a5)
> -
> -# define LOAD_ARGS_TYPES_6(t1, a1, t2, a2, t3, a3, t4, a4, t5, a5, t6, a6) \
> - t6 __arg6 = (t6) (a6); \
> - LOAD_ARGS_TYPES_5 (t1, a1, t2, a2, t3, a3, t4, a4, t5, a5)
> -# define LOAD_REGS_TYPES_6(t1, a1, t2, a2, t3, a3, t4, a4, t5, a5, t6, a6) \
> - register t6 _a6 asm ("r9") = __arg6; \
> - LOAD_REGS_TYPES_5 (t1, a1, t2, a2, t3, a3, t4, a4, t5, a5)
> -# define ASM_ARGS_6 ASM_ARGS_5, "r" (_a6)
> -# define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \
> - LOAD_ARGS_TYPES_6 (long int, a1, long int, a2, long int, a3, \
> - long int, a4, long int, a5, long int, a6)
> -# define LOAD_REGS_6 \
> - LOAD_REGS_TYPES_6 (long int, a1, long int, a2, long int, a3, \
> - long int, a4, long int, a5, long int, a6)
> -
> #endif /* __ASSEMBLER__ */
>
>
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/times.c b/sysdeps/unix/sysv/linux/x86_64/x32/times.c
> index d56106e..8763047 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/times.c
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/times.c
> @@ -19,17 +19,19 @@
> #include <sysdep.h>
>
> /* Linux times system call returns 64-bit integer. */
> -#undef INTERNAL_SYSCALL_NCS
> -#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
> - ({ \
> - unsigned long long int resultvar; \
> - LOAD_ARGS_##nr (args) \
> - LOAD_REGS_##nr \
> - asm volatile ( \
> - "syscall\n\t" \
> - : "=a" (resultvar) \
> - : "0" (name) ASM_ARGS_##nr : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
> - (long long int) resultvar; })
> +#undef internal_syscall1
> +#define internal_syscall1(number, err, arg1) \
> +({ \
> + unsigned long long int resultvar; \
> + TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
> + register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
> + asm volatile ( \
> + "syscall\n\t" \
> + : "=a" (resultvar) \
> + : "0" (number), "r" (_a1) \
> + : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
> + (long long int) resultvar; \
> +})
>
> #undef INTERNAL_SYSCALL_ERROR_P
> #define INTERNAL_SYSCALL_ERROR_P(val, err) \
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 12/14] Fix {INLINE,INTERNAL}_SYSCALL macros for x32
2017-08-22 18:25 ` Adhemerval Zanella
@ 2017-08-22 18:32 ` H.J. Lu
2017-08-22 19:04 ` Adhemerval Zanella
0 siblings, 1 reply; 37+ messages in thread
From: H.J. Lu @ 2017-08-22 18:32 UTC (permalink / raw)
To: Adhemerval Zanella; +Cc: GNU C Library
On Tue, Aug 22, 2017 at 11:25 AM, Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
> Now that all non cancellable syscall wrapper are done with proper
> function prototype, this patch for x32 is safe to be applied (take
> from H.J. Lu replied on previous version [1]).
>
> H.J. Lu, do you any other objection about it? I would like also
> to push the 13/14 part [2].
>
> [1] https://sourceware.org/ml/libc-alpha/2017-07/msg00124.html
> [2] https://sourceware.org/ml/libc-alpha/2017-08/msg00103.html
Are there any changes comparing against
https://sourceware.org/ml/libc-alpha/2017-07/msg00119.html
--
H.J.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 12/14] Fix {INLINE,INTERNAL}_SYSCALL macros for x32
2017-08-22 18:32 ` H.J. Lu
@ 2017-08-22 19:04 ` Adhemerval Zanella
2017-08-22 19:06 ` H.J. Lu
0 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-22 19:04 UTC (permalink / raw)
To: H.J. Lu; +Cc: GNU C Library
On 22/08/2017 15:32, H.J. Lu wrote:
> On Tue, Aug 22, 2017 at 11:25 AM, Adhemerval Zanella
> <adhemerval.zanella@linaro.org> wrote:
>> Now that all non cancellable syscall wrapper are done with proper
>> function prototype, this patch for x32 is safe to be applied (take
>> from H.J. Lu replied on previous version [1]).
>>
>> H.J. Lu, do you any other objection about it? I would like also
>> to push the 13/14 part [2].
>>
>> [1] https://sourceware.org/ml/libc-alpha/2017-07/msg00124.html
>> [2] https://sourceware.org/ml/libc-alpha/2017-08/msg00103.html
>
> Are there any changes comparing against
>
> https://sourceware.org/ml/libc-alpha/2017-07/msg00119.html
None, both are the same patch.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 12/14] Fix {INLINE,INTERNAL}_SYSCALL macros for x32
2017-08-22 19:04 ` Adhemerval Zanella
@ 2017-08-22 19:06 ` H.J. Lu
0 siblings, 0 replies; 37+ messages in thread
From: H.J. Lu @ 2017-08-22 19:06 UTC (permalink / raw)
To: Adhemerval Zanella; +Cc: GNU C Library
On Tue, Aug 22, 2017 at 12:04 PM, Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
>
> On 22/08/2017 15:32, H.J. Lu wrote:
>> On Tue, Aug 22, 2017 at 11:25 AM, Adhemerval Zanella
>> <adhemerval.zanella@linaro.org> wrote:
>>> Now that all non cancellable syscall wrapper are done with proper
>>> function prototype, this patch for x32 is safe to be applied (take
>>> from H.J. Lu replied on previous version [1]).
>>>
>>> H.J. Lu, do you any other objection about it? I would like also
>>> to push the 13/14 part [2].
>>>
>>> [1] https://sourceware.org/ml/libc-alpha/2017-07/msg00124.html
>>> [2] https://sourceware.org/ml/libc-alpha/2017-08/msg00103.html
>>
>> Are there any changes comparing against
>>
>> https://sourceware.org/ml/libc-alpha/2017-07/msg00119.html
>
> None, both are the same patch.
It is OK.
Thanks.
--
H.J.
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 13/14] Remove p{read,write}{v} and fallocate from x86 auto-generation list
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
` (11 preceding siblings ...)
2017-08-03 13:12 ` [PATCH 12/14] Fix {INLINE,INTERNAL}_SYSCALL macros for x32 Adhemerval Zanella
@ 2017-08-03 13:12 ` Adhemerval Zanella
2017-08-03 13:12 ` [PATCH 10/14] Consolidate non cancellable nanosleep call Adhemerval Zanella
2017-08-09 17:23 ` [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
14 siblings, 0 replies; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:12 UTC (permalink / raw)
To: libc-alpha
With {INLINE,INTERNAL}_SYSCALL macros fixed for 64-bits arguments on x32,
we can remove the p{read,write}{v} from auto-generation list.
Tested on x86_64 and x32.
* sysdeps/unix/sysv/linux/x86_64/syscalls.list (pread64): Remove.
(preadv64): Likewise.
(pwrite64(: Likewise.
(pwritev64): Likewise.
---
ChangeLog | 5 +++++
sysdeps/unix/sysv/linux/x86_64/syscalls.list | 4 ----
sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list | 1 -
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index a5f917f..d0a78a1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * sysdeps/unix/sysv/linux/x86_64/syscalls.list (pread64): Remove.
+ (preadv64): Likewise.
+ (pwrite64(: Likewise.
+ (pwritev64): Likewise.
+
* sysdeps/unix/sysv/linux/x86_64/sysdep.h
(INTERNAL_SYSCALL_NCS_TYPES): Remove define.
(LOAD_ARGS_0): Likewise.
diff --git a/sysdeps/unix/sysv/linux/x86_64/syscalls.list b/sysdeps/unix/sysv/linux/x86_64/syscalls.list
index 889193b..d46524e 100644
--- a/sysdeps/unix/sysv/linux/x86_64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/x86_64/syscalls.list
@@ -2,10 +2,6 @@
arch_prctl EXTRA arch_prctl i:ii __arch_prctl arch_prctl
modify_ldt EXTRA modify_ldt i:ipi __modify_ldt modify_ldt
-pread64 - pread64 Ci:ipii __libc_pread __libc_pread64 __pread64 pread64 __pread pread
-preadv64 - preadv Ci:ipii preadv64 preadv
-pwrite64 - pwrite64 Ci:ipii __libc_pwrite __libc_pwrite64 __pwrite64 pwrite64 __pwrite pwrite
-pwritev64 - pwritev Ci:ipii pwritev64 pwritev
syscall_clock_gettime EXTRA clock_gettime Ei:ip __syscall_clock_gettime
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list b/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list
index a41c8ac..b44f6f9 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list
@@ -1,6 +1,5 @@
# File name Caller Syscall name # args Strong name Weak names
-fallocate - fallocate Ci:iiii fallocate fallocate64
gettimeofday - gettimeofday:__vdso_gettimeofday@LINUX_2.6 i:pP __gettimeofday gettimeofday
personality EXTRA personality Ei:i __personality personality
posix_fadvise64 - fadvise64 Vi:iiii posix_fadvise posix_fadvise64
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH 10/14] Consolidate non cancellable nanosleep call
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
` (12 preceding siblings ...)
2017-08-03 13:12 ` [PATCH 13/14] Remove p{read,write}{v} and fallocate from x86 auto-generation list Adhemerval Zanella
@ 2017-08-03 13:12 ` Adhemerval Zanella
2017-08-22 13:07 ` Adhemerval Zanella
2017-08-09 17:23 ` [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-03 13:12 UTC (permalink / raw)
To: libc-alpha
This patch consolidates all the non cancellable nanosleep calls to use
the __nanosleep_nocancel identifier. For non cancellable targets it will
be just a macro to call the default respective symbol while on Linux
will be a internal one.
Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
* nptl/pthread_mutex_timedlock.c (__pthread_mutex_timedlock): Replace
nanosleep_not_cancel with __nanosleep_nocancel.
* sysdeps/generic/not-cancel.h (nanosleep_not_cancel): Remove macro.
(__nanosleep_nocancel): New macro.
* sysdeps/unix/sysv/linux/nanosleep.c (__nanosleep_nocancel): New
function.
* sysdeps/unix/sysv/linux/not-cancel.h (nanosleep_not_cancel): Remove
macro.
(__nanosleep_nocancel): New prototype.
---
ChangeLog | 10 ++++++++++
nptl/pthread_mutex_timedlock.c | 2 +-
sysdeps/generic/not-cancel.h | 2 +-
sysdeps/unix/sysv/linux/nanosleep.c | 9 +++++++++
sysdeps/unix/sysv/linux/not-cancel.h | 5 +++--
5 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 877c5d9..bf9bd57 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * nptl/pthread_mutex_timedlock.c (__pthread_mutex_timedlock): Replace
+ nanosleep_not_cancel with __nanosleep_nocancel.
+ * sysdeps/generic/not-cancel.h (nanosleep_not_cancel): Remove macro.
+ (__nanosleep_nocancel): New macro.
+ * sysdeps/unix/sysv/linux/nanosleep.c (__nanosleep_nocancel): New
+ function.
+ * sysdeps/unix/sysv/linux/not-cancel.h (nanosleep_not_cancel): Remove
+ macro.
+ (__nanosleep_nocancel): New prototype.
+
* nptl/pthread_mutex_lock.c (__pthread_mutex_lock_full): Replace
pause_not_cancel with __pause_nocancel.
* sysdeps/generic/not-cancel.h (pause_not_cancel): Remove macro.
diff --git a/nptl/pthread_mutex_timedlock.c b/nptl/pthread_mutex_timedlock.c
index d5ec314..45f3454 100644
--- a/nptl/pthread_mutex_timedlock.c
+++ b/nptl/pthread_mutex_timedlock.c
@@ -432,7 +432,7 @@ __pthread_mutex_timedlock (pthread_mutex_t *mutex,
--reltime.tv_sec;
}
if (reltime.tv_sec >= 0)
- while (nanosleep_not_cancel (&reltime, &reltime) != 0)
+ while (__nanosleep_nocancel (&reltime, &reltime) != 0)
continue;
return ETIMEDOUT;
diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
index f2140c2..e4a8584 100644
--- a/sysdeps/generic/not-cancel.h
+++ b/sysdeps/generic/not-cancel.h
@@ -40,7 +40,7 @@
__waitpid (pid, stat_loc, options)
#define __pause_nocancel() \
__pause ()
-#define nanosleep_not_cancel(requested_time, remaining) \
+#define __nanosleep_nocancel(requested_time, remaining) \
__nanosleep (requested_time, remaining)
#define sigsuspend_not_cancel(set) \
__sigsuspend (set)
diff --git a/sysdeps/unix/sysv/linux/nanosleep.c b/sysdeps/unix/sysv/linux/nanosleep.c
index 2d15328..e7ac2c0 100644
--- a/sysdeps/unix/sysv/linux/nanosleep.c
+++ b/sysdeps/unix/sysv/linux/nanosleep.c
@@ -18,6 +18,7 @@
#include <time.h>
#include <sysdep-cancel.h>
+#include <not-cancel.h>
/* Pause execution for a number of nanoseconds. */
int
@@ -28,3 +29,11 @@ __nanosleep (const struct timespec *requested_time,
}
hidden_def (__nanosleep)
weak_alias (__nanosleep, nanosleep)
+
+int
+__nanosleep_nocancel (const struct timespec *requested_time,
+ struct timespec *remaining)
+{
+ return INLINE_SYSCALL_CALL (nanosleep, requested_time, remaining);
+}
+hidden_def (__nanosleep_nocancel)
diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
index 89c1f46..07f07f6 100644
--- a/sysdeps/unix/sysv/linux/not-cancel.h
+++ b/sysdeps/unix/sysv/linux/not-cancel.h
@@ -26,6 +26,7 @@
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/wait.h>
+#include <time.h>
/* Non cancellable open syscall. */
__typeof (open) __open_nocancel;
@@ -82,8 +83,8 @@ __typeof (pause) __pause_nocancel;
libc_hidden_proto (__pause_nocancel)
/* Uncancelable nanosleep. */
-#define nanosleep_not_cancel(requested_time, remaining) \
- INLINE_SYSCALL (nanosleep, 2, requested_time, remaining)
+__typeof (__nanosleep) __nanosleep_nocancel;
+hidden_proto (__nanosleep_nocancel)
/* Uncancelable sigsuspend. */
#define sigsuspend_not_cancel(set) \
--
2.7.4
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH 10/14] Consolidate non cancellable nanosleep call
2017-08-03 13:12 ` [PATCH 10/14] Consolidate non cancellable nanosleep call Adhemerval Zanella
@ 2017-08-22 13:07 ` Adhemerval Zanella
0 siblings, 0 replies; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-22 13:07 UTC (permalink / raw)
To: libc-alpha
Since this is a refactor, if no one opposes I will commit it shortly.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> This patch consolidates all the non cancellable nanosleep calls to use
> the __nanosleep_nocancel identifier. For non cancellable targets it will
> be just a macro to call the default respective symbol while on Linux
> will be a internal one.
>
> Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu.
>
> * nptl/pthread_mutex_timedlock.c (__pthread_mutex_timedlock): Replace
> nanosleep_not_cancel with __nanosleep_nocancel.
> * sysdeps/generic/not-cancel.h (nanosleep_not_cancel): Remove macro.
> (__nanosleep_nocancel): New macro.
> * sysdeps/unix/sysv/linux/nanosleep.c (__nanosleep_nocancel): New
> function.
> * sysdeps/unix/sysv/linux/not-cancel.h (nanosleep_not_cancel): Remove
> macro.
> (__nanosleep_nocancel): New prototype.
> ---
> ChangeLog | 10 ++++++++++
> nptl/pthread_mutex_timedlock.c | 2 +-
> sysdeps/generic/not-cancel.h | 2 +-
> sysdeps/unix/sysv/linux/nanosleep.c | 9 +++++++++
> sysdeps/unix/sysv/linux/not-cancel.h | 5 +++--
> 5 files changed, 24 insertions(+), 4 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 877c5d9..bf9bd57 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,15 @@
> 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> + * nptl/pthread_mutex_timedlock.c (__pthread_mutex_timedlock): Replace
> + nanosleep_not_cancel with __nanosleep_nocancel.
> + * sysdeps/generic/not-cancel.h (nanosleep_not_cancel): Remove macro.
> + (__nanosleep_nocancel): New macro.
> + * sysdeps/unix/sysv/linux/nanosleep.c (__nanosleep_nocancel): New
> + function.
> + * sysdeps/unix/sysv/linux/not-cancel.h (nanosleep_not_cancel): Remove
> + macro.
> + (__nanosleep_nocancel): New prototype.
> +
> * nptl/pthread_mutex_lock.c (__pthread_mutex_lock_full): Replace
> pause_not_cancel with __pause_nocancel.
> * sysdeps/generic/not-cancel.h (pause_not_cancel): Remove macro.
> diff --git a/nptl/pthread_mutex_timedlock.c b/nptl/pthread_mutex_timedlock.c
> index d5ec314..45f3454 100644
> --- a/nptl/pthread_mutex_timedlock.c
> +++ b/nptl/pthread_mutex_timedlock.c
> @@ -432,7 +432,7 @@ __pthread_mutex_timedlock (pthread_mutex_t *mutex,
> --reltime.tv_sec;
> }
> if (reltime.tv_sec >= 0)
> - while (nanosleep_not_cancel (&reltime, &reltime) != 0)
> + while (__nanosleep_nocancel (&reltime, &reltime) != 0)
> continue;
>
> return ETIMEDOUT;
> diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h
> index f2140c2..e4a8584 100644
> --- a/sysdeps/generic/not-cancel.h
> +++ b/sysdeps/generic/not-cancel.h
> @@ -40,7 +40,7 @@
> __waitpid (pid, stat_loc, options)
> #define __pause_nocancel() \
> __pause ()
> -#define nanosleep_not_cancel(requested_time, remaining) \
> +#define __nanosleep_nocancel(requested_time, remaining) \
> __nanosleep (requested_time, remaining)
> #define sigsuspend_not_cancel(set) \
> __sigsuspend (set)
> diff --git a/sysdeps/unix/sysv/linux/nanosleep.c b/sysdeps/unix/sysv/linux/nanosleep.c
> index 2d15328..e7ac2c0 100644
> --- a/sysdeps/unix/sysv/linux/nanosleep.c
> +++ b/sysdeps/unix/sysv/linux/nanosleep.c
> @@ -18,6 +18,7 @@
>
> #include <time.h>
> #include <sysdep-cancel.h>
> +#include <not-cancel.h>
>
> /* Pause execution for a number of nanoseconds. */
> int
> @@ -28,3 +29,11 @@ __nanosleep (const struct timespec *requested_time,
> }
> hidden_def (__nanosleep)
> weak_alias (__nanosleep, nanosleep)
> +
> +int
> +__nanosleep_nocancel (const struct timespec *requested_time,
> + struct timespec *remaining)
> +{
> + return INLINE_SYSCALL_CALL (nanosleep, requested_time, remaining);
> +}
> +hidden_def (__nanosleep_nocancel)
> diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h
> index 89c1f46..07f07f6 100644
> --- a/sysdeps/unix/sysv/linux/not-cancel.h
> +++ b/sysdeps/unix/sysv/linux/not-cancel.h
> @@ -26,6 +26,7 @@
> #include <unistd.h>
> #include <sys/syscall.h>
> #include <sys/wait.h>
> +#include <time.h>
>
> /* Non cancellable open syscall. */
> __typeof (open) __open_nocancel;
> @@ -82,8 +83,8 @@ __typeof (pause) __pause_nocancel;
> libc_hidden_proto (__pause_nocancel)
>
> /* Uncancelable nanosleep. */
> -#define nanosleep_not_cancel(requested_time, remaining) \
> - INLINE_SYSCALL (nanosleep, 2, requested_time, remaining)
> +__typeof (__nanosleep) __nanosleep_nocancel;
> +hidden_proto (__nanosleep_nocancel)
>
> /* Uncancelable sigsuspend. */
> #define sigsuspend_not_cancel(set) \
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v2 00/14] Remove sysdep-cancel assembly macro
2017-08-03 13:11 [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
` (13 preceding siblings ...)
2017-08-03 13:12 ` [PATCH 10/14] Consolidate non cancellable nanosleep call Adhemerval Zanella
@ 2017-08-09 17:23 ` Adhemerval Zanella
2017-08-14 20:05 ` Adhemerval Zanella
14 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-09 17:23 UTC (permalink / raw)
To: libc-alpha
Ping. x86 part got an ok from H.J.Lu and rest of the architectures
are not using the code to generate cancellable syscalls (new ports
may not implement sysdep-cancel.h currently as for current riscv
submission for instance).
I would like to push it to continue on the cancellation fix for the
long standing bz 12683.
On 03/08/2017 10:11, Adhemerval Zanella wrote:
> Change from previous version [1]
>
> * Optimize the loader build for open, read, write, openat, and close
> calls to alias the default variant to no cancel one since for rtld
> object they are essentially the same (SYSCALL_CANCEL ends up
> always calling INLINE_SYSCALL_CALL).
>
> * Use the same convention for no status variant (for instance
> __close_nocancel_nostatus) and change its return to void.
>
> * Cleanup non cancellable pause sligt more: removed __pause_nocancel
> declaration from unistd (since it is now declared on not-errno.h
> header) and removed generic implementation (since the header routes
> to default implementation).
>
> * Removed the unrequired alias for no cancel sigsuspend on hurd.
>
> ---
>
> This patchset finishes my previous work of Linux syscall consolidation
> and refactor to finally remove the requeriment of sysdeps-cancel.h
> assembly macros for cancellable syscalls. All ports now uses the
> SYSCALL_CANCEL macros with C implementation which in turn calls
> INLINE_SYSCALL macros.
>
> Besides simplify the curent code requirement, it also simplify
> possible future ports to require only the C bindings and the direct
> assembly one for syscalls.list autogeneration (another possible
> work for future would be to use C generate binding to simplify
> even further the syscall requirements).
>
> I checked with a build for mostly supported architecture:
> aarch64-linux-gnu, alpha-linux-gnu, arm-linux-gnueabhi, i686-linux-gnu,
> ia64-linux-gnu, m68k-linux-gnu, microblaze-linux-gnu,
> mips{64,64n32}-linux-gnu, nios2-linux-gnu, powerpc{64,64le}-linux-gnu,
> s390{x}-linux-gnu, sh4-linux-gnu{-soft}, tile{pro,gx}-linux-gnu{-32},
> sparc{v9,64}-linux-gnu, and x86_64-linux-gnu.
>
> I also run a full make check on real hardware on aarch64-linux-gnu,
> arm-linux-gnueabihf, i686-linux-gnu, powerpc{64le}-linux-gnu,
> sparc{v9,64}-linux-gnu, and x86_64-linux-gnu{-x32}.
>
> [1] https://sourceware.org/ml/libc-alpha/2017-07/msg00105.html
>
> Adhemerval Zanella (14):
> Consolidate non cancellable open call
> Consolidate non cancellable read call
> Consolidate non cancellable write call
> Consolidate non cancellable openat call
> Consolidate non cancellable close call
> Consolidate non cancellable writev call
> Consolidate non cancellable fcntl call
> Consolidate non cancellable waitpid call
> Consolidate non cancellable pause call
> Consolidate non cancellable nanosleep call
> Remove non cancellable sigsuspend definition
> Fix {INLINE,INTERNAL}_SYSCALL macros for x32
> Remove p{read,write}{v} and fallocate from x86 auto-generation list
> Remove cancellation support for syscall generation
>
> ChangeLog | 462 +++++++++++++++++++++
> catgets/open_catalog.c | 8 +-
> csu/check_fds.c | 2 +-
> gmon/gmon.c | 22 +-
> iconv/gconv_cache.c | 6 +-
> include/unistd.h | 2 -
> intl/loadmsgcat.c | 6 +-
> io/ftw.c | 8 +-
> libio/fileops.c | 12 +-
> libio/iopopen.c | 4 +-
> locale/loadarchive.c | 12 +-
> locale/loadlocale.c | 12 +-
> login/utmp_file.c | 30 +-
> misc/daemon.c | 6 +-
> nptl/pthread_mutex_lock.c | 2 +-
> nptl/pthread_mutex_timedlock.c | 2 +-
> nscd/nscd_getai.c | 2 +-
> nscd/nscd_getgr_r.c | 2 +-
> nscd/nscd_gethst_r.c | 2 +-
> nscd/nscd_getpw_r.c | 2 +-
> nscd/nscd_getserv_r.c | 2 +-
> nscd/nscd_helper.c | 4 +-
> nscd/nscd_initgroups.c | 2 +-
> nscd/nscd_netgroup.c | 4 +-
> nss/nss_db/db-open.c | 4 +-
> resolv/herror.c | 2 +-
> resolv/res-close.c | 4 +-
> stdio-common/psiginfo.c | 2 +-
> sunrpc/pm_getmaps.c | 2 +-
> sysdeps/generic/not-cancel.h | 40 +-
> sysdeps/mach/hurd/opendir.c | 4 +-
> sysdeps/mach/hurd/sigsuspend.c | 1 -
> sysdeps/posix/closedir.c | 2 +-
> sysdeps/posix/getaddrinfo.c | 4 +-
> sysdeps/posix/getcwd.c | 8 +-
> sysdeps/posix/libc_fatal.c | 2 +-
> sysdeps/posix/opendir.c | 12 +-
> sysdeps/posix/pause.c | 15 -
> sysdeps/posix/spawni.c | 11 +-
> sysdeps/unix/make-syscalls.sh | 4 -
> sysdeps/unix/syscall-template.S | 7 +-
> sysdeps/unix/sysv/linux/Versions | 2 +
> sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h | 87 +---
> sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h | 131 +-----
> sysdeps/unix/sysv/linux/arm/sysdep-cancel.h | 197 +--------
> sysdeps/unix/sysv/linux/check_native.c | 2 +-
> sysdeps/unix/sysv/linux/check_pf.c | 2 +-
> sysdeps/unix/sysv/linux/close.c | 12 +
> sysdeps/unix/sysv/linux/fips-private.h | 6 +-
> sysdeps/unix/sysv/linux/gethostid.c | 12 +-
> sysdeps/unix/sysv/linux/getloadavg.c | 6 +-
> sysdeps/unix/sysv/linux/getlogin_r.c | 6 +-
> sysdeps/unix/sysv/linux/getsysstats.c | 16 +-
> sysdeps/unix/sysv/linux/grantpt.c | 6 +-
> sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h | 225 +---------
> sysdeps/unix/sysv/linux/i386/smp.h | 6 +-
> sysdeps/unix/sysv/linux/i386/sysdep-cancel.h | 119 +-----
> sysdeps/unix/sysv/linux/ia64/has_cpuclock.c | 6 +-
> sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h | 194 +--------
> sysdeps/unix/sysv/linux/if_index.c | 6 +-
> sysdeps/unix/sysv/linux/libc_fatal.c | 10 +-
> sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h | 108 +----
> sysdeps/unix/sysv/linux/malloc-sysdep.h | 8 +-
> sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h | 116 +-----
> .../unix/sysv/linux/mips/mips64/sysdep-cancel.h | 249 -----------
> sysdeps/unix/sysv/linux/mips/sysdep-cancel.h | 159 +------
> sysdeps/unix/sysv/linux/mq_notify.c | 2 +-
> sysdeps/unix/sysv/linux/nanosleep.c | 9 +
> sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h | 110 +----
> sysdeps/unix/sysv/linux/not-cancel.h | 118 +++---
> sysdeps/unix/sysv/linux/open.c | 21 +
> sysdeps/unix/sysv/linux/open64.c | 38 +-
> sysdeps/unix/sysv/linux/openat.c | 20 +
> sysdeps/unix/sysv/linux/openat64.c | 36 +-
> sysdeps/unix/sysv/linux/pause.c | 14 +-
> sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c | 2 +-
> .../sysv/linux/powerpc/powerpc32/sysdep-cancel.h | 118 ------
> .../sysv/linux/powerpc/powerpc64/sysdep-cancel.h | 147 -------
> sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h | 38 ++
> sysdeps/unix/sysv/linux/pthread_getname.c | 6 +-
> sysdeps/unix/sysv/linux/pthread_setname.c | 6 +-
> sysdeps/unix/sysv/linux/read.c | 12 +
> .../unix/sysv/linux/s390/s390-32/sysdep-cancel.h | 105 +----
> .../unix/sysv/linux/s390/s390-64/sysdep-cancel.h | 109 +----
> sysdeps/unix/sysv/linux/sh/sysdep-cancel.h | 136 +-----
> .../unix/sysv/linux/sparc/sparc32/sysdep-cancel.h | 111 -----
> .../unix/sysv/linux/sparc/sparc64/sysdep-cancel.h | 109 -----
> sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h | 38 ++
> sysdeps/unix/sysv/linux/spawni.c | 8 +-
> sysdeps/unix/sysv/linux/sysconf.c | 6 +-
> sysdeps/unix/sysv/linux/tile/sysdep-cancel.h | 123 +-----
> sysdeps/unix/sysv/linux/waitpid.c | 15 +-
> sysdeps/unix/sysv/linux/write.c | 12 +
> sysdeps/unix/sysv/linux/x86_64/syscalls.list | 4 -
> sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h | 62 +--
> sysdeps/unix/sysv/linux/x86_64/sysdep.h | 251 ++++++-----
> sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list | 1 -
> sysdeps/unix/sysv/linux/x86_64/x32/times.c | 24 +-
> 98 files changed, 1156 insertions(+), 3086 deletions(-)
> delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
> delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
> delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
> create mode 100644 sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
> delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
> delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
> create mode 100644 sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v2 00/14] Remove sysdep-cancel assembly macro
2017-08-09 17:23 ` [PATCH v2 00/14] Remove sysdep-cancel assembly macro Adhemerval Zanella
@ 2017-08-14 20:05 ` Adhemerval Zanella
2017-08-15 4:28 ` Palmer Dabbelt
0 siblings, 1 reply; 37+ messages in thread
From: Adhemerval Zanella @ 2017-08-14 20:05 UTC (permalink / raw)
To: libc-alpha
Ping (x2).
On 09/08/2017 14:23, Adhemerval Zanella wrote:
> Ping. x86 part got an ok from H.J.Lu and rest of the architectures
> are not using the code to generate cancellable syscalls (new ports
> may not implement sysdep-cancel.h currently as for current riscv
> submission for instance).
>
> I would like to push it to continue on the cancellation fix for the
> long standing bz 12683.
>
> On 03/08/2017 10:11, Adhemerval Zanella wrote:
>> Change from previous version [1]
>>
>> * Optimize the loader build for open, read, write, openat, and close
>> calls to alias the default variant to no cancel one since for rtld
>> object they are essentially the same (SYSCALL_CANCEL ends up
>> always calling INLINE_SYSCALL_CALL).
>>
>> * Use the same convention for no status variant (for instance
>> __close_nocancel_nostatus) and change its return to void.
>>
>> * Cleanup non cancellable pause sligt more: removed __pause_nocancel
>> declaration from unistd (since it is now declared on not-errno.h
>> header) and removed generic implementation (since the header routes
>> to default implementation).
>>
>> * Removed the unrequired alias for no cancel sigsuspend on hurd.
>>
>> ---
>>
>> This patchset finishes my previous work of Linux syscall consolidation
>> and refactor to finally remove the requeriment of sysdeps-cancel.h
>> assembly macros for cancellable syscalls. All ports now uses the
>> SYSCALL_CANCEL macros with C implementation which in turn calls
>> INLINE_SYSCALL macros.
>>
>> Besides simplify the curent code requirement, it also simplify
>> possible future ports to require only the C bindings and the direct
>> assembly one for syscalls.list autogeneration (another possible
>> work for future would be to use C generate binding to simplify
>> even further the syscall requirements).
>>
>> I checked with a build for mostly supported architecture:
>> aarch64-linux-gnu, alpha-linux-gnu, arm-linux-gnueabhi, i686-linux-gnu,
>> ia64-linux-gnu, m68k-linux-gnu, microblaze-linux-gnu,
>> mips{64,64n32}-linux-gnu, nios2-linux-gnu, powerpc{64,64le}-linux-gnu,
>> s390{x}-linux-gnu, sh4-linux-gnu{-soft}, tile{pro,gx}-linux-gnu{-32},
>> sparc{v9,64}-linux-gnu, and x86_64-linux-gnu.
>>
>> I also run a full make check on real hardware on aarch64-linux-gnu,
>> arm-linux-gnueabihf, i686-linux-gnu, powerpc{64le}-linux-gnu,
>> sparc{v9,64}-linux-gnu, and x86_64-linux-gnu{-x32}.
>>
>> [1] https://sourceware.org/ml/libc-alpha/2017-07/msg00105.html
>>
>> Adhemerval Zanella (14):
>> Consolidate non cancellable open call
>> Consolidate non cancellable read call
>> Consolidate non cancellable write call
>> Consolidate non cancellable openat call
>> Consolidate non cancellable close call
>> Consolidate non cancellable writev call
>> Consolidate non cancellable fcntl call
>> Consolidate non cancellable waitpid call
>> Consolidate non cancellable pause call
>> Consolidate non cancellable nanosleep call
>> Remove non cancellable sigsuspend definition
>> Fix {INLINE,INTERNAL}_SYSCALL macros for x32
>> Remove p{read,write}{v} and fallocate from x86 auto-generation list
>> Remove cancellation support for syscall generation
>>
>> ChangeLog | 462 +++++++++++++++++++++
>> catgets/open_catalog.c | 8 +-
>> csu/check_fds.c | 2 +-
>> gmon/gmon.c | 22 +-
>> iconv/gconv_cache.c | 6 +-
>> include/unistd.h | 2 -
>> intl/loadmsgcat.c | 6 +-
>> io/ftw.c | 8 +-
>> libio/fileops.c | 12 +-
>> libio/iopopen.c | 4 +-
>> locale/loadarchive.c | 12 +-
>> locale/loadlocale.c | 12 +-
>> login/utmp_file.c | 30 +-
>> misc/daemon.c | 6 +-
>> nptl/pthread_mutex_lock.c | 2 +-
>> nptl/pthread_mutex_timedlock.c | 2 +-
>> nscd/nscd_getai.c | 2 +-
>> nscd/nscd_getgr_r.c | 2 +-
>> nscd/nscd_gethst_r.c | 2 +-
>> nscd/nscd_getpw_r.c | 2 +-
>> nscd/nscd_getserv_r.c | 2 +-
>> nscd/nscd_helper.c | 4 +-
>> nscd/nscd_initgroups.c | 2 +-
>> nscd/nscd_netgroup.c | 4 +-
>> nss/nss_db/db-open.c | 4 +-
>> resolv/herror.c | 2 +-
>> resolv/res-close.c | 4 +-
>> stdio-common/psiginfo.c | 2 +-
>> sunrpc/pm_getmaps.c | 2 +-
>> sysdeps/generic/not-cancel.h | 40 +-
>> sysdeps/mach/hurd/opendir.c | 4 +-
>> sysdeps/mach/hurd/sigsuspend.c | 1 -
>> sysdeps/posix/closedir.c | 2 +-
>> sysdeps/posix/getaddrinfo.c | 4 +-
>> sysdeps/posix/getcwd.c | 8 +-
>> sysdeps/posix/libc_fatal.c | 2 +-
>> sysdeps/posix/opendir.c | 12 +-
>> sysdeps/posix/pause.c | 15 -
>> sysdeps/posix/spawni.c | 11 +-
>> sysdeps/unix/make-syscalls.sh | 4 -
>> sysdeps/unix/syscall-template.S | 7 +-
>> sysdeps/unix/sysv/linux/Versions | 2 +
>> sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h | 87 +---
>> sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h | 131 +-----
>> sysdeps/unix/sysv/linux/arm/sysdep-cancel.h | 197 +--------
>> sysdeps/unix/sysv/linux/check_native.c | 2 +-
>> sysdeps/unix/sysv/linux/check_pf.c | 2 +-
>> sysdeps/unix/sysv/linux/close.c | 12 +
>> sysdeps/unix/sysv/linux/fips-private.h | 6 +-
>> sysdeps/unix/sysv/linux/gethostid.c | 12 +-
>> sysdeps/unix/sysv/linux/getloadavg.c | 6 +-
>> sysdeps/unix/sysv/linux/getlogin_r.c | 6 +-
>> sysdeps/unix/sysv/linux/getsysstats.c | 16 +-
>> sysdeps/unix/sysv/linux/grantpt.c | 6 +-
>> sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h | 225 +---------
>> sysdeps/unix/sysv/linux/i386/smp.h | 6 +-
>> sysdeps/unix/sysv/linux/i386/sysdep-cancel.h | 119 +-----
>> sysdeps/unix/sysv/linux/ia64/has_cpuclock.c | 6 +-
>> sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h | 194 +--------
>> sysdeps/unix/sysv/linux/if_index.c | 6 +-
>> sysdeps/unix/sysv/linux/libc_fatal.c | 10 +-
>> sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h | 108 +----
>> sysdeps/unix/sysv/linux/malloc-sysdep.h | 8 +-
>> sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h | 116 +-----
>> .../unix/sysv/linux/mips/mips64/sysdep-cancel.h | 249 -----------
>> sysdeps/unix/sysv/linux/mips/sysdep-cancel.h | 159 +------
>> sysdeps/unix/sysv/linux/mq_notify.c | 2 +-
>> sysdeps/unix/sysv/linux/nanosleep.c | 9 +
>> sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h | 110 +----
>> sysdeps/unix/sysv/linux/not-cancel.h | 118 +++---
>> sysdeps/unix/sysv/linux/open.c | 21 +
>> sysdeps/unix/sysv/linux/open64.c | 38 +-
>> sysdeps/unix/sysv/linux/openat.c | 20 +
>> sysdeps/unix/sysv/linux/openat64.c | 36 +-
>> sysdeps/unix/sysv/linux/pause.c | 14 +-
>> sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c | 2 +-
>> .../sysv/linux/powerpc/powerpc32/sysdep-cancel.h | 118 ------
>> .../sysv/linux/powerpc/powerpc64/sysdep-cancel.h | 147 -------
>> sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h | 38 ++
>> sysdeps/unix/sysv/linux/pthread_getname.c | 6 +-
>> sysdeps/unix/sysv/linux/pthread_setname.c | 6 +-
>> sysdeps/unix/sysv/linux/read.c | 12 +
>> .../unix/sysv/linux/s390/s390-32/sysdep-cancel.h | 105 +----
>> .../unix/sysv/linux/s390/s390-64/sysdep-cancel.h | 109 +----
>> sysdeps/unix/sysv/linux/sh/sysdep-cancel.h | 136 +-----
>> .../unix/sysv/linux/sparc/sparc32/sysdep-cancel.h | 111 -----
>> .../unix/sysv/linux/sparc/sparc64/sysdep-cancel.h | 109 -----
>> sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h | 38 ++
>> sysdeps/unix/sysv/linux/spawni.c | 8 +-
>> sysdeps/unix/sysv/linux/sysconf.c | 6 +-
>> sysdeps/unix/sysv/linux/tile/sysdep-cancel.h | 123 +-----
>> sysdeps/unix/sysv/linux/waitpid.c | 15 +-
>> sysdeps/unix/sysv/linux/write.c | 12 +
>> sysdeps/unix/sysv/linux/x86_64/syscalls.list | 4 -
>> sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h | 62 +--
>> sysdeps/unix/sysv/linux/x86_64/sysdep.h | 251 ++++++-----
>> sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list | 1 -
>> sysdeps/unix/sysv/linux/x86_64/x32/times.c | 24 +-
>> 98 files changed, 1156 insertions(+), 3086 deletions(-)
>> delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
>> delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
>> delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
>> create mode 100644 sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
>> delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
>> delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
>> create mode 100644 sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
>>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v2 00/14] Remove sysdep-cancel assembly macro
2017-08-14 20:05 ` Adhemerval Zanella
@ 2017-08-15 4:28 ` Palmer Dabbelt
0 siblings, 0 replies; 37+ messages in thread
From: Palmer Dabbelt @ 2017-08-15 4:28 UTC (permalink / raw)
To: adhemerval.zanella; +Cc: libc-alpha
I assume you weren't really looking for my approval, but: this is good on the
RISC-V side, we always like having a smaller port where possible :).
Thanks for the heads up!
On Mon, 14 Aug 2017 13:04:50 PDT (-0700), adhemerval.zanella@linaro.org wrote:
> Ping (x2).
>
> On 09/08/2017 14:23, Adhemerval Zanella wrote:
>> Ping. x86 part got an ok from H.J.Lu and rest of the architectures
>> are not using the code to generate cancellable syscalls (new ports
>> may not implement sysdep-cancel.h currently as for current riscv
>> submission for instance).
>>
>> I would like to push it to continue on the cancellation fix for the
>> long standing bz 12683.
>>
>> On 03/08/2017 10:11, Adhemerval Zanella wrote:
>>> Change from previous version [1]
>>>
>>> * Optimize the loader build for open, read, write, openat, and close
>>> calls to alias the default variant to no cancel one since for rtld
>>> object they are essentially the same (SYSCALL_CANCEL ends up
>>> always calling INLINE_SYSCALL_CALL).
>>>
>>> * Use the same convention for no status variant (for instance
>>> __close_nocancel_nostatus) and change its return to void.
>>>
>>> * Cleanup non cancellable pause sligt more: removed __pause_nocancel
>>> declaration from unistd (since it is now declared on not-errno.h
>>> header) and removed generic implementation (since the header routes
>>> to default implementation).
>>>
>>> * Removed the unrequired alias for no cancel sigsuspend on hurd.
>>>
>>> ---
>>>
>>> This patchset finishes my previous work of Linux syscall consolidation
>>> and refactor to finally remove the requeriment of sysdeps-cancel.h
>>> assembly macros for cancellable syscalls. All ports now uses the
>>> SYSCALL_CANCEL macros with C implementation which in turn calls
>>> INLINE_SYSCALL macros.
>>>
>>> Besides simplify the curent code requirement, it also simplify
>>> possible future ports to require only the C bindings and the direct
>>> assembly one for syscalls.list autogeneration (another possible
>>> work for future would be to use C generate binding to simplify
>>> even further the syscall requirements).
>>>
>>> I checked with a build for mostly supported architecture:
>>> aarch64-linux-gnu, alpha-linux-gnu, arm-linux-gnueabhi, i686-linux-gnu,
>>> ia64-linux-gnu, m68k-linux-gnu, microblaze-linux-gnu,
>>> mips{64,64n32}-linux-gnu, nios2-linux-gnu, powerpc{64,64le}-linux-gnu,
>>> s390{x}-linux-gnu, sh4-linux-gnu{-soft}, tile{pro,gx}-linux-gnu{-32},
>>> sparc{v9,64}-linux-gnu, and x86_64-linux-gnu.
>>>
>>> I also run a full make check on real hardware on aarch64-linux-gnu,
>>> arm-linux-gnueabihf, i686-linux-gnu, powerpc{64le}-linux-gnu,
>>> sparc{v9,64}-linux-gnu, and x86_64-linux-gnu{-x32}.
>>>
>>> [1] https://sourceware.org/ml/libc-alpha/2017-07/msg00105.html
>>>
>>> Adhemerval Zanella (14):
>>> Consolidate non cancellable open call
>>> Consolidate non cancellable read call
>>> Consolidate non cancellable write call
>>> Consolidate non cancellable openat call
>>> Consolidate non cancellable close call
>>> Consolidate non cancellable writev call
>>> Consolidate non cancellable fcntl call
>>> Consolidate non cancellable waitpid call
>>> Consolidate non cancellable pause call
>>> Consolidate non cancellable nanosleep call
>>> Remove non cancellable sigsuspend definition
>>> Fix {INLINE,INTERNAL}_SYSCALL macros for x32
>>> Remove p{read,write}{v} and fallocate from x86 auto-generation list
>>> Remove cancellation support for syscall generation
>>>
>>> ChangeLog | 462 +++++++++++++++++++++
>>> catgets/open_catalog.c | 8 +-
>>> csu/check_fds.c | 2 +-
>>> gmon/gmon.c | 22 +-
>>> iconv/gconv_cache.c | 6 +-
>>> include/unistd.h | 2 -
>>> intl/loadmsgcat.c | 6 +-
>>> io/ftw.c | 8 +-
>>> libio/fileops.c | 12 +-
>>> libio/iopopen.c | 4 +-
>>> locale/loadarchive.c | 12 +-
>>> locale/loadlocale.c | 12 +-
>>> login/utmp_file.c | 30 +-
>>> misc/daemon.c | 6 +-
>>> nptl/pthread_mutex_lock.c | 2 +-
>>> nptl/pthread_mutex_timedlock.c | 2 +-
>>> nscd/nscd_getai.c | 2 +-
>>> nscd/nscd_getgr_r.c | 2 +-
>>> nscd/nscd_gethst_r.c | 2 +-
>>> nscd/nscd_getpw_r.c | 2 +-
>>> nscd/nscd_getserv_r.c | 2 +-
>>> nscd/nscd_helper.c | 4 +-
>>> nscd/nscd_initgroups.c | 2 +-
>>> nscd/nscd_netgroup.c | 4 +-
>>> nss/nss_db/db-open.c | 4 +-
>>> resolv/herror.c | 2 +-
>>> resolv/res-close.c | 4 +-
>>> stdio-common/psiginfo.c | 2 +-
>>> sunrpc/pm_getmaps.c | 2 +-
>>> sysdeps/generic/not-cancel.h | 40 +-
>>> sysdeps/mach/hurd/opendir.c | 4 +-
>>> sysdeps/mach/hurd/sigsuspend.c | 1 -
>>> sysdeps/posix/closedir.c | 2 +-
>>> sysdeps/posix/getaddrinfo.c | 4 +-
>>> sysdeps/posix/getcwd.c | 8 +-
>>> sysdeps/posix/libc_fatal.c | 2 +-
>>> sysdeps/posix/opendir.c | 12 +-
>>> sysdeps/posix/pause.c | 15 -
>>> sysdeps/posix/spawni.c | 11 +-
>>> sysdeps/unix/make-syscalls.sh | 4 -
>>> sysdeps/unix/syscall-template.S | 7 +-
>>> sysdeps/unix/sysv/linux/Versions | 2 +
>>> sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h | 87 +---
>>> sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h | 131 +-----
>>> sysdeps/unix/sysv/linux/arm/sysdep-cancel.h | 197 +--------
>>> sysdeps/unix/sysv/linux/check_native.c | 2 +-
>>> sysdeps/unix/sysv/linux/check_pf.c | 2 +-
>>> sysdeps/unix/sysv/linux/close.c | 12 +
>>> sysdeps/unix/sysv/linux/fips-private.h | 6 +-
>>> sysdeps/unix/sysv/linux/gethostid.c | 12 +-
>>> sysdeps/unix/sysv/linux/getloadavg.c | 6 +-
>>> sysdeps/unix/sysv/linux/getlogin_r.c | 6 +-
>>> sysdeps/unix/sysv/linux/getsysstats.c | 16 +-
>>> sysdeps/unix/sysv/linux/grantpt.c | 6 +-
>>> sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h | 225 +---------
>>> sysdeps/unix/sysv/linux/i386/smp.h | 6 +-
>>> sysdeps/unix/sysv/linux/i386/sysdep-cancel.h | 119 +-----
>>> sysdeps/unix/sysv/linux/ia64/has_cpuclock.c | 6 +-
>>> sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h | 194 +--------
>>> sysdeps/unix/sysv/linux/if_index.c | 6 +-
>>> sysdeps/unix/sysv/linux/libc_fatal.c | 10 +-
>>> sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h | 108 +----
>>> sysdeps/unix/sysv/linux/malloc-sysdep.h | 8 +-
>>> sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h | 116 +-----
>>> .../unix/sysv/linux/mips/mips64/sysdep-cancel.h | 249 -----------
>>> sysdeps/unix/sysv/linux/mips/sysdep-cancel.h | 159 +------
>>> sysdeps/unix/sysv/linux/mq_notify.c | 2 +-
>>> sysdeps/unix/sysv/linux/nanosleep.c | 9 +
>>> sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h | 110 +----
>>> sysdeps/unix/sysv/linux/not-cancel.h | 118 +++---
>>> sysdeps/unix/sysv/linux/open.c | 21 +
>>> sysdeps/unix/sysv/linux/open64.c | 38 +-
>>> sysdeps/unix/sysv/linux/openat.c | 20 +
>>> sysdeps/unix/sysv/linux/openat64.c | 36 +-
>>> sysdeps/unix/sysv/linux/pause.c | 14 +-
>>> sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c | 2 +-
>>> .../sysv/linux/powerpc/powerpc32/sysdep-cancel.h | 118 ------
>>> .../sysv/linux/powerpc/powerpc64/sysdep-cancel.h | 147 -------
>>> sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h | 38 ++
>>> sysdeps/unix/sysv/linux/pthread_getname.c | 6 +-
>>> sysdeps/unix/sysv/linux/pthread_setname.c | 6 +-
>>> sysdeps/unix/sysv/linux/read.c | 12 +
>>> .../unix/sysv/linux/s390/s390-32/sysdep-cancel.h | 105 +----
>>> .../unix/sysv/linux/s390/s390-64/sysdep-cancel.h | 109 +----
>>> sysdeps/unix/sysv/linux/sh/sysdep-cancel.h | 136 +-----
>>> .../unix/sysv/linux/sparc/sparc32/sysdep-cancel.h | 111 -----
>>> .../unix/sysv/linux/sparc/sparc64/sysdep-cancel.h | 109 -----
>>> sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h | 38 ++
>>> sysdeps/unix/sysv/linux/spawni.c | 8 +-
>>> sysdeps/unix/sysv/linux/sysconf.c | 6 +-
>>> sysdeps/unix/sysv/linux/tile/sysdep-cancel.h | 123 +-----
>>> sysdeps/unix/sysv/linux/waitpid.c | 15 +-
>>> sysdeps/unix/sysv/linux/write.c | 12 +
>>> sysdeps/unix/sysv/linux/x86_64/syscalls.list | 4 -
>>> sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h | 62 +--
>>> sysdeps/unix/sysv/linux/x86_64/sysdep.h | 251 ++++++-----
>>> sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list | 1 -
>>> sysdeps/unix/sysv/linux/x86_64/x32/times.c | 24 +-
>>> 98 files changed, 1156 insertions(+), 3086 deletions(-)
>>> delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
>>> delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
>>> delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
>>> create mode 100644 sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
>>> delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
>>> delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
>>> create mode 100644 sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
>>>
^ permalink raw reply [flat|nested] 37+ messages in thread