diff options
author | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2014-09-28 08:46:23 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2015-06-04 18:58:36 -0300 |
commit | c6bb095eb544aa32d3f4b8e9aa434d686915446e (patch) | |
tree | 3b7d6f14949912396eb394827b75ae131e53d937 /sysdeps/unix/sysv/linux/generic | |
parent | b65d3e5f0f452e86f81d21d59b065feeb31357be (diff) | |
download | glibc-c6bb095eb544aa32d3f4b8e9aa434d686915446e.tar glibc-c6bb095eb544aa32d3f4b8e9aa434d686915446e.tar.gz glibc-c6bb095eb544aa32d3f4b8e9aa434d686915446e.tar.bz2 glibc-c6bb095eb544aa32d3f4b8e9aa434d686915446e.zip |
nptl: Rewrite cancellation macros
This patch changes the way cancellation entrypoints are defined to
instead call the macro SYSCALL_CANCEL. An usual cnacellation definition
is defined as:
if (SINGLE_THREAD_P)
return INLINE_SYSCALL (syscall, NARGS, args...)
int oldtype = LIBC_CANCEL_ASYNC ();
return INLINE_SYSCALL (syscall, NARGS, args...)
LIBC_CANCEL_RESET (oldtype);
And it is rewrited as just:
SYSCALL_CANCEL (syscall, args...)
The idea is to remove LIBC_CANCEL_ASYNC/LIBC_CANCEL_RESET explicit
usage.
Tested on i386, x86_64, powerpc32, powerpc64le, arm, and aarch64.
* sysdeps/unix/sysdep.h [SYSCALL_CANCEL]: New macro: define
cancellable syscalls.
(SYS_ify): Add guard to no redefine it.
(INLINE_SYSCALL): Likewise.
* sysdeps/unix/sysv/linux/accept4.c (accept4): Remove
LIBC_CANCEL_ASYNC/INLINE_SYSCALL/LIBC_CANCEL_RESET and use
SYSCALL_CANCEL instead.
* sysdeps/unix/sysv/linux/alpha/fdatasync.c (__fdatasync): Likewise.
* sysdeps/unix/sysv/linux/arm/pread.c (__libc_pread): Likewise.
* sysdeps/unix/sysv/linux/arm/pread64.c (__libc_pread64): Likewise.
* sysdeps/unix/sysv/linux/arm/pwrite.c (__libc_pwrite): Likewise.
* sysdeps/unix/sysv/linux/arm/pwrite64.c (__libc_pwrite64): Likewise.
* sysdeps/unix/sysv/linux/epoll_pwait.c (epoll_pwait): Likewise.
* sysdeps/unix/sysv/linux/fallocate.c (fallocate): Likewise.
* sysdeps/unix/sysv/linux/fallocate64.c (fallocate64): Likewise.
* sysdeps/unix/sysv/linux/generic/open.c (__libc_open): Likewise.
* sysdeps/unix/sysv/linux/generic/open64.c (__libc_open64): Likewise.
* sysdeps/unix/sysv/linux/generic/pause.c (__libc_pause): Likewise.
* sysdeps/unix/sysv/linux/generic/poll.c (__poll): Likewise.
* sysdeps/unix/sysv/linux/generic/recv.c (__libc_recv): Likewise.
* sysdeps/unix/sysv/linux/generic/select.c (__select): Likewise.
* sysdeps/unix/sysv/linux/generic/send.c (__libc_send): Likewise.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pread.c (__libc_pread):
Likewise.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pread64.c
(__libc_pread64): Likewise.
* sysdeps/unix/sysv/linux/generic/wordsize-32/preadv.c
(__libc_preadv): Likewise.
* sysdeps/unix/sysv/linux/generic/wordsize-32/preadv64.c
(__libc_readv64): Likewise.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite.c
(__libc_pwrite): Likewise.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite64.c
(__libc_pwrite64): Likewise.
* sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev.c
(__libc_pwritev): Likewise.
* sysdeps/sysv/linux/generic/wordsize-32/pwritev64.c
(__libc_pwritev64): Likewise.
* sysdeps/unix/sysv/linux/i386/fcntl.c (__libc_fcntl): Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c
(sync_file_range): Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c (fallocate):
Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c (fallocate64):
Likewise.
* sysdeps/unix/sysv/linux/mips/pread.c (__libc_pread): Likewise.
* sysdeps/unix/sysv/linux/mips/pread64.c (__libc_pread64): Likewise.
* sysdeps/unix/sysv/linux/mips/pwrite.c (__libc_pwrite): Likewise.
* sysdeps/unix/sysv/linux/mips/pwrite64.c (__libc_pwrite64): Likewise.
* sysdeps/unix/sysv/linux/msgrcv.c (__libc_msgrcv): Likewise.
* sysdeps/unix/sysv/linux/msgsnd.c (__libc_msgsnd): Likewise.
* sysdeps/unix/sysv/linux/open64.c (__libc_open64): Likewise.
* sysdeps/unix/sysv/linux/openat.c (__libc_openat): Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c (__libc_pread):
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c
(__libc_read64): Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c (__libc_write):
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c (__libc_write64):
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c (__libc_fcntl):
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c (__libc_pread):
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c
(__libc_pread64): Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c (__libc_pwrite):
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c
(__libc_pwrite64): Likewise.
* sysdeps/sysv/linux/powerpc/powerpc64/sync_file_range.c
(sync_file_range): Likewise.
* sysdeps/unix/sysv/linux/ppoll.c (ppoll): Likewise.
* sysdeps/unix/sysv/linux/pread.c (__libc_pread): Likewise.
* sysdeps/unix/sysv/linux/pread64.c (__libc_pread64): Likewise.
* sysdeps/unix/sysv/linux/preadv.c (__libc_preadv): Likewise.
* sysdeps/unix/sysv/linux/pselect.c (__pselect): Likewise.
* sysdeps/unix/sysv/linux/pwrite.c (__libc_pwrite): Likewise.
* sysdeps/unix/sysv/linux/pwrite64.c (__libc_pwrite64): Likewise.
* sysdeps/unix/sysv/linux/pwritev.c (PWRITEV): Likewise.
* sysdeps/unix/sysv/linux/readv.c (__libc_readv): Likewise.
* sysdeps/unix/sysv/linux/recvmmsg.c (recvmmsg): Likewise.
* sysdeps/unix/sysv/linux/sendmmsg.c (sendmmsg): Likewise.
* sysdeps/unix/sysv/linux/sh/pread.c (__libc_pread): Likewise.
* sysdeps/unix/sysv/linux/sh/pread64.c (__libc_pread64): Likewise.
* sysdeps/unix/sysv/linux/sh/pwrite.c (__libc_pwrite): Likewise.
* sysdeps/unix/sysv/linux/sh/pwrite64.c (__libc_pwrite64): Likewise.
* sysdeps/unix/sysv/linux/sigsuspend.c (__sigsuspend): Likewise.
* sysdeps/unix/sysv/linux/sigtimedwait.c (__sigtimedwait): Likewise.
* sysdeps/unix/sysv/linux/sigwaitinfo.c (__sigwaitinfo): Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c (__libc_msgrcv):
Likewise.
* sysdeps/unix/sysv/linux/sync_file_range.c (sync_file_range):
Likewise.
* sysdeps/unix/sysv/linux/tcdrain.c (__libc_tcdrain): Likewise.
* sysdeps/unix/sysv/linux/timer_routines.c (timer_helper_thread):
Likewise.
* sysdeps/unix/sysv/linux/wait.c (__libc_wait): Likewise.
* sysdeps/unix/sysv/linux/waitid.c (__waitid): Likewise.
* sysdeps/unix/sysv/linux/waitpid.c (__libc_waitpid): Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/fallocate.c (fallocate):
Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/preadv.c (preadv): Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/pwritev.c (pwritev): Likewise.
* sysdeps/unix/sysv/linux/writev.c (__libc_writev): Likewise.
* sysdeps/unix/sysv/linux/x86_64/recv.c (__libc_recv): Likewise.
* sysdeps/unix/sysv/linux/x86_64/send.c (__libc_send): Likewise.
Diffstat (limited to 'sysdeps/unix/sysv/linux/generic')
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/open.c | 11 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/open64.c | 13 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/pause.c | 32 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/poll.c | 11 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/recv.c | 18 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/select.c | 16 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/send.c | 15 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/sysdep.h | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/wordsize-32/pread.c | 21 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/wordsize-32/pread64.c | 24 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/wordsize-32/preadv.c | 21 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/wordsize-32/preadv64.c | 22 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite.c | 23 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite64.c | 24 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev.c | 23 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev64.c | 25 |
16 files changed, 38 insertions, 262 deletions
diff --git a/sysdeps/unix/sysv/linux/generic/open.c b/sysdeps/unix/sysv/linux/generic/open.c index 289f57aada..66cc2edf4b 100644 --- a/sysdeps/unix/sysv/linux/generic/open.c +++ b/sysdeps/unix/sysv/linux/generic/open.c @@ -37,16 +37,7 @@ __libc_open (const char *file, int oflag, ...) va_end (arg); } - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (openat, 4, AT_FDCWD, file, oflag, mode); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = INLINE_SYSCALL (openat, 4, AT_FDCWD, file, oflag, mode); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (openat, AT_FDCWD, file, oflag, mode); } libc_hidden_def (__libc_open) diff --git a/sysdeps/unix/sysv/linux/generic/open64.c b/sysdeps/unix/sysv/linux/generic/open64.c index 374e41cf3a..402bc7cd7f 100644 --- a/sysdeps/unix/sysv/linux/generic/open64.c +++ b/sysdeps/unix/sysv/linux/generic/open64.c @@ -37,18 +37,7 @@ __libc_open64 (const char *file, int oflag, ...) va_end (arg); } - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (openat, 4, AT_FDCWD, file, - oflag | O_LARGEFILE, mode); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = INLINE_SYSCALL (openat, 4, AT_FDCWD, file, - oflag | O_LARGEFILE, mode); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (openat, AT_FDCWD, file, oflag | O_LARGEFILE, mode); } weak_alias (__libc_open64, __open64) libc_hidden_weak (__open64) diff --git a/sysdeps/unix/sysv/linux/generic/pause.c b/sysdeps/unix/sysv/linux/generic/pause.c index 7966df2499..45d3a0eb21 100644 --- a/sysdeps/unix/sysv/linux/generic/pause.c +++ b/sysdeps/unix/sysv/linux/generic/pause.c @@ -23,41 +23,17 @@ /* Suspend the process until a signal arrives. This always returns -1 and sets errno to EINTR. */ -static int -__syscall_pause (void) +int +__libc_pause (void) { sigset_t set; int rc = - INLINE_SYSCALL (rt_sigprocmask, 4, SIG_BLOCK, NULL, &set, _NSIG / 8); + SYSCALL_CANCEL (rt_sigprocmask, SIG_BLOCK, NULL, &set, _NSIG / 8); if (rc == 0) - rc = INLINE_SYSCALL (rt_sigsuspend, 2, &set, _NSIG / 8); + rc = SYSCALL_CANCEL (rt_sigsuspend, &set, _NSIG / 8); return rc; } -int -__libc_pause (void) -{ - if (SINGLE_THREAD_P) - return __syscall_pause (); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = __syscall_pause (); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} weak_alias (__libc_pause, pause) - -#ifndef NO_CANCELLATION -# include <not-cancel.h> - -int -__pause_nocancel (void) -{ - return __syscall_pause (); -} -#endif diff --git a/sysdeps/unix/sysv/linux/generic/poll.c b/sysdeps/unix/sysv/linux/generic/poll.c index 7ef42f37ea..2a95796d68 100644 --- a/sysdeps/unix/sysv/linux/generic/poll.c +++ b/sysdeps/unix/sysv/linux/generic/poll.c @@ -35,16 +35,7 @@ __poll (struct pollfd *fds, nfds_t nfds, int timeout) timeout_ts_p = &timeout_ts; } - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (ppoll, 5, fds, nfds, timeout_ts_p, NULL, 0); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = INLINE_SYSCALL (ppoll, 5, fds, nfds, timeout_ts_p, NULL, 0); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (ppoll, fds, nfds, timeout_ts_p, NULL, 0); } libc_hidden_def (__poll) weak_alias (__poll, poll) diff --git a/sysdeps/unix/sysv/linux/generic/recv.c b/sysdeps/unix/sysv/linux/generic/recv.c index d827b3ea21..37861721e7 100644 --- a/sysdeps/unix/sysv/linux/generic/recv.c +++ b/sysdeps/unix/sysv/linux/generic/recv.c @@ -24,22 +24,8 @@ ssize_t __libc_recv (int sockfd, void *buffer, size_t len, int flags) { - ssize_t result; - - if (SINGLE_THREAD_P) - result = INLINE_SYSCALL (recvfrom, 6, sockfd, buffer, len, flags, - NULL, NULL); - else - { - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (recvfrom, 6, sockfd, buffer, len, flags, - NULL, NULL); - - LIBC_CANCEL_RESET (oldtype); - } - - return result; + return SYSCALL_CANCEL (recvfrom, sockfd, buffer, len, flags, + NULL, NULL); } strong_alias (__libc_recv, __recv) weak_alias (__libc_recv, recv) diff --git a/sysdeps/unix/sysv/linux/generic/select.c b/sysdeps/unix/sysv/linux/generic/select.c index 455c308f13..f7f1e18d4d 100644 --- a/sysdeps/unix/sysv/linux/generic/select.c +++ b/sysdeps/unix/sysv/linux/generic/select.c @@ -42,20 +42,8 @@ __select(int nfds, fd_set *readfds, tsp = &ts; } - if (SINGLE_THREAD_P) - { - result = INLINE_SYSCALL (pselect6, 6, nfds, readfds, writefds, exceptfds, - tsp, NULL); - } - else - { - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (pselect6, 6, nfds, readfds, writefds, exceptfds, - tsp, NULL); - - LIBC_CANCEL_RESET (oldtype); - } + result = SYSCALL_CANCEL (pselect6, nfds, readfds, writefds, exceptfds, tsp, + NULL); if (timeout) { diff --git a/sysdeps/unix/sysv/linux/generic/send.c b/sysdeps/unix/sysv/linux/generic/send.c index dfbdc091ff..fed69613e1 100644 --- a/sysdeps/unix/sysv/linux/generic/send.c +++ b/sysdeps/unix/sysv/linux/generic/send.c @@ -24,20 +24,7 @@ ssize_t __libc_send (int sockfd, const void *buffer, size_t len, int flags) { - ssize_t result; - - if (SINGLE_THREAD_P) - result = INLINE_SYSCALL (sendto, 6, sockfd, buffer, len, flags, NULL, 0); - else - { - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (sendto, 6, sockfd, buffer, len, flags, NULL, 0); - - LIBC_CANCEL_RESET (oldtype); - } - - return result; + return SYSCALL_CANCEL (sendto, sockfd, buffer, len, flags, NULL, 0); } strong_alias (__libc_send, __send) weak_alias (__libc_send, send) diff --git a/sysdeps/unix/sysv/linux/generic/sysdep.h b/sysdeps/unix/sysv/linux/generic/sysdep.h index 160804cd9e..11da9d21df 100644 --- a/sysdeps/unix/sysv/linux/generic/sysdep.h +++ b/sysdeps/unix/sysv/linux/generic/sysdep.h @@ -18,6 +18,7 @@ #include <bits/wordsize.h> #include <kernel-features.h> +#include <sysdeps/unix/sysdep.h> /* Provide the common name to allow more code reuse. */ #define __NR__llseek __NR_llseek diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/pread.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/pread.c index ad97e97135..6f9703cc21 100644 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/pread.c +++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/pread.c @@ -25,28 +25,13 @@ #include <sysdep-cancel.h> #include <sys/syscall.h> -static ssize_t -do_pread (int fd, void *buf, size_t count, off_t offset) +ssize_t +__libc_pread (int fd, void *buf, size_t count, off_t offset) { assert (sizeof (offset) == 4); - return INLINE_SYSCALL (pread64, __ALIGNMENT_COUNT (5, 6), fd, + return SYSCALL_CANCEL (pread64, fd, buf, count, __ALIGNMENT_ARG __LONG_LONG_PAIR (offset >> 31, offset)); } - -ssize_t -__libc_pread (int fd, void *buf, size_t count, off_t offset) -{ - if (SINGLE_THREAD_P) - return do_pread (fd, buf, count, offset); - - int oldtype = LIBC_CANCEL_ASYNC (); - - ssize_t result = do_pread (fd, buf, count, offset); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} strong_alias (__libc_pread, __pread) weak_alias (__libc_pread, pread) diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/pread64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/pread64.c index 7250893297..a3f8ec1caa 100644 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/pread64.c +++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/pread64.c @@ -24,29 +24,11 @@ #include <sysdep-cancel.h> #include <sys/syscall.h> -static ssize_t -do_pread64 (int fd, void *buf, size_t count, off64_t offset) -{ - return INLINE_SYSCALL (pread64, __ALIGNMENT_COUNT (5, 6), fd, - buf, count, __ALIGNMENT_ARG - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); -} - - ssize_t __libc_pread64 (int fd, void *buf, size_t count, off64_t offset) { - if (SINGLE_THREAD_P) - return do_pread64 (fd, buf, count, offset); - - int oldtype = LIBC_CANCEL_ASYNC (); - - ssize_t result = do_pread64 (fd, buf, count, offset); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pread64, fd, buf, count, __ALIGNMENT_ARG + __LONG_LONG_PAIR ((off_t) (offset >> 32), + (off_t) (offset & 0xffffffff))); } - weak_alias (__libc_pread64, __pread64) weak_alias (__libc_pread64, pread64) diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/preadv.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/preadv.c index 9a1832a854..d127fee927 100644 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/preadv.c +++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/preadv.c @@ -26,28 +26,13 @@ #include <sysdep-cancel.h> #include <sys/syscall.h> -static ssize_t -do_preadv (int fd, const struct iovec *vector, int count, off_t offset) +ssize_t +__libc_preadv (int fd, const struct iovec *vector, int count, off_t offset) { assert (sizeof (offset) == 4); - return INLINE_SYSCALL (preadv, __ALIGNMENT_COUNT (5, 6), fd, + return SYSCALL_CANCEL (preadv, fd, vector, count, __ALIGNMENT_ARG __LONG_LONG_PAIR (offset >> 31, offset)); } - -ssize_t -__libc_preadv (int fd, const struct iovec *vector, int count, off_t offset) -{ - if (SINGLE_THREAD_P) - return do_preadv (fd, vector, count, offset); - - int oldtype = LIBC_CANCEL_ASYNC (); - - ssize_t result = do_preadv (fd, vector, count, offset); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} strong_alias (__libc_preadv, __preadv) weak_alias (__libc_preadv, preadv) diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/preadv64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/preadv64.c index df1c010a70..7e7ebf740f 100644 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/preadv64.c +++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/preadv64.c @@ -25,30 +25,14 @@ #include <sysdep-cancel.h> #include <sys/syscall.h> -static ssize_t -do_preadv64 (int fd, const struct iovec *vector, int count, off64_t offset) +ssize_t +__libc_preadv64 (int fd, const struct iovec *vector, int count, off64_t offset) { - return INLINE_SYSCALL (preadv, __ALIGNMENT_COUNT (5, 6), fd, + return SYSCALL_CANCEL (preadv, fd, vector, count, __ALIGNMENT_ARG __LONG_LONG_PAIR ((off_t) (offset >> 32), (off_t) (offset & 0xffffffff))); } - -ssize_t -__libc_preadv64 (int fd, const struct iovec *vector, int count, off64_t offset) -{ - if (SINGLE_THREAD_P) - return do_preadv64 (fd, vector, count, offset); - - int oldtype = LIBC_CANCEL_ASYNC (); - - ssize_t result = do_preadv64 (fd, vector, count, offset); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} - strong_alias (__libc_preadv64, __preadv64) weak_alias (__libc_preadv64, preadv64) diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite.c index e897c7d6ad..2f0f7a1747 100644 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite.c +++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite.c @@ -25,29 +25,12 @@ #include <sysdep-cancel.h> #include <sys/syscall.h> -static ssize_t -do_pwrite (int fd, const void *buf, size_t count, off_t offset) -{ - assert (sizeof (offset) == 4); - return INLINE_SYSCALL (pwrite64, __ALIGNMENT_COUNT (5, 6), fd, - buf, count, __ALIGNMENT_ARG - __LONG_LONG_PAIR (offset >> 31, offset)); -} - - ssize_t __libc_pwrite (int fd, const void *buf, size_t count, off_t offset) { - if (SINGLE_THREAD_P) - return do_pwrite (fd, buf, count, offset); - - int oldtype = LIBC_CANCEL_ASYNC (); - - ssize_t result = do_pwrite (fd, buf, count, offset); - - LIBC_CANCEL_RESET (oldtype); - - return result; + assert (sizeof (offset) == 4); + return SYSCALL_CANCEL (pwrite64, fd, buf, count, __ALIGNMENT_ARG + __LONG_LONG_PAIR (offset >> 31, offset)); } strong_alias (__libc_pwrite, __pwrite) weak_alias (__libc_pwrite, pwrite) diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite64.c index 3ac1339b9a..f222016e0f 100644 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite64.c +++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite64.c @@ -24,30 +24,12 @@ #include <sysdep-cancel.h> #include <sys/syscall.h> -static ssize_t -do_pwrite64 (int fd, const void *buf, size_t count, off64_t offset) -{ - return INLINE_SYSCALL (pwrite64, __ALIGNMENT_COUNT (5, 6), fd, - buf, count, __ALIGNMENT_ARG - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); -} - - ssize_t __libc_pwrite64 (int fd, const void *buf, size_t count, off64_t offset) { - if (SINGLE_THREAD_P) - return do_pwrite64 (fd, buf, count, offset); - - int oldtype = LIBC_CANCEL_ASYNC (); - - ssize_t result = do_pwrite64 (fd, buf, count, offset); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pwrite64, fd, buf, count, __ALIGNMENT_ARG + __LONG_LONG_PAIR ((off_t) (offset >> 32), + (off_t) (offset & 0xffffffff))); } - weak_alias (__libc_pwrite64, __pwrite64) libc_hidden_weak (__pwrite64) weak_alias (__libc_pwrite64, pwrite64) diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev.c index db1e4cb5d2..273b0ffb47 100644 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev.c +++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev.c @@ -26,29 +26,12 @@ #include <sysdep-cancel.h> #include <sys/syscall.h> -static ssize_t -do_pwritev (int fd, const struct iovec *vector, int count, off_t offset) -{ - assert (sizeof (offset) == 4); - return INLINE_SYSCALL (pwritev, __ALIGNMENT_COUNT (5, 6), fd, - vector, count, __ALIGNMENT_ARG - __LONG_LONG_PAIR (offset >> 31, offset)); -} - - ssize_t __libc_pwritev (int fd, const struct iovec *vector, int count, off_t offset) { - if (SINGLE_THREAD_P) - return do_pwritev (fd, vector, count, offset); - - int oldtype = LIBC_CANCEL_ASYNC (); - - ssize_t result = do_pwritev (fd, vector, count, offset); - - LIBC_CANCEL_RESET (oldtype); - - return result; + assert (sizeof (offset) == 4); + return SYSCALL_CANCEL (pwritev, fd, vector, count, __ALIGNMENT_ARG + __LONG_LONG_PAIR (offset >> 31, offset)); } strong_alias (__libc_pwritev, __pwritev) weak_alias (__libc_pwritev, pwritev) diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev64.c index eb85e079d7..9d3fa75c7a 100644 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev64.c +++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev64.c @@ -25,31 +25,14 @@ #include <sysdep-cancel.h> #include <sys/syscall.h> -static ssize_t -do_pwritev64 (int fd, const struct iovec *vector, int count, off64_t offset) -{ - return INLINE_SYSCALL (pwritev, __ALIGNMENT_COUNT (5, 6), fd, - vector, count, __ALIGNMENT_ARG - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); -} - - ssize_t __libc_pwritev64 (int fd, const struct iovec *vector, int count, off64_t offset) { - if (SINGLE_THREAD_P) - return do_pwritev64 (fd, vector, count, offset); - - int oldtype = LIBC_CANCEL_ASYNC (); - - ssize_t result = do_pwritev64 (fd, vector, count, offset); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pwritev, fd, + vector, count, __ALIGNMENT_ARG + __LONG_LONG_PAIR ((off_t) (offset >> 32), + (off_t) (offset & 0xffffffff))); } - strong_alias (__libc_pwritev64, pwritev64) weak_alias (__libc_pwritev64, __pwritev64) |