Message ID | 555C95DD.1050705@linaro.org |
---|---|
State | New |
Headers | show |
Ping (this is a refactor patch). On 20-05-2015 11:10, Adhemerval Zanella wrote: > Hi > > This patch is another of the required adjustments for the fix for bz12683 > (Race conditions in pthread cancellation) and the idea is to remove > LIBC_CANCEL_ASYNC/LIBC_CANCEL_RESET explicit usage. > > This patch changes the way cancellation entrypoints are defined to > instead call the macro SYSCALL_CANCEL. An usual cancellation 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...) > > 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. > > -- > > diff --git a/sysdeps/unix/sysdep.h b/sysdeps/unix/sysdep.h > index 5fa6580..52dad58 100644 > --- a/sysdeps/unix/sysdep.h > +++ b/sysdeps/unix/sysdep.h > @@ -24,6 +24,27 @@ > #define SYSCALL__(name, args) PSEUDO (__##name, name, args) > #define SYSCALL(name, args) PSEUDO (name, name, args) > > +/* Cancellation macros. */ > +#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,n,...) n > +#define __SYSCALL_NARGS(...) \ > + __SYSCALL_NARGS_X (__VA_ARGS__, 7, 6, 5, 4, 3, 2, 1, 0,) > + > +#define SYSCALL_CANCEL(name, ...) \ > + ({ \ > + long int sc_ret; \ > + if (SINGLE_THREAD_P) \ > + sc_ret = INLINE_SYSCALL (name, __SYSCALL_NARGS(__VA_ARGS__), \ > + __VA_ARGS__); \ > + else \ > + { \ > + int sc_cancel_oldtype = LIBC_CANCEL_ASYNC (); \ > + sc_ret = INLINE_SYSCALL (name, __SYSCALL_NARGS (__VA_ARGS__), \ > + __VA_ARGS__); \ > + LIBC_CANCEL_RESET (sc_cancel_oldtype); \ > + } \ > + sc_ret; \ > + }) > + > /* Machine-dependent sysdep.h files are expected to define the macro > PSEUDO (function_name, syscall_name) to emit assembly code to define the > C-callable function FUNCTION_NAME to do system call SYSCALL_NAME. > @@ -31,7 +52,9 @@ > an instruction such that "MOVE(r1, r0)" works. ret should be defined > as the return instruction. */ > > +#ifndef SYS_ify > #define SYS_ify(syscall_name) SYS_##syscall_name > +#endif > > /* Terminate a system call named SYM. This is used on some platforms > to generate correct debugging information. */ > @@ -47,4 +70,6 @@ > > /* Wrappers around system calls should normally inline the system call code. > But sometimes it is not possible or implemented and we use this code. */ > +#ifndef INLINE_SYSCALL > #define INLINE_SYSCALL(name, nr, args...) __syscall_##name (args) > +#endif > diff --git a/sysdeps/unix/sysv/linux/accept4.c b/sysdeps/unix/sysv/linux/accept4.c > index 8e70b81..59293f9 100644 > --- a/sysdeps/unix/sysv/linux/accept4.c > +++ b/sysdeps/unix/sysv/linux/accept4.c > @@ -37,17 +37,7 @@ > int > accept4 (int fd, __SOCKADDR_ARG addr, socklen_t *addr_len, int flags) > { > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (accept4, 4, fd, addr.__sockaddr__, addr_len, flags); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - int result = INLINE_SYSCALL (accept4, 4, fd, addr.__sockaddr__, addr_len, > - flags); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (accept4, fd, addr.__sockaddr__, addr_len, flags); > } > #elif defined __NR_socketcall > # include <socketcall.h> > diff --git a/sysdeps/unix/sysv/linux/alpha/fdatasync.c b/sysdeps/unix/sysv/linux/alpha/fdatasync.c > index c9424e2..c8b711e 100644 > --- a/sysdeps/unix/sysv/linux/alpha/fdatasync.c > +++ b/sysdeps/unix/sysv/linux/alpha/fdatasync.c > @@ -26,39 +26,23 @@ > > #include <kernel-features.h> > > -static int > -do_fdatasync (int fd) > +int > +__fdatasync (int fd) > { > #ifdef __ASSUME_FDATASYNC > - return INLINE_SYSCALL (fdatasync, 1, fd); > + return SYSCALL_CANCEL (fdatasync, fd); > #elif defined __NR_fdatasync > static int __have_no_fdatasync; > > if (!__builtin_expect (__have_no_fdatasync, 0)) > { > - int result = INLINE_SYSCALL (fdatasync, 1, fd); > + int result = SYSCALL_CANCEL (fdatasync, fd); > if (__builtin_expect (result, 0) != -1 || errno != ENOSYS) > return result; > > __have_no_fdatasync = 1; > } > #endif > - return INLINE_SYSCALL (fsync, 1, fd); > -} > - > -int > -__fdatasync (int fd) > -{ > - if (SINGLE_THREAD_P) > - return do_fdatasync (fd); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - int result = do_fdatasync (fd); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (fsync, fd); > } > - > weak_alias (__fdatasync, fdatasync) > diff --git a/sysdeps/unix/sysv/linux/arm/pread.c b/sysdeps/unix/sysv/linux/arm/pread.c > index 64bc0a1..91b3c66 100644 > --- a/sysdeps/unix/sysv/linux/arm/pread.c > +++ b/sysdeps/unix/sysv/linux/arm/pread.c > @@ -26,28 +26,10 @@ > ssize_t > __libc_pread (int fd, void *buf, size_t count, off_t offset) > { > - ssize_t result; > - > - if (SINGLE_THREAD_P) > - { > - /* In the ARM EABI, 64-bit values are aligned to even/odd register > - pairs for syscalls. */ > - result = INLINE_SYSCALL (pread64, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR (offset >> 31, offset)); > - > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > /* In the ARM EABI, 64-bit values are aligned to even/odd register > pairs for syscalls. */ > - result = INLINE_SYSCALL (pread64, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR (offset >> 31, offset)); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (pread64, fd, buf, count, 0, > + __LONG_LONG_PAIR (offset >> 31, offset)); > } > > strong_alias (__libc_pread, __pread) > diff --git a/sysdeps/unix/sysv/linux/arm/pread64.c b/sysdeps/unix/sysv/linux/arm/pread64.c > index 7860699..ca71feb 100644 > --- a/sysdeps/unix/sysv/linux/arm/pread64.c > +++ b/sysdeps/unix/sysv/linux/arm/pread64.c > @@ -26,30 +26,11 @@ > ssize_t > __libc_pread64 (int fd, void *buf, size_t count, off64_t offset) > { > - ssize_t result; > - > - if (SINGLE_THREAD_P) > - { > - /* In the ARM EABI, 64-bit values are aligned to even/odd register > - pairs for syscalls. */ > - result = INLINE_SYSCALL (pread64, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > - > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > /* In the ARM EABI, 64-bit values are aligned to even/odd register > pairs for syscalls. */ > - result = INLINE_SYSCALL (pread64, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (pread64, fd, buf, count, 0, > + __LONG_LONG_PAIR ((off_t) (offset >> 32), > + (off_t) (offset & 0xffffffff))); > } > > weak_alias (__libc_pread64, __pread64) > diff --git a/sysdeps/unix/sysv/linux/arm/pwrite.c b/sysdeps/unix/sysv/linux/arm/pwrite.c > index 11a963c..e22e112 100644 > --- a/sysdeps/unix/sysv/linux/arm/pwrite.c > +++ b/sysdeps/unix/sysv/linux/arm/pwrite.c > @@ -26,28 +26,10 @@ > ssize_t > __libc_pwrite (int fd, const void *buf, size_t count, off_t offset) > { > - ssize_t result; > - > - if (SINGLE_THREAD_P) > - { > - /* In the ARM EABI, 64-bit values are aligned to even/odd register > - pairs for syscalls. */ > - result = INLINE_SYSCALL (pwrite64, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR (offset >> 31, offset)); > - > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > /* In the ARM EABI, 64-bit values are aligned to even/odd register > pairs for syscalls. */ > - result = INLINE_SYSCALL (pwrite64, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR (offset >> 31, offset)); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (pwrite64, fd, buf, count, 0, > + __LONG_LONG_PAIR (offset >> 31, offset)); > } > > strong_alias (__libc_pwrite, __pwrite) > diff --git a/sysdeps/unix/sysv/linux/arm/pwrite64.c b/sysdeps/unix/sysv/linux/arm/pwrite64.c > index 9cb67ff..b63fbc8 100644 > --- a/sysdeps/unix/sysv/linux/arm/pwrite64.c > +++ b/sysdeps/unix/sysv/linux/arm/pwrite64.c > @@ -26,30 +26,11 @@ > ssize_t > __libc_pwrite64 (int fd, const void *buf, size_t count, off64_t offset) > { > - ssize_t result; > - > - if (SINGLE_THREAD_P) > - { > - /* In the ARM EABI, 64-bit values are aligned to even/odd register > - pairs for syscalls. */ > - result = INLINE_SYSCALL (pwrite64, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > - > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > /* In the ARM EABI, 64-bit values are aligned to even/odd register > pairs for syscalls. */ > - result = INLINE_SYSCALL (pwrite64, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (pwrite64, fd, buf, count, 0, > + __LONG_LONG_PAIR ((off_t) (offset >> 32), > + (off_t) (offset & 0xffffffff))); > } > > weak_alias (__libc_pwrite64, __pwrite64) > diff --git a/sysdeps/unix/sysv/linux/epoll_pwait.c b/sysdeps/unix/sysv/linux/epoll_pwait.c > index 65fefec..0e39013 100644 > --- a/sysdeps/unix/sysv/linux/epoll_pwait.c > +++ b/sysdeps/unix/sysv/linux/epoll_pwait.c > @@ -39,18 +39,8 @@ int epoll_pwait (int epfd, struct epoll_event *events, > int maxevents, int timeout, > const sigset_t *set) > { > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (epoll_pwait, 6, epfd, events, maxevents, timeout, > - set, _NSIG / 8); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - int result = INLINE_SYSCALL (epoll_pwait, 6, epfd, events, maxevents, > - timeout, set, _NSIG / 8); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (epoll_pwait, epfd, events, maxevents, > + timeout, set, _NSIG / 8); > } > > #else > diff --git a/sysdeps/unix/sysv/linux/fallocate.c b/sysdeps/unix/sysv/linux/fallocate.c > index e9668bf..f3de90c 100644 > --- a/sysdeps/unix/sysv/linux/fallocate.c > +++ b/sysdeps/unix/sysv/linux/fallocate.c > @@ -25,21 +25,9 @@ int > fallocate (int fd, int mode, __off_t offset, __off_t len) > { > #ifdef __NR_fallocate > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (fallocate, 6, fd, mode, > - __LONG_LONG_PAIR (offset >> 31, offset), > - __LONG_LONG_PAIR (len >> 31, len)); > - > - int result; > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (fallocate, 6, fd, mode, > - __LONG_LONG_PAIR (offset >> 31, offset), > - __LONG_LONG_PAIR (len >> 31, len)); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (fallocate, fd, mode, > + __LONG_LONG_PAIR (offset >> 31, offset), > + __LONG_LONG_PAIR (len >> 31, len)); > #else > __set_errno (ENOSYS); > return -1; > diff --git a/sysdeps/unix/sysv/linux/fallocate64.c b/sysdeps/unix/sysv/linux/fallocate64.c > index 96acb28..191fa57 100644 > --- a/sysdeps/unix/sysv/linux/fallocate64.c > +++ b/sysdeps/unix/sysv/linux/fallocate64.c > @@ -25,25 +25,11 @@ int > fallocate64 (int fd, int mode, __off64_t offset, __off64_t len) > { > #ifdef __NR_fallocate > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (fallocate, 6, fd, mode, > - __LONG_LONG_PAIR ((long int) (offset >> 32), > - (long int) offset), > - __LONG_LONG_PAIR ((long int) (len >> 32), > - (long int) len)); > - > - int result; > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (fallocate, 6, fd, mode, > - __LONG_LONG_PAIR ((long int) (offset >> 32), > - (long int) offset), > - __LONG_LONG_PAIR ((long int) (len >> 32), > - (long int) len)); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (fallocate, fd, mode, > + __LONG_LONG_PAIR ((long int) (offset >> 32), > + (long int) offset), > + __LONG_LONG_PAIR ((long int) (len >> 32), > + (long int) len)); > #else > __set_errno (ENOSYS); > return -1; > diff --git a/sysdeps/unix/sysv/linux/generic/open.c b/sysdeps/unix/sysv/linux/generic/open.c > index 289f57a..66cc2ed 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 374e41c..402bc7c 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 7966df2..45d3a0e 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 7ef42f3..2a95796 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 d827b3e..3786172 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 455c308..f7f1e18 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 dfbdc09..fed6961 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 160804c..11da9d2 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 ad97e97..6f9703c 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 7250893..a3f8ec1 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 9a1832a..d127fee 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 df1c010..7e7ebf7 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 e897c7d..2f0f7a1 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 3ac1339..f222016 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 db1e4cb..273b0ff 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 eb85e07..9d3fa75 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) > diff --git a/sysdeps/unix/sysv/linux/i386/fcntl.c b/sysdeps/unix/sysv/linux/i386/fcntl.c > index 9132c5a..56f4bd1 100644 > --- a/sysdeps/unix/sysv/linux/i386/fcntl.c > +++ b/sysdeps/unix/sysv/linux/i386/fcntl.c > @@ -49,16 +49,10 @@ __libc_fcntl (int fd, int cmd, ...) > arg = va_arg (ap, void *); > va_end (ap); > > - if (SINGLE_THREAD_P || (cmd != F_SETLKW && cmd != F_SETLKW64)) > + if ((cmd != F_SETLKW) && (cmd != F_SETLKW64)) > return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg); > > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - int result = INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (fcntl64, fd, cmd, arg); > } > libc_hidden_def (__libc_fcntl) > > diff --git a/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c b/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c > index 3c91d15..b79e44d 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c > +++ b/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c > @@ -28,23 +28,10 @@ > int > sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) > { > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (sync_file_range, 7, fd, 0, > - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), > - __LONG_LONG_PAIR ((long) (to >> 32), (long) to), > - flags); > - > - int result; > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (sync_file_range, 7, fd, 0, > - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), > - __LONG_LONG_PAIR ((long) (to >> 32), (long) to), > - flags); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (sync_file_range, fd, 0, > + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), > + __LONG_LONG_PAIR ((long) (to >> 32), (long) to), > + flags); > } > #else > int > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c > index 2331cec..ce29a0e 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c > +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c > @@ -25,17 +25,7 @@ int > fallocate (int fd, int mode, __off_t offset, __off_t len) > { > #ifdef __NR_fallocate > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); > - > - int result; > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (fallocate, fd, mode, offset, len); > #else > __set_errno (ENOSYS); > return -1; > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c > index d3ed5d1..077127e 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c > +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c > @@ -25,17 +25,7 @@ int > fallocate64 (int fd, int mode, __off64_t offset, __off64_t len) > { > #ifdef __NR_fallocate > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); > - > - int result; > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (fallocate, fd, mode, offset, len); > #else > __set_errno (ENOSYS); > return -1; > diff --git a/sysdeps/unix/sysv/linux/mips/pread.c b/sysdeps/unix/sysv/linux/mips/pread.c > index a7b1618..0bd712d 100644 > --- a/sysdeps/unix/sysv/linux/mips/pread.c > +++ b/sysdeps/unix/sysv/linux/mips/pread.c > @@ -38,35 +38,16 @@ > ssize_t > __libc_pread (int fd, void *buf, size_t count, off_t offset) > { > - ssize_t result; > - > #if _MIPS_SIM != _ABI64 > assert (sizeof (offset) == 4); > #endif > > - if (SINGLE_THREAD_P) > - { > -#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 > - result = INLINE_SYSCALL (pread, 4, fd, buf, count, offset); > -#else > - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR (offset >> 31, offset)); > -#endif > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > #if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 > - result = INLINE_SYSCALL (pread, 4, fd, buf, count, offset); > + return SYSCALL_CANCEL (pread, fd, buf, count, offset); > #else > - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR (offset >> 31, offset)); > + return SYSCALL_CANCEL (pread, fd, buf, count, 0, > + __LONG_LONG_PAIR (offset >> 31, offset)); > #endif > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > } > > strong_alias (__libc_pread, __pread) > diff --git a/sysdeps/unix/sysv/linux/mips/pread64.c b/sysdeps/unix/sysv/linux/mips/pread64.c > index ad948aa..3ed100b 100644 > --- a/sysdeps/unix/sysv/linux/mips/pread64.c > +++ b/sysdeps/unix/sysv/linux/mips/pread64.c > @@ -37,34 +37,13 @@ > ssize_t > __libc_pread64 (int fd, void *buf, size_t count, off64_t offset) > { > - ssize_t result; > - > - > - if (SINGLE_THREAD_P) > - { > #if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 > - result = INLINE_SYSCALL (pread, 4, fd, buf, count, offset); > + return SYSCALL_CANCEL (pread, fd, buf, count, offset); > #else > - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > + return SYSCALL_CANCEL (pread, fd, buf, count, 0, > + __LONG_LONG_PAIR ((off_t) (offset >> 32), > + (off_t) (offset & 0xffffffff))); > #endif > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > -#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 > - result = INLINE_SYSCALL (pread, 4, fd, buf, count, offset); > -#else > - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > -#endif > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > } > > weak_alias (__libc_pread64, __pread64) > diff --git a/sysdeps/unix/sysv/linux/mips/pwrite.c b/sysdeps/unix/sysv/linux/mips/pwrite.c > index 2c38e04..f4d71d4 100644 > --- a/sysdeps/unix/sysv/linux/mips/pwrite.c > +++ b/sysdeps/unix/sysv/linux/mips/pwrite.c > @@ -38,35 +38,16 @@ > ssize_t > __libc_pwrite (int fd, const void *buf, size_t count, off_t offset) > { > - ssize_t result; > - > #if _MIPS_SIM != _ABI64 > assert (sizeof (offset) == 4); > #endif > > - if (SINGLE_THREAD_P) > - { > -#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 > - result = INLINE_SYSCALL (pwrite, 4, fd, buf, count, offset); > -#else > - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR (offset >> 31, offset)); > -#endif > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > #if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 > - result = INLINE_SYSCALL (pwrite, 4, fd, buf, count, offset); > + return SYSCALL_CANCEL (pwrite, fd, buf, count, offset); > #else > - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR (offset >> 31, offset)); > + return SYSCALL_CANCEL (pwrite, fd, buf, count, 0, > + __LONG_LONG_PAIR (offset >> 31, offset)); > #endif > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > } > > strong_alias (__libc_pwrite, __pwrite) > diff --git a/sysdeps/unix/sysv/linux/mips/pwrite64.c b/sysdeps/unix/sysv/linux/mips/pwrite64.c > index 504c88a..ac0dc40 100644 > --- a/sysdeps/unix/sysv/linux/mips/pwrite64.c > +++ b/sysdeps/unix/sysv/linux/mips/pwrite64.c > @@ -37,34 +37,13 @@ > ssize_t > __libc_pwrite64 (int fd, const void *buf, size_t count, off64_t offset) > { > - ssize_t result; > - > - if (SINGLE_THREAD_P) > - { > #if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 > - result = INLINE_SYSCALL (pwrite, 4, fd, buf, count, offset); > + return SYSCALL_CANCEL (pwrite, fd, buf, count, offset); > #else > - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > + return SYSCALL_CANCEL (pwrite, fd, buf, count, 0, > + __LONG_LONG_PAIR ((off_t) (offset >> 32), > + (off_t) (offset & 0xffffffff))); > #endif > - > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > -#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 > - result = INLINE_SYSCALL (pwrite, 4, fd, buf, count, offset); > -#else > - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > -#endif > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > } > > weak_alias (__libc_pwrite64, __pwrite64) > diff --git a/sysdeps/unix/sysv/linux/msgrcv.c b/sysdeps/unix/sysv/linux/msgrcv.c > index 1c3698c..660ff29 100644 > --- a/sysdeps/unix/sysv/linux/msgrcv.c > +++ b/sysdeps/unix/sysv/linux/msgrcv.c > @@ -43,16 +43,6 @@ __libc_msgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp, > tmp.msgp = msgp; > tmp.msgtyp = msgtyp; > > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (ipc, 5, IPCOP_msgrcv, msqid, msgsz, msgflg, &tmp); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - ssize_t result = INLINE_SYSCALL (ipc, 5, IPCOP_msgrcv, msqid, msgsz, msgflg, > - &tmp); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (ipc, IPCOP_msgrcv, msqid, msgsz, msgflg, &tmp); > } > weak_alias (__libc_msgrcv, msgrcv) > diff --git a/sysdeps/unix/sysv/linux/msgsnd.c b/sysdeps/unix/sysv/linux/msgsnd.c > index d548aab..dfed539 100644 > --- a/sysdeps/unix/sysv/linux/msgsnd.c > +++ b/sysdeps/unix/sysv/linux/msgsnd.c > @@ -26,17 +26,7 @@ > int > __libc_msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg) > { > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (ipc, 5, IPCOP_msgsnd, msqid, msgsz, > - msgflg, (void *) msgp); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - int result = INLINE_SYSCALL (ipc, 5, IPCOP_msgsnd, msqid, msgsz, > - msgflg, (void *) msgp); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (ipc, IPCOP_msgsnd, msqid, msgsz, msgflg, > + (void *) msgp); > } > weak_alias (__libc_msgsnd, msgsnd) > diff --git a/sysdeps/unix/sysv/linux/open64.c b/sysdeps/unix/sysv/linux/open64.c > index d3ab813..b90294a 100644 > --- a/sysdeps/unix/sysv/linux/open64.c > +++ b/sysdeps/unix/sysv/linux/open64.c > @@ -36,16 +36,7 @@ __libc_open64 (const char *file, int oflag, ...) > va_end (arg); > } > > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (open, 3, file, oflag | O_LARGEFILE, mode); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - int result = INLINE_SYSCALL (open, 3, file, oflag | O_LARGEFILE, mode); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (open, file, oflag | O_LARGEFILE, mode); > } > weak_alias (__libc_open64, __open64) > libc_hidden_weak (__open64) > diff --git a/sysdeps/unix/sysv/linux/openat.c b/sysdeps/unix/sysv/linux/openat.c > index 30d8e6e..6777123 100644 > --- a/sysdeps/unix/sysv/linux/openat.c > +++ b/sysdeps/unix/sysv/linux/openat.c > @@ -68,16 +68,7 @@ __OPENAT (int fd, const char *file, int oflag, ...) > va_end (arg); > } > > - if (SINGLE_THREAD_P) > - return OPENAT_NOT_CANCEL (fd, file, oflag, mode); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - int res = OPENAT_NOT_CANCEL (fd, file, oflag, mode); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return res; > + return SYSCALL_CANCEL (openat, fd, file, oflag, mode); > } > libc_hidden_def (__OPENAT) > weak_alias (__OPENAT, OPENAT) > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c > index 10763f5..f6b7f43 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c > @@ -26,26 +26,8 @@ > ssize_t > __libc_pread (int fd, void *buf, size_t count, off_t offset) > { > - ssize_t result; > - > - if (SINGLE_THREAD_P) > - { > - /* On PPC32 64bit values are aligned in odd/even register pairs. */ > - result = INLINE_SYSCALL (pread, 6, fd, buf, count, > - 0, offset >> 31, offset); > - > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > /* On PPC32 64bit values are aligned in odd/even register pairs. */ > - result = INLINE_SYSCALL (pread, 6, fd, buf, count, > - 0, offset >> 31, offset); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (pread, fd, buf, count, 0, offset >> 31, offset); > } > > strong_alias (__libc_pread, __pread) > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c > index f3dc7e5..75ee34b 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c > @@ -26,28 +26,9 @@ > ssize_t > __libc_pread64 (int fd, void *buf, size_t count, off64_t offset) > { > - ssize_t result; > - > - if (SINGLE_THREAD_P) > - { > - /* On PPC32 64bit values are aligned in odd/even register pairs. */ > - result = INLINE_SYSCALL (pread, 6, fd, buf, count, > - 0, (long) (offset >> 32), > - (long) offset); > - > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > /* On PPC32 64bit values are aligned in odd/even register pairs. */ > - result = INLINE_SYSCALL (pread, 6, fd, buf, count, > - 0, (long) (offset >> 32), > - (long) offset); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (pread, fd, buf, count, 0, (long) (offset >> 32), > + (long) offset); > } > > weak_alias (__libc_pread64, __pread64) > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c > index 65109ed..fc822d7 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c > @@ -27,26 +27,8 @@ > ssize_t > __libc_pwrite (int fd, const void *buf, size_t count, off_t offset) > { > - ssize_t result; > - > - if (SINGLE_THREAD_P) > - { > - /* On PPC32 64bit values are aligned in odd/even register pairs. */ > - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, > - 0, offset >> 31, offset); > - > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > /* On PPC32 64bit values are aligned in odd/even register pairs. */ > - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, > - 0, offset >> 31, offset); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (pwrite, fd, buf, count, 0, offset >> 31, offset); > } > > strong_alias (__libc_pwrite, __pwrite) > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c > index 77749c9..dbeaed8 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c > @@ -26,28 +26,9 @@ > ssize_t > __libc_pwrite64 (int fd, const void *buf, size_t count, off64_t offset) > { > - ssize_t result; > - > - if (SINGLE_THREAD_P) > - { > /* On PPC32 64bit values are aligned in odd/even register pairs. */ > - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, > - 0, (long) (offset >> 32), > - (long) offset); > - > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - /* On PPC32 64bit values are aligned in odd/even register pairs. */ > - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, > - 0, (long) (offset >> 32), > - (long) offset); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (pwrite, fd, buf, count, 0, (long) (offset >> 32), > + (long) offset); > } > > weak_alias (__libc_pwrite64, __pwrite64) > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c > index a4f90b6..69031ba 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c > @@ -53,16 +53,10 @@ __libc_fcntl (int fd, int cmd, ...) > if (cmd >= F_GETLK64 && cmd <= F_SETLKW64) > cmd -= F_GETLK64 - F_GETLK; > > - if (SINGLE_THREAD_P || cmd != F_SETLKW) > + if (cmd != F_SETLKW) > return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg); > > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - int result = INLINE_SYSCALL (fcntl, 3, fd, cmd, arg); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (fcntl, fd, cmd, arg); > } > libc_hidden_def (__libc_fcntl) > > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c > index 18bb0dd..9f46458 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c > @@ -28,17 +28,7 @@ > int > sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) > { > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (sync_file_range2, 4, fd, flags, from, to); > - > - int result; > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (sync_file_range2, 4, fd, flags, from, to); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (sync_file_range2, fd, flags, from, to); > } > #else > int > diff --git a/sysdeps/unix/sysv/linux/ppoll.c b/sysdeps/unix/sysv/linux/ppoll.c > index 6e83424..77a2e7e 100644 > --- a/sysdeps/unix/sysv/linux/ppoll.c > +++ b/sysdeps/unix/sysv/linux/ppoll.c > @@ -47,17 +47,7 @@ ppoll (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, > > int result; > > - if (SINGLE_THREAD_P) > - result = INLINE_SYSCALL (ppoll, 5, fds, nfds, timeout, sigmask, _NSIG / 8); > - else > - { > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (ppoll, 5, fds, nfds, timeout, sigmask, > - _NSIG / 8); > - > - LIBC_CANCEL_RESET (oldtype); > - } > + result = SYSCALL_CANCEL (ppoll, fds, nfds, timeout, sigmask, _NSIG / 8); > > # ifndef __ASSUME_PPOLL > if (result == -1 && errno == ENOSYS) > diff --git a/sysdeps/unix/sysv/linux/pread.c b/sysdeps/unix/sysv/linux/pread.c > index 5c1b174..09389e4 100644 > --- a/sysdeps/unix/sysv/linux/pread.c > +++ b/sysdeps/unix/sysv/linux/pread.c > @@ -32,36 +32,17 @@ > #endif > > > -static ssize_t > -#ifdef NO_CANCELLATION > -inline __attribute ((always_inline)) > -#endif > -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) > { > ssize_t result; > > assert (sizeof (offset) == 4); > - result = INLINE_SYSCALL (pread, 5, fd, buf, count, > + result = SYSCALL_CANCEL (pread, fd, buf, count, > __LONG_LONG_PAIR (offset >> 31, offset)); > > return result; > } > > - > -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/pread64.c b/sysdeps/unix/sysv/linux/pread64.c > index a8cfb5d..baf2355 100644 > --- a/sysdeps/unix/sysv/linux/pread64.c > +++ b/sysdeps/unix/sysv/linux/pread64.c > @@ -31,32 +31,12 @@ > #endif > > > -static ssize_t > -do_pread64 (int fd, void *buf, size_t count, off64_t offset) > -{ > - ssize_t result; > - > - result = INLINE_SYSCALL (pread, 5, fd, buf, count, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > - > - return result; > -} > - > - > 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 (pread, fd, buf, count, > + __LONG_LONG_PAIR ((off_t) (offset >> 32), > + (off_t) (offset & 0xffffffff))); > } > > weak_alias (__libc_pread64, __pread64) > diff --git a/sysdeps/unix/sysv/linux/preadv.c b/sysdeps/unix/sysv/linux/preadv.c > index 091f9a7..2d08be4 100644 > --- a/sysdeps/unix/sysv/linux/preadv.c > +++ b/sysdeps/unix/sysv/linux/preadv.c > @@ -53,18 +53,8 @@ PREADV (int fd, const struct iovec *vector, int count, OFF_T offset) > #ifdef __NR_preadv > ssize_t result; > > - if (SINGLE_THREAD_P) > - result = INLINE_SYSCALL (preadv, 5, fd, vector, count, > - LO_HI_LONG (offset)); > - else > - { > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (preadv, 5, fd, vector, count, > - LO_HI_LONG (offset)); > - > - LIBC_CANCEL_RESET (oldtype); > - } > + result = SYSCALL_CANCEL (preadv, fd, vector, count, LO_HI_LONG (offset)); > + > # ifdef __ASSUME_PREADV > return result; > # endif > diff --git a/sysdeps/unix/sysv/linux/pselect.c b/sysdeps/unix/sysv/linux/pselect.c > index f342a13..30d51d7 100644 > --- a/sysdeps/unix/sysv/linux/pselect.c > +++ b/sysdeps/unix/sysv/linux/pselect.c > @@ -63,22 +63,11 @@ __pselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, > > #ifndef CALL_PSELECT6 > # define CALL_PSELECT6(nfds, readfds, writefds, exceptfds, timeout, data) \ > - INLINE_SYSCALL (pselect6, 6, nfds, readfds, writefds, exceptfds, \ > - timeout, data) > + SYSCALL_CANCEL (pselect6, nfds, readfds, writefds, exceptfds, timeout, data) > #endif > > - if (SINGLE_THREAD_P) > - result = CALL_PSELECT6 (nfds, readfds, writefds, exceptfds, timeout, > - &data); > - else > - { > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = CALL_PSELECT6 (nfds, readfds, writefds, exceptfds, timeout, > - &data); > - > - LIBC_CANCEL_RESET (oldtype); > - } > + result = CALL_PSELECT6 (nfds, readfds, writefds, exceptfds, timeout, > + &data); > > # ifndef __ASSUME_PSELECT > if (result == -1 && errno == ENOSYS) > diff --git a/sysdeps/unix/sysv/linux/pwrite.c b/sysdeps/unix/sysv/linux/pwrite.c > index 80c2e22..b77985d 100644 > --- a/sysdeps/unix/sysv/linux/pwrite.c > +++ b/sysdeps/unix/sysv/linux/pwrite.c > @@ -32,36 +32,17 @@ > #endif > > > -static ssize_t > -#ifdef NO_CANCELLATION > -inline __attribute ((always_inline)) > -#endif > -do_pwrite (int fd, const void *buf, size_t count, off_t offset) > +ssize_t > +__libc_pwrite (int fd, const void *buf, size_t count, off_t offset) > { > ssize_t result; > > assert (sizeof (offset) == 4); > - result = INLINE_SYSCALL (pwrite, 5, fd, buf, count, > + result = SYSCALL_CANCEL (pwrite, fd, buf, count, > __LONG_LONG_PAIR (offset >> 31, offset)); > > return result; > } > > - > -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; > -} > - > strong_alias (__libc_pwrite, __pwrite) > weak_alias (__libc_pwrite, pwrite) > diff --git a/sysdeps/unix/sysv/linux/pwrite64.c b/sysdeps/unix/sysv/linux/pwrite64.c > index 7fce75a..a5d0fb7 100644 > --- a/sysdeps/unix/sysv/linux/pwrite64.c > +++ b/sysdeps/unix/sysv/linux/pwrite64.c > @@ -31,34 +31,13 @@ > #endif > > > -static ssize_t > -do_pwrite64 (int fd, const void *buf, size_t count, off64_t offset) > -{ > - ssize_t result; > - > - result = INLINE_SYSCALL (pwrite, 5, fd, buf, count, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > - > - return result; > -} > - > - > 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 (pwrite, fd, buf, count, > + __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/pwritev.c b/sysdeps/unix/sysv/linux/pwritev.c > index 91e58b5..7aa9238 100644 > --- a/sysdeps/unix/sysv/linux/pwritev.c > +++ b/sysdeps/unix/sysv/linux/pwritev.c > @@ -53,18 +53,8 @@ PWRITEV (int fd, const struct iovec *vector, int count, OFF_T offset) > #ifdef __NR_pwritev > ssize_t result; > > - if (SINGLE_THREAD_P) > - result = INLINE_SYSCALL (pwritev, 5, fd, vector, count, > - LO_HI_LONG (offset)); > - else > - { > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (pwritev, 5, fd, vector, count, > - LO_HI_LONG (offset)); > - > - LIBC_CANCEL_RESET (oldtype); > - } > + result = SYSCALL_CANCEL (pwritev, fd, vector, count, LO_HI_LONG (offset)); > + > # ifdef __ASSUME_PWRITEV > return result; > # endif > diff --git a/sysdeps/unix/sysv/linux/recvmmsg.c b/sysdeps/unix/sysv/linux/recvmmsg.c > index 73b3ee0..4063368 100644 > --- a/sysdeps/unix/sysv/linux/recvmmsg.c > +++ b/sysdeps/unix/sysv/linux/recvmmsg.c > @@ -37,16 +37,7 @@ int > recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags, > struct timespec *tmo) > { > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (recvmmsg, 5, fd, vmessages, vlen, flags, tmo); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - int result = INLINE_SYSCALL (recvmmsg, 5, fd, vmessages, vlen, flags, tmo); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (recvmmsg, fd, vmessages, vlen, flags, tmo); > } > #elif defined __NR_socketcall > # include <socketcall.h> > diff --git a/sysdeps/unix/sysv/linux/sendmmsg.c b/sysdeps/unix/sysv/linux/sendmmsg.c > index 7bad328..dc0aa75 100644 > --- a/sysdeps/unix/sysv/linux/sendmmsg.c > +++ b/sysdeps/unix/sysv/linux/sendmmsg.c > @@ -36,16 +36,7 @@ > int > __sendmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags) > { > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (sendmmsg, 4, fd, vmessages, vlen, flags); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - int result = INLINE_SYSCALL (sendmmsg, 4, fd, vmessages, vlen, flags); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (sendmmsg, fd, vmessages, vlen, flags); > } > libc_hidden_def (__sendmmsg) > weak_alias (__sendmmsg, sendmmsg) > diff --git a/sysdeps/unix/sysv/linux/sh/pread.c b/sysdeps/unix/sysv/linux/sh/pread.c > index 9d4b5de..2f926b3 100644 > --- a/sysdeps/unix/sysv/linux/sh/pread.c > +++ b/sysdeps/unix/sysv/linux/sh/pread.c > @@ -35,23 +35,8 @@ > ssize_t > __libc_pread (int fd, void *buf, size_t count, off_t offset) > { > - ssize_t result; > - > - if (SINGLE_THREAD_P) > - { > - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR (offset >> 31, offset)); > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR (offset >> 31, offset)); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (pread, fd, buf, count, 0, > + __LONG_LONG_PAIR (offset >> 31, offset)); > } > > strong_alias (__libc_pread, __pread) > diff --git a/sysdeps/unix/sysv/linux/sh/pread64.c b/sysdeps/unix/sysv/linux/sh/pread64.c > index 195eacc..697718d 100644 > --- a/sysdeps/unix/sysv/linux/sh/pread64.c > +++ b/sysdeps/unix/sysv/linux/sh/pread64.c > @@ -34,25 +34,9 @@ > ssize_t > __libc_pread64 (int fd, void *buf, size_t count, off64_t offset) > { > - ssize_t result; > - > - if (SINGLE_THREAD_P) > - { > - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (pread, fd, buf, count, 0, > + __LONG_LONG_PAIR ((off_t) (offset >> 32), > + (off_t) (offset & 0xffffffff))); > } > > weak_alias (__libc_pread64, __pread64) > diff --git a/sysdeps/unix/sysv/linux/sh/pwrite.c b/sysdeps/unix/sysv/linux/sh/pwrite.c > index c187d0a..fcbb7fc 100644 > --- a/sysdeps/unix/sysv/linux/sh/pwrite.c > +++ b/sysdeps/unix/sysv/linux/sh/pwrite.c > @@ -35,23 +35,8 @@ > ssize_t > __libc_pwrite (int fd, const void *buf, size_t count, off_t offset) > { > - ssize_t result; > - > - if (SINGLE_THREAD_P) > - { > - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR (offset >> 31, offset)); > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR (offset >> 31, offset)); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (pwrite, fd, buf, count, 0, > + __LONG_LONG_PAIR (offset >> 31, offset)); > } > > strong_alias (__libc_pwrite, __pwrite) > diff --git a/sysdeps/unix/sysv/linux/sh/pwrite64.c b/sysdeps/unix/sysv/linux/sh/pwrite64.c > index 0d15ca2..0c189fe 100644 > --- a/sysdeps/unix/sysv/linux/sh/pwrite64.c > +++ b/sysdeps/unix/sysv/linux/sh/pwrite64.c > @@ -34,26 +34,9 @@ > ssize_t > __libc_pwrite64 (int fd, const void *buf, size_t count, off64_t offset) > { > - ssize_t result; > - > - if (SINGLE_THREAD_P) > - { > - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > - > - return result; > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, > - __LONG_LONG_PAIR ((off_t) (offset >> 32), > - (off_t) (offset & 0xffffffff))); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (pwrite, fd, buf, count, 0, > + __LONG_LONG_PAIR ((off_t) (offset >> 32), > + (off_t) (offset & 0xffffffff))); > } > > weak_alias (__libc_pwrite64, __pwrite64) > diff --git a/sysdeps/unix/sysv/linux/sigsuspend.c b/sysdeps/unix/sysv/linux/sigsuspend.c > index 89c5d65..9047623 100644 > --- a/sysdeps/unix/sysv/linux/sigsuspend.c > +++ b/sysdeps/unix/sysv/linux/sigsuspend.c > @@ -22,38 +22,13 @@ > #include <sysdep-cancel.h> > #include <sys/syscall.h> > > - > -static inline int __attribute__ ((always_inline)) > -do_sigsuspend (const sigset_t *set) > -{ > - return INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8); > -} > - > /* Change the set of blocked signals to SET, > wait until a signal arrives, and restore the set of blocked signals. */ > int > __sigsuspend (const sigset_t *set) > { > - if (SINGLE_THREAD_P) > - return do_sigsuspend (set); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - int result = do_sigsuspend (set); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (rt_sigsuspend, set, _NSIG / 8); > } > libc_hidden_def (__sigsuspend) > weak_alias (__sigsuspend, sigsuspend) > strong_alias (__sigsuspend, __libc_sigsuspend) > - > -#ifndef NO_CANCELLATION > -int > -__sigsuspend_nocancel (set) > - const sigset_t *set; > -{ > - return do_sigsuspend (set); > -} > -#endif > diff --git a/sysdeps/unix/sysv/linux/sigtimedwait.c b/sysdeps/unix/sysv/linux/sigtimedwait.c > index 209198e..a2e5b41 100644 > --- a/sysdeps/unix/sysv/linux/sigtimedwait.c > +++ b/sysdeps/unix/sysv/linux/sigtimedwait.c > @@ -25,9 +25,9 @@ > > #ifdef __NR_rt_sigtimedwait > > -static int > -do_sigtimedwait (const sigset_t *set, siginfo_t *info, > - const struct timespec *timeout) > +int > +__sigtimedwait (const sigset_t *set, siginfo_t *info, > + const struct timespec *timeout) > { > #ifdef SIGCANCEL > sigset_t tmpset; > @@ -51,8 +51,7 @@ do_sigtimedwait (const sigset_t *set, siginfo_t *info, > > /* XXX The size argument hopefully will have to be changed to the > real size of the user-level sigset_t. */ > - int result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, > - info, timeout, _NSIG / 8); > + int result = SYSCALL_CANCEL (rt_sigtimedwait, set, info, timeout, _NSIG / 8); > > /* The kernel generates a SI_TKILL code in si_code in case tkill is > used. tkill is transparently used in raise(). Since having > @@ -63,26 +62,6 @@ do_sigtimedwait (const sigset_t *set, siginfo_t *info, > > return result; > } > - > - > -/* Return any pending signal or wait for one for the given time. */ > -int > -__sigtimedwait (const sigset_t *set, siginfo_t *info, > - const struct timespec *timeout) > -{ > - if (SINGLE_THREAD_P) > - return do_sigtimedwait (set, info, timeout); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - /* XXX The size argument hopefully will have to be changed to the > - real size of the user-level sigset_t. */ > - int result = do_sigtimedwait (set, info, timeout); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > -} > libc_hidden_def (__sigtimedwait) > weak_alias (__sigtimedwait, sigtimedwait) > #else > diff --git a/sysdeps/unix/sysv/linux/sigwaitinfo.c b/sysdeps/unix/sysv/linux/sigwaitinfo.c > index fe23c9f..47e6dd6 100644 > --- a/sysdeps/unix/sysv/linux/sigwaitinfo.c > +++ b/sysdeps/unix/sysv/linux/sigwaitinfo.c > @@ -27,8 +27,9 @@ > > #ifdef __NR_rt_sigtimedwait > > -static int > -do_sigwaitinfo (const sigset_t *set, siginfo_t *info) > +/* Return any pending signal or wait for one for the given time. */ > +int > +__sigwaitinfo (const sigset_t *set, siginfo_t *info) > { > #ifdef SIGCANCEL > sigset_t tmpset; > @@ -52,8 +53,7 @@ do_sigwaitinfo (const sigset_t *set, siginfo_t *info) > > /* XXX The size argument hopefully will have to be changed to the > real size of the user-level sigset_t. */ > - int result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, > - info, NULL, _NSIG / 8); > + int result = SYSCALL_CANCEL (rt_sigtimedwait, set, info, NULL, _NSIG / 8); > > /* The kernel generates a SI_TKILL code in si_code in case tkill is > used. tkill is transparently used in raise(). Since having > @@ -65,24 +65,6 @@ do_sigwaitinfo (const sigset_t *set, siginfo_t *info) > return result; > } > > - > -/* Return any pending signal or wait for one for the given time. */ > -int > -__sigwaitinfo (const sigset_t *set, siginfo_t *info) > -{ > - if (SINGLE_THREAD_P) > - return do_sigwaitinfo (set, info); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - /* XXX The size argument hopefully will have to be changed to the > - real size of the user-level sigset_t. */ > - int result = do_sigwaitinfo (set, info); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > -} > libc_hidden_def (__sigwaitinfo) > weak_alias (__sigwaitinfo, sigwaitinfo) > #else > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c b/sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c > index 8928060..169ac53 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c > +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c > @@ -26,17 +26,7 @@ ssize_t > __libc_msgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp, > int msgflg) > { > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (ipc, 6, IPCOP_msgrcv, msqid, msgsz, msgflg, > - msgp, msgtyp); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - ssize_t result = INLINE_SYSCALL (ipc, 6, IPCOP_msgrcv, msqid, msgsz, msgflg, > - msgp, msgtyp); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (ipc, IPCOP_msgrcv, msqid, msgsz, msgflg, > + msgp, msgtyp); > } > weak_alias (__libc_msgrcv, msgrcv) > diff --git a/sysdeps/unix/sysv/linux/sync_file_range.c b/sysdeps/unix/sysv/linux/sync_file_range.c > index c07ece0..2ea6dcf 100644 > --- a/sysdeps/unix/sysv/linux/sync_file_range.c > +++ b/sysdeps/unix/sysv/linux/sync_file_range.c > @@ -28,43 +28,18 @@ > int > sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) > { > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (sync_file_range, 6, fd, > - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), > - __LONG_LONG_PAIR ((long) (to >> 32), (long) to), > - flags); > - > - int result; > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (sync_file_range, 6, fd, > - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), > - __LONG_LONG_PAIR ((long) (to >> 32), (long) to), > - flags); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (sync_file_range, fd, > + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), > + __LONG_LONG_PAIR ((long) (to >> 32), (long) to), > + flags); > } > #elif defined __NR_sync_file_range2 > int > sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) > { > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (sync_file_range2, 6, fd, flags, > - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), > - __LONG_LONG_PAIR ((long) (to >> 32), (long) to)); > - > - int result; > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (sync_file_range2, 6, fd, flags, > - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), > - __LONG_LONG_PAIR ((long) (to >> 32), (long) to)); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (sync_file_range2, fd, flags, > + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), > + __LONG_LONG_PAIR ((long) (to >> 32), (long) to)); > } > #else > int > diff --git a/sysdeps/unix/sysv/linux/tcdrain.c b/sysdeps/unix/sysv/linux/tcdrain.c > index c0f2e1d..f60dd4d 100644 > --- a/sysdeps/unix/sysv/linux/tcdrain.c > +++ b/sysdeps/unix/sysv/linux/tcdrain.c > @@ -24,17 +24,7 @@ > int > __libc_tcdrain (int fd) > { > - if (SINGLE_THREAD_P) > - /* With an argument of 1, TCSBRK for output to be drain. */ > - return INLINE_SYSCALL (ioctl, 3, fd, TCSBRK, 1); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > /* With an argument of 1, TCSBRK for output to be drain. */ > - int result = INLINE_SYSCALL (ioctl, 3, fd, TCSBRK, 1); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (ioctl, fd, TCSBRK, 1); > } > weak_alias (__libc_tcdrain, tcdrain) > diff --git a/sysdeps/unix/sysv/linux/timer_routines.c b/sysdeps/unix/sysv/linux/timer_routines.c > index 4401a8b..4cf6eca 100644 > --- a/sysdeps/unix/sysv/linux/timer_routines.c > +++ b/sysdeps/unix/sysv/linux/timer_routines.c > @@ -20,7 +20,7 @@ > #include <setjmp.h> > #include <signal.h> > #include <stdbool.h> > -#include <sysdep.h> > +#include <sysdep-cancel.h> > #include <nptl/pthreadP.h> > #include "kernel-posix-timers.h" > > @@ -84,14 +84,9 @@ timer_helper_thread (void *arg) > /* sigwaitinfo cannot be used here, since it deletes > SIGCANCEL == SIGTIMER from the set. */ > > - int oldtype = LIBC_CANCEL_ASYNC (); > - > /* XXX The size argument hopefully will have to be changed to the > real size of the user-level sigset_t. */ > - int result = INLINE_SYSCALL (rt_sigtimedwait, 4, &ss, &si, NULL, > - _NSIG / 8); > - > - LIBC_CANCEL_RESET (oldtype); > + int result = SYSCALL_CANCEL (rt_sigtimedwait, &ss, &si, NULL, _NSIG / 8); > > if (result > 0) > { > diff --git a/sysdeps/unix/sysv/linux/wait.c b/sysdeps/unix/sysv/linux/wait.c > index 029d975..5b76c7c 100644 > --- a/sysdeps/unix/sysv/linux/wait.c > +++ b/sysdeps/unix/sysv/linux/wait.c > @@ -26,17 +26,8 @@ > pid_t > __libc_wait (__WAIT_STATUS_DEFN stat_loc) > { > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (wait4, 4, WAIT_ANY, stat_loc, 0, > - (struct rusage *) NULL); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - pid_t result = INLINE_SYSCALL (wait4, 4, WAIT_ANY, stat_loc, 0, > + pid_t result = SYSCALL_CANCEL (wait4, WAIT_ANY, stat_loc, 0, > (struct rusage *) NULL); > - > - LIBC_CANCEL_RESET (oldtype); > - > return result; > } > > diff --git a/sysdeps/unix/sysv/linux/waitid.c b/sysdeps/unix/sysv/linux/waitid.c > index 12d5702..71d3a5a 100644 > --- a/sysdeps/unix/sysv/linux/waitid.c > +++ b/sysdeps/unix/sysv/linux/waitid.c > @@ -19,15 +19,14 @@ > #include <stddef.h> > #include <errno.h> > #include <sys/wait.h> > -#include <sysdep.h> > +#include <sysdep-cancel.h> > > -static inline int > -do_waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options) > +int > +__waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options) > { > /* The unused fifth argument is a `struct rusage *' that we could > pass if we were using waitid to simulate wait3/wait4. */ > - return INLINE_SYSCALL (waitid, 5, idtype, id, infop, options, NULL); > + return SYSCALL_CANCEL (waitid, idtype, id, infop, options, NULL); > } > -#define NO_DO_WAITID > - > -#include "sysdeps/posix/waitid.c" > +weak_alias (__waitid, waitid) > +strong_alias (__waitid, __libc_waitid) > diff --git a/sysdeps/unix/sysv/linux/waitpid.c b/sysdeps/unix/sysv/linux/waitpid.c > index 0d780da..59d0c9e 100644 > --- a/sysdeps/unix/sysv/linux/waitpid.c > +++ b/sysdeps/unix/sysv/linux/waitpid.c > @@ -23,26 +23,11 @@ > __pid_t > __waitpid (__pid_t pid, int *stat_loc, int options) > { > - if (SINGLE_THREAD_P) > - { > #ifdef __NR_waitpid > - return INLINE_SYSCALL (waitpid, 3, pid, stat_loc, options); > + return SYSCALL_CANCEL (waitpid, pid, stat_loc, options); > #else > - return INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL); > + return SYSCALL_CANCEL (wait4, pid, stat_loc, options, NULL); > #endif > - } > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > -#ifdef __NR_waitpid > - int result = INLINE_SYSCALL (waitpid, 3, pid, stat_loc, options); > -#else > - int result = INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL); > -#endif > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > } > libc_hidden_def (__waitpid) > weak_alias (__waitpid, waitpid) > diff --git a/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c b/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c > index c723fef..627ac2a 100644 > --- a/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c > +++ b/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c > @@ -25,17 +25,7 @@ int > fallocate (int fd, int mode, __off_t offset, __off_t len) > { > #ifdef __NR_fallocate > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); > - > - int result; > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (fallocate, fd, mode, offset, len); > #else > __set_errno (ENOSYS); > return -1; > diff --git a/sysdeps/unix/sysv/linux/wordsize-64/preadv.c b/sysdeps/unix/sysv/linux/wordsize-64/preadv.c > index 9b3ae70..5e22c4b 100644 > --- a/sysdeps/unix/sysv/linux/wordsize-64/preadv.c > +++ b/sysdeps/unix/sysv/linux/wordsize-64/preadv.c > @@ -38,16 +38,7 @@ preadv (int fd, const struct iovec *vector, int count, off_t offset) > #ifdef __NR_preadv > ssize_t result; > > - if (SINGLE_THREAD_P) > - result = INLINE_SYSCALL (preadv, 4, fd, vector, count, offset); > - else > - { > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (preadv, 4, fd, vector, count, offset); > - > - LIBC_CANCEL_RESET (oldtype); > - } > + result = SYSCALL_CANCEL (preadv, fd, vector, count, offset); > # ifdef __ASSUME_PREADV > return result; > # endif > diff --git a/sysdeps/unix/sysv/linux/wordsize-64/pwritev.c b/sysdeps/unix/sysv/linux/wordsize-64/pwritev.c > index 960c8c0..ccf96dd 100644 > --- a/sysdeps/unix/sysv/linux/wordsize-64/pwritev.c > +++ b/sysdeps/unix/sysv/linux/wordsize-64/pwritev.c > @@ -38,16 +38,7 @@ pwritev (int fd, const struct iovec *vector, int count, off_t offset) > #ifdef __NR_pwritev > ssize_t result; > > - if (SINGLE_THREAD_P) > - result = INLINE_SYSCALL (pwritev, 4, fd, vector, count, offset); > - else > - { > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - result = INLINE_SYSCALL (pwritev, 4, fd, vector, count, offset); > - > - LIBC_CANCEL_RESET (oldtype); > - } > + result = SYSCALL_CANCEL (pwritev, fd, vector, count, offset); > # ifdef __ASSUME_PWRITEV > return result; > # endif > diff --git a/sysdeps/unix/sysv/linux/x86_64/recv.c b/sysdeps/unix/sysv/linux/x86_64/recv.c > index 7b956a5..995d11d 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/recv.c > +++ b/sysdeps/unix/sysv/linux/x86_64/recv.c > @@ -25,16 +25,7 @@ > ssize_t > __libc_recv (int fd, void *buf, size_t n, int flags) > { > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (recvfrom, 6, fd, buf, n, flags, NULL, NULL); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - ssize_t result = INLINE_SYSCALL (recvfrom, 6, fd, buf, n, flags, NULL, NULL); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (recvfrom, fd, buf, n, flags, NULL, NULL); > } > > weak_alias (__libc_recv, __recv) > diff --git a/sysdeps/unix/sysv/linux/x86_64/send.c b/sysdeps/unix/sysv/linux/x86_64/send.c > index c8dadfa..864a8d5 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/send.c > +++ b/sysdeps/unix/sysv/linux/x86_64/send.c > @@ -23,17 +23,7 @@ > ssize_t > __libc_send (int fd, const void *buf, size_t n, int flags) > { > - if (SINGLE_THREAD_P) > - return INLINE_SYSCALL (sendto, 6, fd, buf, n, flags, NULL, (size_t) 0); > - > - int oldtype = LIBC_CANCEL_ASYNC (); > - > - ssize_t result = INLINE_SYSCALL (sendto, 6, fd, buf, n, flags, NULL, > - (size_t) 0); > - > - LIBC_CANCEL_RESET (oldtype); > - > - return result; > + return SYSCALL_CANCEL (sendto, fd, buf, n, flags, NULL, (size_t) 0); > } > > weak_alias (__libc_send, __send) >
diff --git a/sysdeps/unix/sysdep.h b/sysdeps/unix/sysdep.h index 5fa6580..52dad58 100644 --- a/sysdeps/unix/sysdep.h +++ b/sysdeps/unix/sysdep.h @@ -24,6 +24,27 @@ #define SYSCALL__(name, args) PSEUDO (__##name, name, args) #define SYSCALL(name, args) PSEUDO (name, name, args) +/* Cancellation macros. */ +#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,n,...) n +#define __SYSCALL_NARGS(...) \ + __SYSCALL_NARGS_X (__VA_ARGS__, 7, 6, 5, 4, 3, 2, 1, 0,) + +#define SYSCALL_CANCEL(name, ...) \ + ({ \ + long int sc_ret; \ + if (SINGLE_THREAD_P) \ + sc_ret = INLINE_SYSCALL (name, __SYSCALL_NARGS(__VA_ARGS__), \ + __VA_ARGS__); \ + else \ + { \ + int sc_cancel_oldtype = LIBC_CANCEL_ASYNC (); \ + sc_ret = INLINE_SYSCALL (name, __SYSCALL_NARGS (__VA_ARGS__), \ + __VA_ARGS__); \ + LIBC_CANCEL_RESET (sc_cancel_oldtype); \ + } \ + sc_ret; \ + }) + /* Machine-dependent sysdep.h files are expected to define the macro PSEUDO (function_name, syscall_name) to emit assembly code to define the C-callable function FUNCTION_NAME to do system call SYSCALL_NAME. @@ -31,7 +52,9 @@ an instruction such that "MOVE(r1, r0)" works. ret should be defined as the return instruction. */ +#ifndef SYS_ify #define SYS_ify(syscall_name) SYS_##syscall_name +#endif /* Terminate a system call named SYM. This is used on some platforms to generate correct debugging information. */ @@ -47,4 +70,6 @@ /* Wrappers around system calls should normally inline the system call code. But sometimes it is not possible or implemented and we use this code. */ +#ifndef INLINE_SYSCALL #define INLINE_SYSCALL(name, nr, args...) __syscall_##name (args) +#endif diff --git a/sysdeps/unix/sysv/linux/accept4.c b/sysdeps/unix/sysv/linux/accept4.c index 8e70b81..59293f9 100644 --- a/sysdeps/unix/sysv/linux/accept4.c +++ b/sysdeps/unix/sysv/linux/accept4.c @@ -37,17 +37,7 @@ int accept4 (int fd, __SOCKADDR_ARG addr, socklen_t *addr_len, int flags) { - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (accept4, 4, fd, addr.__sockaddr__, addr_len, flags); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = INLINE_SYSCALL (accept4, 4, fd, addr.__sockaddr__, addr_len, - flags); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (accept4, fd, addr.__sockaddr__, addr_len, flags); } #elif defined __NR_socketcall # include <socketcall.h> diff --git a/sysdeps/unix/sysv/linux/alpha/fdatasync.c b/sysdeps/unix/sysv/linux/alpha/fdatasync.c index c9424e2..c8b711e 100644 --- a/sysdeps/unix/sysv/linux/alpha/fdatasync.c +++ b/sysdeps/unix/sysv/linux/alpha/fdatasync.c @@ -26,39 +26,23 @@ #include <kernel-features.h> -static int -do_fdatasync (int fd) +int +__fdatasync (int fd) { #ifdef __ASSUME_FDATASYNC - return INLINE_SYSCALL (fdatasync, 1, fd); + return SYSCALL_CANCEL (fdatasync, fd); #elif defined __NR_fdatasync static int __have_no_fdatasync; if (!__builtin_expect (__have_no_fdatasync, 0)) { - int result = INLINE_SYSCALL (fdatasync, 1, fd); + int result = SYSCALL_CANCEL (fdatasync, fd); if (__builtin_expect (result, 0) != -1 || errno != ENOSYS) return result; __have_no_fdatasync = 1; } #endif - return INLINE_SYSCALL (fsync, 1, fd); -} - -int -__fdatasync (int fd) -{ - if (SINGLE_THREAD_P) - return do_fdatasync (fd); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = do_fdatasync (fd); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (fsync, fd); } - weak_alias (__fdatasync, fdatasync) diff --git a/sysdeps/unix/sysv/linux/arm/pread.c b/sysdeps/unix/sysv/linux/arm/pread.c index 64bc0a1..91b3c66 100644 --- a/sysdeps/unix/sysv/linux/arm/pread.c +++ b/sysdeps/unix/sysv/linux/arm/pread.c @@ -26,28 +26,10 @@ ssize_t __libc_pread (int fd, void *buf, size_t count, off_t offset) { - ssize_t result; - - if (SINGLE_THREAD_P) - { - /* In the ARM EABI, 64-bit values are aligned to even/odd register - pairs for syscalls. */ - result = INLINE_SYSCALL (pread64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - /* In the ARM EABI, 64-bit values are aligned to even/odd register pairs for syscalls. */ - result = INLINE_SYSCALL (pread64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pread64, fd, buf, count, 0, + __LONG_LONG_PAIR (offset >> 31, offset)); } strong_alias (__libc_pread, __pread) diff --git a/sysdeps/unix/sysv/linux/arm/pread64.c b/sysdeps/unix/sysv/linux/arm/pread64.c index 7860699..ca71feb 100644 --- a/sysdeps/unix/sysv/linux/arm/pread64.c +++ b/sysdeps/unix/sysv/linux/arm/pread64.c @@ -26,30 +26,11 @@ ssize_t __libc_pread64 (int fd, void *buf, size_t count, off64_t offset) { - ssize_t result; - - if (SINGLE_THREAD_P) - { - /* In the ARM EABI, 64-bit values are aligned to even/odd register - pairs for syscalls. */ - result = INLINE_SYSCALL (pread64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - /* In the ARM EABI, 64-bit values are aligned to even/odd register pairs for syscalls. */ - result = INLINE_SYSCALL (pread64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pread64, fd, buf, count, 0, + __LONG_LONG_PAIR ((off_t) (offset >> 32), + (off_t) (offset & 0xffffffff))); } weak_alias (__libc_pread64, __pread64) diff --git a/sysdeps/unix/sysv/linux/arm/pwrite.c b/sysdeps/unix/sysv/linux/arm/pwrite.c index 11a963c..e22e112 100644 --- a/sysdeps/unix/sysv/linux/arm/pwrite.c +++ b/sysdeps/unix/sysv/linux/arm/pwrite.c @@ -26,28 +26,10 @@ ssize_t __libc_pwrite (int fd, const void *buf, size_t count, off_t offset) { - ssize_t result; - - if (SINGLE_THREAD_P) - { - /* In the ARM EABI, 64-bit values are aligned to even/odd register - pairs for syscalls. */ - result = INLINE_SYSCALL (pwrite64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - /* In the ARM EABI, 64-bit values are aligned to even/odd register pairs for syscalls. */ - result = INLINE_SYSCALL (pwrite64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pwrite64, fd, buf, count, 0, + __LONG_LONG_PAIR (offset >> 31, offset)); } strong_alias (__libc_pwrite, __pwrite) diff --git a/sysdeps/unix/sysv/linux/arm/pwrite64.c b/sysdeps/unix/sysv/linux/arm/pwrite64.c index 9cb67ff..b63fbc8 100644 --- a/sysdeps/unix/sysv/linux/arm/pwrite64.c +++ b/sysdeps/unix/sysv/linux/arm/pwrite64.c @@ -26,30 +26,11 @@ ssize_t __libc_pwrite64 (int fd, const void *buf, size_t count, off64_t offset) { - ssize_t result; - - if (SINGLE_THREAD_P) - { - /* In the ARM EABI, 64-bit values are aligned to even/odd register - pairs for syscalls. */ - result = INLINE_SYSCALL (pwrite64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - /* In the ARM EABI, 64-bit values are aligned to even/odd register pairs for syscalls. */ - result = INLINE_SYSCALL (pwrite64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pwrite64, fd, buf, count, 0, + __LONG_LONG_PAIR ((off_t) (offset >> 32), + (off_t) (offset & 0xffffffff))); } weak_alias (__libc_pwrite64, __pwrite64) diff --git a/sysdeps/unix/sysv/linux/epoll_pwait.c b/sysdeps/unix/sysv/linux/epoll_pwait.c index 65fefec..0e39013 100644 --- a/sysdeps/unix/sysv/linux/epoll_pwait.c +++ b/sysdeps/unix/sysv/linux/epoll_pwait.c @@ -39,18 +39,8 @@ int epoll_pwait (int epfd, struct epoll_event *events, int maxevents, int timeout, const sigset_t *set) { - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (epoll_pwait, 6, epfd, events, maxevents, timeout, - set, _NSIG / 8); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = INLINE_SYSCALL (epoll_pwait, 6, epfd, events, maxevents, - timeout, set, _NSIG / 8); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (epoll_pwait, epfd, events, maxevents, + timeout, set, _NSIG / 8); } #else diff --git a/sysdeps/unix/sysv/linux/fallocate.c b/sysdeps/unix/sysv/linux/fallocate.c index e9668bf..f3de90c 100644 --- a/sysdeps/unix/sysv/linux/fallocate.c +++ b/sysdeps/unix/sysv/linux/fallocate.c @@ -25,21 +25,9 @@ int fallocate (int fd, int mode, __off_t offset, __off_t len) { #ifdef __NR_fallocate - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (fallocate, 6, fd, mode, - __LONG_LONG_PAIR (offset >> 31, offset), - __LONG_LONG_PAIR (len >> 31, len)); - - int result; - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (fallocate, 6, fd, mode, - __LONG_LONG_PAIR (offset >> 31, offset), - __LONG_LONG_PAIR (len >> 31, len)); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (fallocate, fd, mode, + __LONG_LONG_PAIR (offset >> 31, offset), + __LONG_LONG_PAIR (len >> 31, len)); #else __set_errno (ENOSYS); return -1; diff --git a/sysdeps/unix/sysv/linux/fallocate64.c b/sysdeps/unix/sysv/linux/fallocate64.c index 96acb28..191fa57 100644 --- a/sysdeps/unix/sysv/linux/fallocate64.c +++ b/sysdeps/unix/sysv/linux/fallocate64.c @@ -25,25 +25,11 @@ int fallocate64 (int fd, int mode, __off64_t offset, __off64_t len) { #ifdef __NR_fallocate - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (fallocate, 6, fd, mode, - __LONG_LONG_PAIR ((long int) (offset >> 32), - (long int) offset), - __LONG_LONG_PAIR ((long int) (len >> 32), - (long int) len)); - - int result; - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (fallocate, 6, fd, mode, - __LONG_LONG_PAIR ((long int) (offset >> 32), - (long int) offset), - __LONG_LONG_PAIR ((long int) (len >> 32), - (long int) len)); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (fallocate, fd, mode, + __LONG_LONG_PAIR ((long int) (offset >> 32), + (long int) offset), + __LONG_LONG_PAIR ((long int) (len >> 32), + (long int) len)); #else __set_errno (ENOSYS); return -1; diff --git a/sysdeps/unix/sysv/linux/generic/open.c b/sysdeps/unix/sysv/linux/generic/open.c index 289f57a..66cc2ed 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 374e41c..402bc7c 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 7966df2..45d3a0e 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 7ef42f3..2a95796 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 d827b3e..3786172 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 455c308..f7f1e18 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 dfbdc09..fed6961 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 160804c..11da9d2 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 ad97e97..6f9703c 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 7250893..a3f8ec1 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 9a1832a..d127fee 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 df1c010..7e7ebf7 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 e897c7d..2f0f7a1 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 3ac1339..f222016 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 db1e4cb..273b0ff 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 eb85e07..9d3fa75 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) diff --git a/sysdeps/unix/sysv/linux/i386/fcntl.c b/sysdeps/unix/sysv/linux/i386/fcntl.c index 9132c5a..56f4bd1 100644 --- a/sysdeps/unix/sysv/linux/i386/fcntl.c +++ b/sysdeps/unix/sysv/linux/i386/fcntl.c @@ -49,16 +49,10 @@ __libc_fcntl (int fd, int cmd, ...) arg = va_arg (ap, void *); va_end (ap); - if (SINGLE_THREAD_P || (cmd != F_SETLKW && cmd != F_SETLKW64)) + if ((cmd != F_SETLKW) && (cmd != F_SETLKW64)) return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg); - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (fcntl64, fd, cmd, arg); } libc_hidden_def (__libc_fcntl) diff --git a/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c b/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c index 3c91d15..b79e44d 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c +++ b/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c @@ -28,23 +28,10 @@ int sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) { - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (sync_file_range, 7, fd, 0, - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), - __LONG_LONG_PAIR ((long) (to >> 32), (long) to), - flags); - - int result; - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (sync_file_range, 7, fd, 0, - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), - __LONG_LONG_PAIR ((long) (to >> 32), (long) to), - flags); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (sync_file_range, fd, 0, + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), + __LONG_LONG_PAIR ((long) (to >> 32), (long) to), + flags); } #else int diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c index 2331cec..ce29a0e 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c @@ -25,17 +25,7 @@ int fallocate (int fd, int mode, __off_t offset, __off_t len) { #ifdef __NR_fallocate - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); - - int result; - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (fallocate, fd, mode, offset, len); #else __set_errno (ENOSYS); return -1; diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c index d3ed5d1..077127e 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c @@ -25,17 +25,7 @@ int fallocate64 (int fd, int mode, __off64_t offset, __off64_t len) { #ifdef __NR_fallocate - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); - - int result; - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (fallocate, fd, mode, offset, len); #else __set_errno (ENOSYS); return -1; diff --git a/sysdeps/unix/sysv/linux/mips/pread.c b/sysdeps/unix/sysv/linux/mips/pread.c index a7b1618..0bd712d 100644 --- a/sysdeps/unix/sysv/linux/mips/pread.c +++ b/sysdeps/unix/sysv/linux/mips/pread.c @@ -38,35 +38,16 @@ ssize_t __libc_pread (int fd, void *buf, size_t count, off_t offset) { - ssize_t result; - #if _MIPS_SIM != _ABI64 assert (sizeof (offset) == 4); #endif - if (SINGLE_THREAD_P) - { -#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 - result = INLINE_SYSCALL (pread, 4, fd, buf, count, offset); -#else - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); -#endif - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - #if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 - result = INLINE_SYSCALL (pread, 4, fd, buf, count, offset); + return SYSCALL_CANCEL (pread, fd, buf, count, offset); #else - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); + return SYSCALL_CANCEL (pread, fd, buf, count, 0, + __LONG_LONG_PAIR (offset >> 31, offset)); #endif - - LIBC_CANCEL_RESET (oldtype); - - return result; } strong_alias (__libc_pread, __pread) diff --git a/sysdeps/unix/sysv/linux/mips/pread64.c b/sysdeps/unix/sysv/linux/mips/pread64.c index ad948aa..3ed100b 100644 --- a/sysdeps/unix/sysv/linux/mips/pread64.c +++ b/sysdeps/unix/sysv/linux/mips/pread64.c @@ -37,34 +37,13 @@ ssize_t __libc_pread64 (int fd, void *buf, size_t count, off64_t offset) { - ssize_t result; - - - if (SINGLE_THREAD_P) - { #if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 - result = INLINE_SYSCALL (pread, 4, fd, buf, count, offset); + return SYSCALL_CANCEL (pread, fd, buf, count, offset); #else - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); + return SYSCALL_CANCEL (pread, fd, buf, count, 0, + __LONG_LONG_PAIR ((off_t) (offset >> 32), + (off_t) (offset & 0xffffffff))); #endif - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - -#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 - result = INLINE_SYSCALL (pread, 4, fd, buf, count, offset); -#else - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); -#endif - - LIBC_CANCEL_RESET (oldtype); - - return result; } weak_alias (__libc_pread64, __pread64) diff --git a/sysdeps/unix/sysv/linux/mips/pwrite.c b/sysdeps/unix/sysv/linux/mips/pwrite.c index 2c38e04..f4d71d4 100644 --- a/sysdeps/unix/sysv/linux/mips/pwrite.c +++ b/sysdeps/unix/sysv/linux/mips/pwrite.c @@ -38,35 +38,16 @@ ssize_t __libc_pwrite (int fd, const void *buf, size_t count, off_t offset) { - ssize_t result; - #if _MIPS_SIM != _ABI64 assert (sizeof (offset) == 4); #endif - if (SINGLE_THREAD_P) - { -#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 - result = INLINE_SYSCALL (pwrite, 4, fd, buf, count, offset); -#else - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); -#endif - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - #if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 - result = INLINE_SYSCALL (pwrite, 4, fd, buf, count, offset); + return SYSCALL_CANCEL (pwrite, fd, buf, count, offset); #else - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); + return SYSCALL_CANCEL (pwrite, fd, buf, count, 0, + __LONG_LONG_PAIR (offset >> 31, offset)); #endif - - LIBC_CANCEL_RESET (oldtype); - - return result; } strong_alias (__libc_pwrite, __pwrite) diff --git a/sysdeps/unix/sysv/linux/mips/pwrite64.c b/sysdeps/unix/sysv/linux/mips/pwrite64.c index 504c88a..ac0dc40 100644 --- a/sysdeps/unix/sysv/linux/mips/pwrite64.c +++ b/sysdeps/unix/sysv/linux/mips/pwrite64.c @@ -37,34 +37,13 @@ ssize_t __libc_pwrite64 (int fd, const void *buf, size_t count, off64_t offset) { - ssize_t result; - - if (SINGLE_THREAD_P) - { #if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 - result = INLINE_SYSCALL (pwrite, 4, fd, buf, count, offset); + return SYSCALL_CANCEL (pwrite, fd, buf, count, offset); #else - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); + return SYSCALL_CANCEL (pwrite, fd, buf, count, 0, + __LONG_LONG_PAIR ((off_t) (offset >> 32), + (off_t) (offset & 0xffffffff))); #endif - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - -#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 - result = INLINE_SYSCALL (pwrite, 4, fd, buf, count, offset); -#else - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); -#endif - - LIBC_CANCEL_RESET (oldtype); - - return result; } weak_alias (__libc_pwrite64, __pwrite64) diff --git a/sysdeps/unix/sysv/linux/msgrcv.c b/sysdeps/unix/sysv/linux/msgrcv.c index 1c3698c..660ff29 100644 --- a/sysdeps/unix/sysv/linux/msgrcv.c +++ b/sysdeps/unix/sysv/linux/msgrcv.c @@ -43,16 +43,6 @@ __libc_msgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp, tmp.msgp = msgp; tmp.msgtyp = msgtyp; - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (ipc, 5, IPCOP_msgrcv, msqid, msgsz, msgflg, &tmp); - - int oldtype = LIBC_CANCEL_ASYNC (); - - ssize_t result = INLINE_SYSCALL (ipc, 5, IPCOP_msgrcv, msqid, msgsz, msgflg, - &tmp); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (ipc, IPCOP_msgrcv, msqid, msgsz, msgflg, &tmp); } weak_alias (__libc_msgrcv, msgrcv) diff --git a/sysdeps/unix/sysv/linux/msgsnd.c b/sysdeps/unix/sysv/linux/msgsnd.c index d548aab..dfed539 100644 --- a/sysdeps/unix/sysv/linux/msgsnd.c +++ b/sysdeps/unix/sysv/linux/msgsnd.c @@ -26,17 +26,7 @@ int __libc_msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg) { - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (ipc, 5, IPCOP_msgsnd, msqid, msgsz, - msgflg, (void *) msgp); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = INLINE_SYSCALL (ipc, 5, IPCOP_msgsnd, msqid, msgsz, - msgflg, (void *) msgp); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (ipc, IPCOP_msgsnd, msqid, msgsz, msgflg, + (void *) msgp); } weak_alias (__libc_msgsnd, msgsnd) diff --git a/sysdeps/unix/sysv/linux/open64.c b/sysdeps/unix/sysv/linux/open64.c index d3ab813..b90294a 100644 --- a/sysdeps/unix/sysv/linux/open64.c +++ b/sysdeps/unix/sysv/linux/open64.c @@ -36,16 +36,7 @@ __libc_open64 (const char *file, int oflag, ...) va_end (arg); } - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (open, 3, file, oflag | O_LARGEFILE, mode); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = INLINE_SYSCALL (open, 3, file, oflag | O_LARGEFILE, mode); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (open, file, oflag | O_LARGEFILE, mode); } weak_alias (__libc_open64, __open64) libc_hidden_weak (__open64) diff --git a/sysdeps/unix/sysv/linux/openat.c b/sysdeps/unix/sysv/linux/openat.c index 30d8e6e..6777123 100644 --- a/sysdeps/unix/sysv/linux/openat.c +++ b/sysdeps/unix/sysv/linux/openat.c @@ -68,16 +68,7 @@ __OPENAT (int fd, const char *file, int oflag, ...) va_end (arg); } - if (SINGLE_THREAD_P) - return OPENAT_NOT_CANCEL (fd, file, oflag, mode); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int res = OPENAT_NOT_CANCEL (fd, file, oflag, mode); - - LIBC_CANCEL_RESET (oldtype); - - return res; + return SYSCALL_CANCEL (openat, fd, file, oflag, mode); } libc_hidden_def (__OPENAT) weak_alias (__OPENAT, OPENAT) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c index 10763f5..f6b7f43 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c @@ -26,26 +26,8 @@ ssize_t __libc_pread (int fd, void *buf, size_t count, off_t offset) { - ssize_t result; - - if (SINGLE_THREAD_P) - { - /* On PPC32 64bit values are aligned in odd/even register pairs. */ - result = INLINE_SYSCALL (pread, 6, fd, buf, count, - 0, offset >> 31, offset); - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - /* On PPC32 64bit values are aligned in odd/even register pairs. */ - result = INLINE_SYSCALL (pread, 6, fd, buf, count, - 0, offset >> 31, offset); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pread, fd, buf, count, 0, offset >> 31, offset); } strong_alias (__libc_pread, __pread) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c index f3dc7e5..75ee34b 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c @@ -26,28 +26,9 @@ ssize_t __libc_pread64 (int fd, void *buf, size_t count, off64_t offset) { - ssize_t result; - - if (SINGLE_THREAD_P) - { - /* On PPC32 64bit values are aligned in odd/even register pairs. */ - result = INLINE_SYSCALL (pread, 6, fd, buf, count, - 0, (long) (offset >> 32), - (long) offset); - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - /* On PPC32 64bit values are aligned in odd/even register pairs. */ - result = INLINE_SYSCALL (pread, 6, fd, buf, count, - 0, (long) (offset >> 32), - (long) offset); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pread, fd, buf, count, 0, (long) (offset >> 32), + (long) offset); } weak_alias (__libc_pread64, __pread64) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c index 65109ed..fc822d7 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c @@ -27,26 +27,8 @@ ssize_t __libc_pwrite (int fd, const void *buf, size_t count, off_t offset) { - ssize_t result; - - if (SINGLE_THREAD_P) - { - /* On PPC32 64bit values are aligned in odd/even register pairs. */ - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, - 0, offset >> 31, offset); - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - /* On PPC32 64bit values are aligned in odd/even register pairs. */ - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, - 0, offset >> 31, offset); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pwrite, fd, buf, count, 0, offset >> 31, offset); } strong_alias (__libc_pwrite, __pwrite) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c index 77749c9..dbeaed8 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c @@ -26,28 +26,9 @@ ssize_t __libc_pwrite64 (int fd, const void *buf, size_t count, off64_t offset) { - ssize_t result; - - if (SINGLE_THREAD_P) - { /* On PPC32 64bit values are aligned in odd/even register pairs. */ - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, - 0, (long) (offset >> 32), - (long) offset); - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - - /* On PPC32 64bit values are aligned in odd/even register pairs. */ - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, - 0, (long) (offset >> 32), - (long) offset); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pwrite, fd, buf, count, 0, (long) (offset >> 32), + (long) offset); } weak_alias (__libc_pwrite64, __pwrite64) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c index a4f90b6..69031ba 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c @@ -53,16 +53,10 @@ __libc_fcntl (int fd, int cmd, ...) if (cmd >= F_GETLK64 && cmd <= F_SETLKW64) cmd -= F_GETLK64 - F_GETLK; - if (SINGLE_THREAD_P || cmd != F_SETLKW) + if (cmd != F_SETLKW) return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg); - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = INLINE_SYSCALL (fcntl, 3, fd, cmd, arg); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (fcntl, fd, cmd, arg); } libc_hidden_def (__libc_fcntl) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c index 18bb0dd..9f46458 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c @@ -28,17 +28,7 @@ int sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) { - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (sync_file_range2, 4, fd, flags, from, to); - - int result; - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (sync_file_range2, 4, fd, flags, from, to); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (sync_file_range2, fd, flags, from, to); } #else int diff --git a/sysdeps/unix/sysv/linux/ppoll.c b/sysdeps/unix/sysv/linux/ppoll.c index 6e83424..77a2e7e 100644 --- a/sysdeps/unix/sysv/linux/ppoll.c +++ b/sysdeps/unix/sysv/linux/ppoll.c @@ -47,17 +47,7 @@ ppoll (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, int result; - if (SINGLE_THREAD_P) - result = INLINE_SYSCALL (ppoll, 5, fds, nfds, timeout, sigmask, _NSIG / 8); - else - { - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (ppoll, 5, fds, nfds, timeout, sigmask, - _NSIG / 8); - - LIBC_CANCEL_RESET (oldtype); - } + result = SYSCALL_CANCEL (ppoll, fds, nfds, timeout, sigmask, _NSIG / 8); # ifndef __ASSUME_PPOLL if (result == -1 && errno == ENOSYS) diff --git a/sysdeps/unix/sysv/linux/pread.c b/sysdeps/unix/sysv/linux/pread.c index 5c1b174..09389e4 100644 --- a/sysdeps/unix/sysv/linux/pread.c +++ b/sysdeps/unix/sysv/linux/pread.c @@ -32,36 +32,17 @@ #endif -static ssize_t -#ifdef NO_CANCELLATION -inline __attribute ((always_inline)) -#endif -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) { ssize_t result; assert (sizeof (offset) == 4); - result = INLINE_SYSCALL (pread, 5, fd, buf, count, + result = SYSCALL_CANCEL (pread, fd, buf, count, __LONG_LONG_PAIR (offset >> 31, offset)); return result; } - -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/pread64.c b/sysdeps/unix/sysv/linux/pread64.c index a8cfb5d..baf2355 100644 --- a/sysdeps/unix/sysv/linux/pread64.c +++ b/sysdeps/unix/sysv/linux/pread64.c @@ -31,32 +31,12 @@ #endif -static ssize_t -do_pread64 (int fd, void *buf, size_t count, off64_t offset) -{ - ssize_t result; - - result = INLINE_SYSCALL (pread, 5, fd, buf, count, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - - return result; -} - - 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 (pread, fd, buf, count, + __LONG_LONG_PAIR ((off_t) (offset >> 32), + (off_t) (offset & 0xffffffff))); } weak_alias (__libc_pread64, __pread64) diff --git a/sysdeps/unix/sysv/linux/preadv.c b/sysdeps/unix/sysv/linux/preadv.c index 091f9a7..2d08be4 100644 --- a/sysdeps/unix/sysv/linux/preadv.c +++ b/sysdeps/unix/sysv/linux/preadv.c @@ -53,18 +53,8 @@ PREADV (int fd, const struct iovec *vector, int count, OFF_T offset) #ifdef __NR_preadv ssize_t result; - if (SINGLE_THREAD_P) - result = INLINE_SYSCALL (preadv, 5, fd, vector, count, - LO_HI_LONG (offset)); - else - { - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (preadv, 5, fd, vector, count, - LO_HI_LONG (offset)); - - LIBC_CANCEL_RESET (oldtype); - } + result = SYSCALL_CANCEL (preadv, fd, vector, count, LO_HI_LONG (offset)); + # ifdef __ASSUME_PREADV return result; # endif diff --git a/sysdeps/unix/sysv/linux/pselect.c b/sysdeps/unix/sysv/linux/pselect.c index f342a13..30d51d7 100644 --- a/sysdeps/unix/sysv/linux/pselect.c +++ b/sysdeps/unix/sysv/linux/pselect.c @@ -63,22 +63,11 @@ __pselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, #ifndef CALL_PSELECT6 # define CALL_PSELECT6(nfds, readfds, writefds, exceptfds, timeout, data) \ - INLINE_SYSCALL (pselect6, 6, nfds, readfds, writefds, exceptfds, \ - timeout, data) + SYSCALL_CANCEL (pselect6, nfds, readfds, writefds, exceptfds, timeout, data) #endif - if (SINGLE_THREAD_P) - result = CALL_PSELECT6 (nfds, readfds, writefds, exceptfds, timeout, - &data); - else - { - int oldtype = LIBC_CANCEL_ASYNC (); - - result = CALL_PSELECT6 (nfds, readfds, writefds, exceptfds, timeout, - &data); - - LIBC_CANCEL_RESET (oldtype); - } + result = CALL_PSELECT6 (nfds, readfds, writefds, exceptfds, timeout, + &data); # ifndef __ASSUME_PSELECT if (result == -1 && errno == ENOSYS) diff --git a/sysdeps/unix/sysv/linux/pwrite.c b/sysdeps/unix/sysv/linux/pwrite.c index 80c2e22..b77985d 100644 --- a/sysdeps/unix/sysv/linux/pwrite.c +++ b/sysdeps/unix/sysv/linux/pwrite.c @@ -32,36 +32,17 @@ #endif -static ssize_t -#ifdef NO_CANCELLATION -inline __attribute ((always_inline)) -#endif -do_pwrite (int fd, const void *buf, size_t count, off_t offset) +ssize_t +__libc_pwrite (int fd, const void *buf, size_t count, off_t offset) { ssize_t result; assert (sizeof (offset) == 4); - result = INLINE_SYSCALL (pwrite, 5, fd, buf, count, + result = SYSCALL_CANCEL (pwrite, fd, buf, count, __LONG_LONG_PAIR (offset >> 31, offset)); return result; } - -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; -} - strong_alias (__libc_pwrite, __pwrite) weak_alias (__libc_pwrite, pwrite) diff --git a/sysdeps/unix/sysv/linux/pwrite64.c b/sysdeps/unix/sysv/linux/pwrite64.c index 7fce75a..a5d0fb7 100644 --- a/sysdeps/unix/sysv/linux/pwrite64.c +++ b/sysdeps/unix/sysv/linux/pwrite64.c @@ -31,34 +31,13 @@ #endif -static ssize_t -do_pwrite64 (int fd, const void *buf, size_t count, off64_t offset) -{ - ssize_t result; - - result = INLINE_SYSCALL (pwrite, 5, fd, buf, count, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - - return result; -} - - 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 (pwrite, fd, buf, count, + __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/pwritev.c b/sysdeps/unix/sysv/linux/pwritev.c index 91e58b5..7aa9238 100644 --- a/sysdeps/unix/sysv/linux/pwritev.c +++ b/sysdeps/unix/sysv/linux/pwritev.c @@ -53,18 +53,8 @@ PWRITEV (int fd, const struct iovec *vector, int count, OFF_T offset) #ifdef __NR_pwritev ssize_t result; - if (SINGLE_THREAD_P) - result = INLINE_SYSCALL (pwritev, 5, fd, vector, count, - LO_HI_LONG (offset)); - else - { - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (pwritev, 5, fd, vector, count, - LO_HI_LONG (offset)); - - LIBC_CANCEL_RESET (oldtype); - } + result = SYSCALL_CANCEL (pwritev, fd, vector, count, LO_HI_LONG (offset)); + # ifdef __ASSUME_PWRITEV return result; # endif diff --git a/sysdeps/unix/sysv/linux/recvmmsg.c b/sysdeps/unix/sysv/linux/recvmmsg.c index 73b3ee0..4063368 100644 --- a/sysdeps/unix/sysv/linux/recvmmsg.c +++ b/sysdeps/unix/sysv/linux/recvmmsg.c @@ -37,16 +37,7 @@ int recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags, struct timespec *tmo) { - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (recvmmsg, 5, fd, vmessages, vlen, flags, tmo); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = INLINE_SYSCALL (recvmmsg, 5, fd, vmessages, vlen, flags, tmo); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (recvmmsg, fd, vmessages, vlen, flags, tmo); } #elif defined __NR_socketcall # include <socketcall.h> diff --git a/sysdeps/unix/sysv/linux/sendmmsg.c b/sysdeps/unix/sysv/linux/sendmmsg.c index 7bad328..dc0aa75 100644 --- a/sysdeps/unix/sysv/linux/sendmmsg.c +++ b/sysdeps/unix/sysv/linux/sendmmsg.c @@ -36,16 +36,7 @@ int __sendmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags) { - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (sendmmsg, 4, fd, vmessages, vlen, flags); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = INLINE_SYSCALL (sendmmsg, 4, fd, vmessages, vlen, flags); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (sendmmsg, fd, vmessages, vlen, flags); } libc_hidden_def (__sendmmsg) weak_alias (__sendmmsg, sendmmsg) diff --git a/sysdeps/unix/sysv/linux/sh/pread.c b/sysdeps/unix/sysv/linux/sh/pread.c index 9d4b5de..2f926b3 100644 --- a/sysdeps/unix/sysv/linux/sh/pread.c +++ b/sysdeps/unix/sysv/linux/sh/pread.c @@ -35,23 +35,8 @@ ssize_t __libc_pread (int fd, void *buf, size_t count, off_t offset) { - ssize_t result; - - if (SINGLE_THREAD_P) - { - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pread, fd, buf, count, 0, + __LONG_LONG_PAIR (offset >> 31, offset)); } strong_alias (__libc_pread, __pread) diff --git a/sysdeps/unix/sysv/linux/sh/pread64.c b/sysdeps/unix/sysv/linux/sh/pread64.c index 195eacc..697718d 100644 --- a/sysdeps/unix/sysv/linux/sh/pread64.c +++ b/sysdeps/unix/sysv/linux/sh/pread64.c @@ -34,25 +34,9 @@ ssize_t __libc_pread64 (int fd, void *buf, size_t count, off64_t offset) { - ssize_t result; - - if (SINGLE_THREAD_P) - { - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (pread, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pread, fd, buf, count, 0, + __LONG_LONG_PAIR ((off_t) (offset >> 32), + (off_t) (offset & 0xffffffff))); } weak_alias (__libc_pread64, __pread64) diff --git a/sysdeps/unix/sysv/linux/sh/pwrite.c b/sysdeps/unix/sysv/linux/sh/pwrite.c index c187d0a..fcbb7fc 100644 --- a/sysdeps/unix/sysv/linux/sh/pwrite.c +++ b/sysdeps/unix/sysv/linux/sh/pwrite.c @@ -35,23 +35,8 @@ ssize_t __libc_pwrite (int fd, const void *buf, size_t count, off_t offset) { - ssize_t result; - - if (SINGLE_THREAD_P) - { - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pwrite, fd, buf, count, 0, + __LONG_LONG_PAIR (offset >> 31, offset)); } strong_alias (__libc_pwrite, __pwrite) diff --git a/sysdeps/unix/sysv/linux/sh/pwrite64.c b/sysdeps/unix/sysv/linux/sh/pwrite64.c index 0d15ca2..0c189fe 100644 --- a/sysdeps/unix/sysv/linux/sh/pwrite64.c +++ b/sysdeps/unix/sysv/linux/sh/pwrite64.c @@ -34,26 +34,9 @@ ssize_t __libc_pwrite64 (int fd, const void *buf, size_t count, off64_t offset) { - ssize_t result; - - if (SINGLE_THREAD_P) - { - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (pwrite, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (pwrite, fd, buf, count, 0, + __LONG_LONG_PAIR ((off_t) (offset >> 32), + (off_t) (offset & 0xffffffff))); } weak_alias (__libc_pwrite64, __pwrite64) diff --git a/sysdeps/unix/sysv/linux/sigsuspend.c b/sysdeps/unix/sysv/linux/sigsuspend.c index 89c5d65..9047623 100644 --- a/sysdeps/unix/sysv/linux/sigsuspend.c +++ b/sysdeps/unix/sysv/linux/sigsuspend.c @@ -22,38 +22,13 @@ #include <sysdep-cancel.h> #include <sys/syscall.h> - -static inline int __attribute__ ((always_inline)) -do_sigsuspend (const sigset_t *set) -{ - return INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8); -} - /* Change the set of blocked signals to SET, wait until a signal arrives, and restore the set of blocked signals. */ int __sigsuspend (const sigset_t *set) { - if (SINGLE_THREAD_P) - return do_sigsuspend (set); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = do_sigsuspend (set); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (rt_sigsuspend, set, _NSIG / 8); } libc_hidden_def (__sigsuspend) weak_alias (__sigsuspend, sigsuspend) strong_alias (__sigsuspend, __libc_sigsuspend) - -#ifndef NO_CANCELLATION -int -__sigsuspend_nocancel (set) - const sigset_t *set; -{ - return do_sigsuspend (set); -} -#endif diff --git a/sysdeps/unix/sysv/linux/sigtimedwait.c b/sysdeps/unix/sysv/linux/sigtimedwait.c index 209198e..a2e5b41 100644 --- a/sysdeps/unix/sysv/linux/sigtimedwait.c +++ b/sysdeps/unix/sysv/linux/sigtimedwait.c @@ -25,9 +25,9 @@ #ifdef __NR_rt_sigtimedwait -static int -do_sigtimedwait (const sigset_t *set, siginfo_t *info, - const struct timespec *timeout) +int +__sigtimedwait (const sigset_t *set, siginfo_t *info, + const struct timespec *timeout) { #ifdef SIGCANCEL sigset_t tmpset; @@ -51,8 +51,7 @@ do_sigtimedwait (const sigset_t *set, siginfo_t *info, /* XXX The size argument hopefully will have to be changed to the real size of the user-level sigset_t. */ - int result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, - info, timeout, _NSIG / 8); + int result = SYSCALL_CANCEL (rt_sigtimedwait, set, info, timeout, _NSIG / 8); /* The kernel generates a SI_TKILL code in si_code in case tkill is used. tkill is transparently used in raise(). Since having @@ -63,26 +62,6 @@ do_sigtimedwait (const sigset_t *set, siginfo_t *info, return result; } - - -/* Return any pending signal or wait for one for the given time. */ -int -__sigtimedwait (const sigset_t *set, siginfo_t *info, - const struct timespec *timeout) -{ - if (SINGLE_THREAD_P) - return do_sigtimedwait (set, info, timeout); - - int oldtype = LIBC_CANCEL_ASYNC (); - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - int result = do_sigtimedwait (set, info, timeout); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} libc_hidden_def (__sigtimedwait) weak_alias (__sigtimedwait, sigtimedwait) #else diff --git a/sysdeps/unix/sysv/linux/sigwaitinfo.c b/sysdeps/unix/sysv/linux/sigwaitinfo.c index fe23c9f..47e6dd6 100644 --- a/sysdeps/unix/sysv/linux/sigwaitinfo.c +++ b/sysdeps/unix/sysv/linux/sigwaitinfo.c @@ -27,8 +27,9 @@ #ifdef __NR_rt_sigtimedwait -static int -do_sigwaitinfo (const sigset_t *set, siginfo_t *info) +/* Return any pending signal or wait for one for the given time. */ +int +__sigwaitinfo (const sigset_t *set, siginfo_t *info) { #ifdef SIGCANCEL sigset_t tmpset; @@ -52,8 +53,7 @@ do_sigwaitinfo (const sigset_t *set, siginfo_t *info) /* XXX The size argument hopefully will have to be changed to the real size of the user-level sigset_t. */ - int result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, - info, NULL, _NSIG / 8); + int result = SYSCALL_CANCEL (rt_sigtimedwait, set, info, NULL, _NSIG / 8); /* The kernel generates a SI_TKILL code in si_code in case tkill is used. tkill is transparently used in raise(). Since having @@ -65,24 +65,6 @@ do_sigwaitinfo (const sigset_t *set, siginfo_t *info) return result; } - -/* Return any pending signal or wait for one for the given time. */ -int -__sigwaitinfo (const sigset_t *set, siginfo_t *info) -{ - if (SINGLE_THREAD_P) - return do_sigwaitinfo (set, info); - - int oldtype = LIBC_CANCEL_ASYNC (); - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - int result = do_sigwaitinfo (set, info); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} libc_hidden_def (__sigwaitinfo) weak_alias (__sigwaitinfo, sigwaitinfo) #else diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c b/sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c index 8928060..169ac53 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c @@ -26,17 +26,7 @@ ssize_t __libc_msgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp, int msgflg) { - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (ipc, 6, IPCOP_msgrcv, msqid, msgsz, msgflg, - msgp, msgtyp); - - int oldtype = LIBC_CANCEL_ASYNC (); - - ssize_t result = INLINE_SYSCALL (ipc, 6, IPCOP_msgrcv, msqid, msgsz, msgflg, - msgp, msgtyp); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (ipc, IPCOP_msgrcv, msqid, msgsz, msgflg, + msgp, msgtyp); } weak_alias (__libc_msgrcv, msgrcv) diff --git a/sysdeps/unix/sysv/linux/sync_file_range.c b/sysdeps/unix/sysv/linux/sync_file_range.c index c07ece0..2ea6dcf 100644 --- a/sysdeps/unix/sysv/linux/sync_file_range.c +++ b/sysdeps/unix/sysv/linux/sync_file_range.c @@ -28,43 +28,18 @@ int sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) { - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (sync_file_range, 6, fd, - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), - __LONG_LONG_PAIR ((long) (to >> 32), (long) to), - flags); - - int result; - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (sync_file_range, 6, fd, - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), - __LONG_LONG_PAIR ((long) (to >> 32), (long) to), - flags); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (sync_file_range, fd, + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), + __LONG_LONG_PAIR ((long) (to >> 32), (long) to), + flags); } #elif defined __NR_sync_file_range2 int sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) { - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (sync_file_range2, 6, fd, flags, - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), - __LONG_LONG_PAIR ((long) (to >> 32), (long) to)); - - int result; - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (sync_file_range2, 6, fd, flags, - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), - __LONG_LONG_PAIR ((long) (to >> 32), (long) to)); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (sync_file_range2, fd, flags, + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), + __LONG_LONG_PAIR ((long) (to >> 32), (long) to)); } #else int diff --git a/sysdeps/unix/sysv/linux/tcdrain.c b/sysdeps/unix/sysv/linux/tcdrain.c index c0f2e1d..f60dd4d 100644 --- a/sysdeps/unix/sysv/linux/tcdrain.c +++ b/sysdeps/unix/sysv/linux/tcdrain.c @@ -24,17 +24,7 @@ int __libc_tcdrain (int fd) { - if (SINGLE_THREAD_P) - /* With an argument of 1, TCSBRK for output to be drain. */ - return INLINE_SYSCALL (ioctl, 3, fd, TCSBRK, 1); - - int oldtype = LIBC_CANCEL_ASYNC (); - /* With an argument of 1, TCSBRK for output to be drain. */ - int result = INLINE_SYSCALL (ioctl, 3, fd, TCSBRK, 1); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (ioctl, fd, TCSBRK, 1); } weak_alias (__libc_tcdrain, tcdrain) diff --git a/sysdeps/unix/sysv/linux/timer_routines.c b/sysdeps/unix/sysv/linux/timer_routines.c index 4401a8b..4cf6eca 100644 --- a/sysdeps/unix/sysv/linux/timer_routines.c +++ b/sysdeps/unix/sysv/linux/timer_routines.c @@ -20,7 +20,7 @@ #include <setjmp.h> #include <signal.h> #include <stdbool.h> -#include <sysdep.h> +#include <sysdep-cancel.h> #include <nptl/pthreadP.h> #include "kernel-posix-timers.h" @@ -84,14 +84,9 @@ timer_helper_thread (void *arg) /* sigwaitinfo cannot be used here, since it deletes SIGCANCEL == SIGTIMER from the set. */ - int oldtype = LIBC_CANCEL_ASYNC (); - /* XXX The size argument hopefully will have to be changed to the real size of the user-level sigset_t. */ - int result = INLINE_SYSCALL (rt_sigtimedwait, 4, &ss, &si, NULL, - _NSIG / 8); - - LIBC_CANCEL_RESET (oldtype); + int result = SYSCALL_CANCEL (rt_sigtimedwait, &ss, &si, NULL, _NSIG / 8); if (result > 0) { diff --git a/sysdeps/unix/sysv/linux/wait.c b/sysdeps/unix/sysv/linux/wait.c index 029d975..5b76c7c 100644 --- a/sysdeps/unix/sysv/linux/wait.c +++ b/sysdeps/unix/sysv/linux/wait.c @@ -26,17 +26,8 @@ pid_t __libc_wait (__WAIT_STATUS_DEFN stat_loc) { - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (wait4, 4, WAIT_ANY, stat_loc, 0, - (struct rusage *) NULL); - - int oldtype = LIBC_CANCEL_ASYNC (); - - pid_t result = INLINE_SYSCALL (wait4, 4, WAIT_ANY, stat_loc, 0, + pid_t result = SYSCALL_CANCEL (wait4, WAIT_ANY, stat_loc, 0, (struct rusage *) NULL); - - LIBC_CANCEL_RESET (oldtype); - return result; } diff --git a/sysdeps/unix/sysv/linux/waitid.c b/sysdeps/unix/sysv/linux/waitid.c index 12d5702..71d3a5a 100644 --- a/sysdeps/unix/sysv/linux/waitid.c +++ b/sysdeps/unix/sysv/linux/waitid.c @@ -19,15 +19,14 @@ #include <stddef.h> #include <errno.h> #include <sys/wait.h> -#include <sysdep.h> +#include <sysdep-cancel.h> -static inline int -do_waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options) +int +__waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options) { /* The unused fifth argument is a `struct rusage *' that we could pass if we were using waitid to simulate wait3/wait4. */ - return INLINE_SYSCALL (waitid, 5, idtype, id, infop, options, NULL); + return SYSCALL_CANCEL (waitid, idtype, id, infop, options, NULL); } -#define NO_DO_WAITID - -#include "sysdeps/posix/waitid.c" +weak_alias (__waitid, waitid) +strong_alias (__waitid, __libc_waitid) diff --git a/sysdeps/unix/sysv/linux/waitpid.c b/sysdeps/unix/sysv/linux/waitpid.c index 0d780da..59d0c9e 100644 --- a/sysdeps/unix/sysv/linux/waitpid.c +++ b/sysdeps/unix/sysv/linux/waitpid.c @@ -23,26 +23,11 @@ __pid_t __waitpid (__pid_t pid, int *stat_loc, int options) { - if (SINGLE_THREAD_P) - { #ifdef __NR_waitpid - return INLINE_SYSCALL (waitpid, 3, pid, stat_loc, options); + return SYSCALL_CANCEL (waitpid, pid, stat_loc, options); #else - return INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL); + return SYSCALL_CANCEL (wait4, pid, stat_loc, options, NULL); #endif - } - - int oldtype = LIBC_CANCEL_ASYNC (); - -#ifdef __NR_waitpid - int result = INLINE_SYSCALL (waitpid, 3, pid, stat_loc, options); -#else - int result = INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL); -#endif - - LIBC_CANCEL_RESET (oldtype); - - return result; } libc_hidden_def (__waitpid) weak_alias (__waitpid, waitpid) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c b/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c index c723fef..627ac2a 100644 --- a/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c +++ b/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c @@ -25,17 +25,7 @@ int fallocate (int fd, int mode, __off_t offset, __off_t len) { #ifdef __NR_fallocate - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); - - int result; - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (fallocate, fd, mode, offset, len); #else __set_errno (ENOSYS); return -1; diff --git a/sysdeps/unix/sysv/linux/wordsize-64/preadv.c b/sysdeps/unix/sysv/linux/wordsize-64/preadv.c index 9b3ae70..5e22c4b 100644 --- a/sysdeps/unix/sysv/linux/wordsize-64/preadv.c +++ b/sysdeps/unix/sysv/linux/wordsize-64/preadv.c @@ -38,16 +38,7 @@ preadv (int fd, const struct iovec *vector, int count, off_t offset) #ifdef __NR_preadv ssize_t result; - if (SINGLE_THREAD_P) - result = INLINE_SYSCALL (preadv, 4, fd, vector, count, offset); - else - { - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (preadv, 4, fd, vector, count, offset); - - LIBC_CANCEL_RESET (oldtype); - } + result = SYSCALL_CANCEL (preadv, fd, vector, count, offset); # ifdef __ASSUME_PREADV return result; # endif diff --git a/sysdeps/unix/sysv/linux/wordsize-64/pwritev.c b/sysdeps/unix/sysv/linux/wordsize-64/pwritev.c index 960c8c0..ccf96dd 100644 --- a/sysdeps/unix/sysv/linux/wordsize-64/pwritev.c +++ b/sysdeps/unix/sysv/linux/wordsize-64/pwritev.c @@ -38,16 +38,7 @@ pwritev (int fd, const struct iovec *vector, int count, off_t offset) #ifdef __NR_pwritev ssize_t result; - if (SINGLE_THREAD_P) - result = INLINE_SYSCALL (pwritev, 4, fd, vector, count, offset); - else - { - int oldtype = LIBC_CANCEL_ASYNC (); - - result = INLINE_SYSCALL (pwritev, 4, fd, vector, count, offset); - - LIBC_CANCEL_RESET (oldtype); - } + result = SYSCALL_CANCEL (pwritev, fd, vector, count, offset); # ifdef __ASSUME_PWRITEV return result; # endif diff --git a/sysdeps/unix/sysv/linux/x86_64/recv.c b/sysdeps/unix/sysv/linux/x86_64/recv.c index 7b956a5..995d11d 100644 --- a/sysdeps/unix/sysv/linux/x86_64/recv.c +++ b/sysdeps/unix/sysv/linux/x86_64/recv.c @@ -25,16 +25,7 @@ ssize_t __libc_recv (int fd, void *buf, size_t n, int flags) { - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (recvfrom, 6, fd, buf, n, flags, NULL, NULL); - - int oldtype = LIBC_CANCEL_ASYNC (); - - ssize_t result = INLINE_SYSCALL (recvfrom, 6, fd, buf, n, flags, NULL, NULL); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (recvfrom, fd, buf, n, flags, NULL, NULL); } weak_alias (__libc_recv, __recv) diff --git a/sysdeps/unix/sysv/linux/x86_64/send.c b/sysdeps/unix/sysv/linux/x86_64/send.c index c8dadfa..864a8d5 100644 --- a/sysdeps/unix/sysv/linux/x86_64/send.c +++ b/sysdeps/unix/sysv/linux/x86_64/send.c @@ -23,17 +23,7 @@ ssize_t __libc_send (int fd, const void *buf, size_t n, int flags) { - if (SINGLE_THREAD_P) - return INLINE_SYSCALL (sendto, 6, fd, buf, n, flags, NULL, (size_t) 0); - - int oldtype = LIBC_CANCEL_ASYNC (); - - ssize_t result = INLINE_SYSCALL (sendto, 6, fd, buf, n, flags, NULL, - (size_t) 0); - - LIBC_CANCEL_RESET (oldtype); - - return result; + return SYSCALL_CANCEL (sendto, fd, buf, n, flags, NULL, (size_t) 0); } weak_alias (__libc_send, __send)