Message ID | 1492710968-7699-2-git-send-email-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | [1/3] Consolidate Linux poll implementation | expand |
On 04/20/2017 10:56 AM, Adhemerval Zanella wrote: > 1. Remove select from auto-generation syscalls.list on the architecture > that uses __NR_select. > 2. Remove generic implementation add a default one that handle all > current cases (with the expection of alpha). The new default > implementation will either use __NR_select if available of fallback > to __NR_pselect6 otherwise. > 3. Add a alpha outlier implementation which requires old compatibility > symbols. Is there particular value in moving the Alpha version away from syscalls.list? r~
On Thu, Apr 20, 2017 at 7:56 PM, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > diff --git a/sysdeps/unix/sysv/linux/generic/select.c b/sysdeps/unix/sysv/linux/select.c > similarity index 82% > rename from sysdeps/unix/sysv/linux/generic/select.c > rename to sysdeps/unix/sysv/linux/select.c > index 7743ea3..6e03450 100644 > --- a/sysdeps/unix/sysv/linux/generic/select.c > +++ b/sysdeps/unix/sysv/linux/select.c > @@ -28,11 +28,19 @@ > after waiting the interval specified therein. Returns the number of ready > descriptors, or -1 for errors. */ > > +#ifdef __NR__newselect > +# undef __NR_select > +# define __RN_select __NR__newselect > +#endif > + __RN_select looks like a typo.
On 22/04/2017 04:35, Richard Henderson wrote: > On 04/20/2017 10:56 AM, Adhemerval Zanella wrote: >> 1. Remove select from auto-generation syscalls.list on the architecture >> that uses __NR_select. >> 2. Remove generic implementation add a default one that handle all >> current cases (with the expection of alpha). The new default >> implementation will either use __NR_select if available of fallback >> to __NR_pselect6 otherwise. >> 3. Add a alpha outlier implementation which requires old compatibility >> symbols. > > Is there particular value in moving the Alpha version away from syscalls.list? > > > r~ My goal is get rid of sysdep-cancel.h assembly macro hackery.
On 20/04/2017 14:56, Adhemerval Zanella wrote: > This patch consolidates the select Linux syscall implementation on > sysdeps/unix/sysv/linux/select.c. The changes are: > > 1. Remove select from auto-generation syscalls.list on the architecture > that uses __NR_select. > 2. Remove generic implementation add a default one that handle all > current cases (with the expection of alpha). The new default > implementation will either use __NR_select if available of fallback > to __NR_pselect6 otherwise. > 3. Add a alpha outlier implementation which requires old compatibility > symbols. > > Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32, > arch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu. > > * sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_routines): Add > osf_select. > * sysdeps/unix/sysv/linux/alpha/select.c: New file. > * sysdeps/unix/sysv/linux/alpha/syscalls.list: Remove select and > osf_select from auto-generation list. > * sysdeps/unix/sysv/linux/syscalls.list: Likewise. > * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise. > * sysdeps/unix/sysv/linux/generic/select.c: Remove file. > * sysdeps/unix/sysv/linux/select.c: New file. > --- > ChangeLog | 10 ++++ > sysdeps/unix/sysv/linux/alpha/Makefile | 2 +- > sysdeps/unix/sysv/linux/alpha/select.c | 53 ++++++++++++++++++++++ > sysdeps/unix/sysv/linux/alpha/syscalls.list | 2 - > sysdeps/unix/sysv/linux/{generic => }/select.c | 19 ++++++-- > .../unix/sysv/linux/sparc/sparc64/syscalls.list | 2 - > sysdeps/unix/sysv/linux/syscalls.list | 1 - > 7 files changed, 78 insertions(+), 11 deletions(-) > create mode 100644 sysdeps/unix/sysv/linux/alpha/select.c > rename sysdeps/unix/sysv/linux/{generic => }/select.c (82%) > > diff --git a/sysdeps/unix/sysv/linux/alpha/Makefile b/sysdeps/unix/sysv/linux/alpha/Makefile > index 37bdd5a..47bd189 100644 > --- a/sysdeps/unix/sysv/linux/alpha/Makefile > +++ b/sysdeps/unix/sysv/linux/alpha/Makefile > @@ -13,7 +13,7 @@ sysdep_routines += ieee_get_fp_control ieee_set_fp_control \ > ioperm > > # Support old timeval32 entry points > -sysdep_routines += osf_select osf_gettimeofday osf_settimeofday \ > +sysdep_routines += osf_gettimeofday osf_settimeofday \ > osf_getitimer osf_setitimer osf_utimes \ > osf_getrusage osf_wait4 > > diff --git a/sysdeps/unix/sysv/linux/alpha/select.c b/sysdeps/unix/sysv/linux/alpha/select.c > new file mode 100644 > index 0000000..bb0298f > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/alpha/select.c > @@ -0,0 +1,53 @@ > +/* Linux/alpha select implementation. > + Copyright (C) 2017 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <http://www.gnu.org/licenses/>. */ > + > +#include <sys/time.h> > +#include <sys/types.h> > +#include <sys/select.h> > +#include <errno.h> > +#include <sysdep-cancel.h> > +#include <shlib-compat.h> > + > +int > +__new_select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, > + struct timeval *timeout) > +{ > + return SYSCALL_CANCEL (select, nfds, readfds, writefds, exceptfds, timeout); > +} > +strong_alias (__new_select, __select) > +libc_hidden_def (__select) > + > +default_symbol_version (__new_select, select, GLIBC_2.1); > + > +strong_alias (__new_select, __new_select_private); > +symbol_version (__new_select_private, __select, GLIBC_2.1); > + > +/* Old timeval32 compat calls. */ > +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) > +int > +__select_tv32 (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, > + struct timeval *timeout) > +{ > + return SYSCALL_CANCEL (osf_select, nfds, readfds, writefds, exceptfds, > + timeout); > +} > +strong_alias (__select_tv32, __select_tv32_1) > + > +compat_symbol (libc, __select_tv32, __select, GLIBC_2_0); > +compat_symbol (libc, __select_tv32_1, select, GLIBC_2_0); > +#endif > diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list > index aa21b10..12cd021 100644 > --- a/sysdeps/unix/sysv/linux/alpha/syscalls.list > +++ b/sysdeps/unix/sysv/linux/alpha/syscalls.list > @@ -23,7 +23,6 @@ pciconfig_write EXTRA pciconfig_write 5 pciconfig_write > pciconfig_iobase EXTRA pciconfig_iobase 3 __pciconfig_iobase pciconfig_iobase > > # support old timeval32 entry points > -osf_select - osf_select C:5 __select_tv32 __select@GLIBC_2.0 select@GLIBC_2.0 > osf_gettimeofday - osf_gettimeofday 2 __gettimeofday_tv32 __gettimeofday@GLIBC_2.0 gettimeofday@GLIBC_2.0 > osf_settimeofday - osf_settimeofday 2 __settimeofday_tv32 settimeofday@GLIBC_2.0 > osf_getitimer - osf_getitimer 2 __getitimer_tv32 getitimer@GLIBC_2.0 > @@ -33,7 +32,6 @@ osf_getrusage - osf_getrusage 2 __getrusage_tv32 getrusage@GLIBC_2.0 > osf_wait4 - osf_wait4 4 __wait4_tv32 wait4@GLIBC_2.0 > > # support new timeval64 entry points > -select - select C:5 __GI___select select@@GLIBC_2.1 __select@@GLIBC_2.1 > gettimeofday - gettimeofday 2 __GI___gettimeofday gettimeofday@@GLIBC_2.1 __gettimeofday@@GLIBC_2.1 > settimeofday - settimeofday 2 __settimeofday settimeofday@@GLIBC_2.1 > getitimer - getitimer 2 __getitimer getitimer@@GLIBC_2.1 > diff --git a/sysdeps/unix/sysv/linux/generic/select.c b/sysdeps/unix/sysv/linux/select.c > similarity index 82% > rename from sysdeps/unix/sysv/linux/generic/select.c > rename to sysdeps/unix/sysv/linux/select.c > index 7743ea3..6e03450 100644 > --- a/sysdeps/unix/sysv/linux/generic/select.c > +++ b/sysdeps/unix/sysv/linux/select.c > @@ -1,6 +1,6 @@ > -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. > +/* Linux select implementation. > + Copyright (C) 2017 Free Software Foundation, Inc. > This file is part of the GNU C Library. > - Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011. > > The GNU C Library is free software; you can redistribute it and/or > modify it under the terms of the GNU Lesser General Public > @@ -28,11 +28,19 @@ > after waiting the interval specified therein. Returns the number of ready > descriptors, or -1 for errors. */ > > +#ifdef __NR__newselect > +# undef __NR_select > +# define __RN_select __NR__newselect > +#endif > + > int > -__select(int nfds, fd_set *readfds, > - fd_set *writefds, fd_set *exceptfds, > - struct timeval *timeout) > +__select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, > + struct timeval *timeout) > { > +#ifdef __NR_select > + return SYSCALL_CANCEL (select, nfds, readfds, writefds, exceptfds, > + timeout); > +#else > int result; > struct timespec ts, *tsp = NULL; > > @@ -55,6 +63,7 @@ __select(int nfds, fd_set *readfds, > } > > return result; > +#endif > } > libc_hidden_def (__select) > > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list > index 1e85118..33082f3 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list > +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list > @@ -1,7 +1,5 @@ > # File name Caller Syscall name # args Strong name Weak names > > -# Override select.S in parent directory: > -select - select C:5 __select select > bind - bind 3 __bind bind > getpeername - getpeername 3 __getpeername getpeername > getsockname - getsockname 3 __getsockname getsockname > diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list > index fcefefc..4d550b8 100644 > --- a/sysdeps/unix/sysv/linux/syscalls.list > +++ b/sysdeps/unix/sysv/linux/syscalls.list > @@ -63,7 +63,6 @@ sched_rr_gi - sched_rr_get_interval i:ip __sched_rr_get_interval sched_rr_get_in > sched_setp - sched_setparam i:ip __sched_setparam sched_setparam > sched_sets - sched_setscheduler i:iip __sched_setscheduler sched_setscheduler > sched_yield - sched_yield i: __sched_yield sched_yield > -select - _newselect Ci:iPPPP __select __libc_select select > sendfile - sendfile i:iipi sendfile > sendfile64 - sendfile64 i:iipi sendfile64 > setfsgid EXTRA setfsgid i:i setfsgid > Ping.
On Thursday 20 April 2017 11:26 PM, Adhemerval Zanella wrote: > This patch consolidates the select Linux syscall implementation on > sysdeps/unix/sysv/linux/select.c. The changes are: > > 1. Remove select from auto-generation syscalls.list on the architecture > that uses __NR_select. > 2. Remove generic implementation add a default one that handle all > current cases (with the expection of alpha). The new default > implementation will either use __NR_select if available of fallback > to __NR_pselect6 otherwise. > 3. Add a alpha outlier implementation which requires old compatibility > symbols. > > Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32, > arch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu. > > * sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_routines): Add > osf_select. > * sysdeps/unix/sysv/linux/alpha/select.c: New file. > * sysdeps/unix/sysv/linux/alpha/syscalls.list: Remove select and > osf_select from auto-generation list. > * sysdeps/unix/sysv/linux/syscalls.list: Likewise. > * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise. > * sysdeps/unix/sysv/linux/generic/select.c: Remove file. > * sysdeps/unix/sysv/linux/select.c: New file. > --- > ChangeLog | 10 ++++ > sysdeps/unix/sysv/linux/alpha/Makefile | 2 +- > sysdeps/unix/sysv/linux/alpha/select.c | 53 ++++++++++++++++++++++ > sysdeps/unix/sysv/linux/alpha/syscalls.list | 2 - > sysdeps/unix/sysv/linux/{generic => }/select.c | 19 ++++++-- > .../unix/sysv/linux/sparc/sparc64/syscalls.list | 2 - > sysdeps/unix/sysv/linux/syscalls.list | 1 - > 7 files changed, 78 insertions(+), 11 deletions(-) > create mode 100644 sysdeps/unix/sysv/linux/alpha/select.c > rename sysdeps/unix/sysv/linux/{generic => }/select.c (82%) > > diff --git a/sysdeps/unix/sysv/linux/alpha/Makefile b/sysdeps/unix/sysv/linux/alpha/Makefile > index 37bdd5a..47bd189 100644 > --- a/sysdeps/unix/sysv/linux/alpha/Makefile > +++ b/sysdeps/unix/sysv/linux/alpha/Makefile > @@ -13,7 +13,7 @@ sysdep_routines += ieee_get_fp_control ieee_set_fp_control \ > ioperm > > # Support old timeval32 entry points > -sysdep_routines += osf_select osf_gettimeofday osf_settimeofday \ > +sysdep_routines += osf_gettimeofday osf_settimeofday \ > osf_getitimer osf_setitimer osf_utimes \ > osf_getrusage osf_wait4 > > diff --git a/sysdeps/unix/sysv/linux/alpha/select.c b/sysdeps/unix/sysv/linux/alpha/select.c > new file mode 100644 > index 0000000..bb0298f > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/alpha/select.c > @@ -0,0 +1,53 @@ > +/* Linux/alpha select implementation. > + Copyright (C) 2017 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <http://www.gnu.org/licenses/>. */ > + > +#include <sys/time.h> > +#include <sys/types.h> > +#include <sys/select.h> > +#include <errno.h> > +#include <sysdep-cancel.h> > +#include <shlib-compat.h> > + > +int > +__new_select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, > + struct timeval *timeout) > +{ > + return SYSCALL_CANCEL (select, nfds, readfds, writefds, exceptfds, timeout); > +} > +strong_alias (__new_select, __select) > +libc_hidden_def (__select) > + > +default_symbol_version (__new_select, select, GLIBC_2.1); > + > +strong_alias (__new_select, __new_select_private); > +symbol_version (__new_select_private, __select, GLIBC_2.1); > + > +/* Old timeval32 compat calls. */ > +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) > +int > +__select_tv32 (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, > + struct timeval *timeout) > +{ > + return SYSCALL_CANCEL (osf_select, nfds, readfds, writefds, exceptfds, > + timeout); > +} > +strong_alias (__select_tv32, __select_tv32_1) > + > +compat_symbol (libc, __select_tv32, __select, GLIBC_2_0); > +compat_symbol (libc, __select_tv32_1, select, GLIBC_2_0); > +#endif > diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list > index aa21b10..12cd021 100644 > --- a/sysdeps/unix/sysv/linux/alpha/syscalls.list > +++ b/sysdeps/unix/sysv/linux/alpha/syscalls.list > @@ -23,7 +23,6 @@ pciconfig_write EXTRA pciconfig_write 5 pciconfig_write > pciconfig_iobase EXTRA pciconfig_iobase 3 __pciconfig_iobase pciconfig_iobase > > # support old timeval32 entry points > -osf_select - osf_select C:5 __select_tv32 __select@GLIBC_2.0 select@GLIBC_2.0 > osf_gettimeofday - osf_gettimeofday 2 __gettimeofday_tv32 __gettimeofday@GLIBC_2.0 gettimeofday@GLIBC_2.0 > osf_settimeofday - osf_settimeofday 2 __settimeofday_tv32 settimeofday@GLIBC_2.0 > osf_getitimer - osf_getitimer 2 __getitimer_tv32 getitimer@GLIBC_2.0 > @@ -33,7 +32,6 @@ osf_getrusage - osf_getrusage 2 __getrusage_tv32 getrusage@GLIBC_2.0 > osf_wait4 - osf_wait4 4 __wait4_tv32 wait4@GLIBC_2.0 > > # support new timeval64 entry points > -select - select C:5 __GI___select select@@GLIBC_2.1 __select@@GLIBC_2.1 > gettimeofday - gettimeofday 2 __GI___gettimeofday gettimeofday@@GLIBC_2.1 __gettimeofday@@GLIBC_2.1 > settimeofday - settimeofday 2 __settimeofday settimeofday@@GLIBC_2.1 > getitimer - getitimer 2 __getitimer getitimer@@GLIBC_2.1 > diff --git a/sysdeps/unix/sysv/linux/generic/select.c b/sysdeps/unix/sysv/linux/select.c > similarity index 82% > rename from sysdeps/unix/sysv/linux/generic/select.c > rename to sysdeps/unix/sysv/linux/select.c > index 7743ea3..6e03450 100644 > --- a/sysdeps/unix/sysv/linux/generic/select.c > +++ b/sysdeps/unix/sysv/linux/select.c > @@ -1,6 +1,6 @@ > -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. > +/* Linux select implementation. > + Copyright (C) 2017 Free Software Foundation, Inc. > This file is part of the GNU C Library. > - Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011. > > The GNU C Library is free software; you can redistribute it and/or > modify it under the terms of the GNU Lesser General Public > @@ -28,11 +28,19 @@ > after waiting the interval specified therein. Returns the number of ready > descriptors, or -1 for errors. */ > > +#ifdef __NR__newselect > +# undef __NR_select > +# define __RN_select __NR__newselect Typo. Looks OK otherwise. Siddhesh > +#endif > + > int > -__select(int nfds, fd_set *readfds, > - fd_set *writefds, fd_set *exceptfds, > - struct timeval *timeout) > +__select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, > + struct timeval *timeout) > { > +#ifdef __NR_select > + return SYSCALL_CANCEL (select, nfds, readfds, writefds, exceptfds, > + timeout); > +#else > int result; > struct timespec ts, *tsp = NULL; > > @@ -55,6 +63,7 @@ __select(int nfds, fd_set *readfds, > } > > return result; > +#endif > } > libc_hidden_def (__select) > > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list > index 1e85118..33082f3 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list > +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list > @@ -1,7 +1,5 @@ > # File name Caller Syscall name # args Strong name Weak names > > -# Override select.S in parent directory: > -select - select C:5 __select select > bind - bind 3 __bind bind > getpeername - getpeername 3 __getpeername getpeername > getsockname - getsockname 3 __getsockname getsockname > diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list > index fcefefc..4d550b8 100644 > --- a/sysdeps/unix/sysv/linux/syscalls.list > +++ b/sysdeps/unix/sysv/linux/syscalls.list > @@ -63,7 +63,6 @@ sched_rr_gi - sched_rr_get_interval i:ip __sched_rr_get_interval sched_rr_get_in > sched_setp - sched_setparam i:ip __sched_setparam sched_setparam > sched_sets - sched_setscheduler i:iip __sched_setscheduler sched_setscheduler > sched_yield - sched_yield i: __sched_yield sched_yield > -select - _newselect Ci:iPPPP __select __libc_select select > sendfile - sendfile i:iipi sendfile > sendfile64 - sendfile64 i:iipi sendfile64 > setfsgid EXTRA setfsgid i:i setfsgid >
diff --git a/sysdeps/unix/sysv/linux/alpha/Makefile b/sysdeps/unix/sysv/linux/alpha/Makefile index 37bdd5a..47bd189 100644 --- a/sysdeps/unix/sysv/linux/alpha/Makefile +++ b/sysdeps/unix/sysv/linux/alpha/Makefile @@ -13,7 +13,7 @@ sysdep_routines += ieee_get_fp_control ieee_set_fp_control \ ioperm # Support old timeval32 entry points -sysdep_routines += osf_select osf_gettimeofday osf_settimeofday \ +sysdep_routines += osf_gettimeofday osf_settimeofday \ osf_getitimer osf_setitimer osf_utimes \ osf_getrusage osf_wait4 diff --git a/sysdeps/unix/sysv/linux/alpha/select.c b/sysdeps/unix/sysv/linux/alpha/select.c new file mode 100644 index 0000000..bb0298f --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/select.c @@ -0,0 +1,53 @@ +/* Linux/alpha select implementation. + Copyright (C) 2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <http://www.gnu.org/licenses/>. */ + +#include <sys/time.h> +#include <sys/types.h> +#include <sys/select.h> +#include <errno.h> +#include <sysdep-cancel.h> +#include <shlib-compat.h> + +int +__new_select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, + struct timeval *timeout) +{ + return SYSCALL_CANCEL (select, nfds, readfds, writefds, exceptfds, timeout); +} +strong_alias (__new_select, __select) +libc_hidden_def (__select) + +default_symbol_version (__new_select, select, GLIBC_2.1); + +strong_alias (__new_select, __new_select_private); +symbol_version (__new_select_private, __select, GLIBC_2.1); + +/* Old timeval32 compat calls. */ +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) +int +__select_tv32 (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, + struct timeval *timeout) +{ + return SYSCALL_CANCEL (osf_select, nfds, readfds, writefds, exceptfds, + timeout); +} +strong_alias (__select_tv32, __select_tv32_1) + +compat_symbol (libc, __select_tv32, __select, GLIBC_2_0); +compat_symbol (libc, __select_tv32_1, select, GLIBC_2_0); +#endif diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list index aa21b10..12cd021 100644 --- a/sysdeps/unix/sysv/linux/alpha/syscalls.list +++ b/sysdeps/unix/sysv/linux/alpha/syscalls.list @@ -23,7 +23,6 @@ pciconfig_write EXTRA pciconfig_write 5 pciconfig_write pciconfig_iobase EXTRA pciconfig_iobase 3 __pciconfig_iobase pciconfig_iobase # support old timeval32 entry points -osf_select - osf_select C:5 __select_tv32 __select@GLIBC_2.0 select@GLIBC_2.0 osf_gettimeofday - osf_gettimeofday 2 __gettimeofday_tv32 __gettimeofday@GLIBC_2.0 gettimeofday@GLIBC_2.0 osf_settimeofday - osf_settimeofday 2 __settimeofday_tv32 settimeofday@GLIBC_2.0 osf_getitimer - osf_getitimer 2 __getitimer_tv32 getitimer@GLIBC_2.0 @@ -33,7 +32,6 @@ osf_getrusage - osf_getrusage 2 __getrusage_tv32 getrusage@GLIBC_2.0 osf_wait4 - osf_wait4 4 __wait4_tv32 wait4@GLIBC_2.0 # support new timeval64 entry points -select - select C:5 __GI___select select@@GLIBC_2.1 __select@@GLIBC_2.1 gettimeofday - gettimeofday 2 __GI___gettimeofday gettimeofday@@GLIBC_2.1 __gettimeofday@@GLIBC_2.1 settimeofday - settimeofday 2 __settimeofday settimeofday@@GLIBC_2.1 getitimer - getitimer 2 __getitimer getitimer@@GLIBC_2.1 diff --git a/sysdeps/unix/sysv/linux/generic/select.c b/sysdeps/unix/sysv/linux/select.c similarity index 82% rename from sysdeps/unix/sysv/linux/generic/select.c rename to sysdeps/unix/sysv/linux/select.c index 7743ea3..6e03450 100644 --- a/sysdeps/unix/sysv/linux/generic/select.c +++ b/sysdeps/unix/sysv/linux/select.c @@ -1,6 +1,6 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. +/* Linux select implementation. + Copyright (C) 2017 Free Software Foundation, Inc. This file is part of the GNU C Library. - Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -28,11 +28,19 @@ after waiting the interval specified therein. Returns the number of ready descriptors, or -1 for errors. */ +#ifdef __NR__newselect +# undef __NR_select +# define __RN_select __NR__newselect +#endif + int -__select(int nfds, fd_set *readfds, - fd_set *writefds, fd_set *exceptfds, - struct timeval *timeout) +__select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, + struct timeval *timeout) { +#ifdef __NR_select + return SYSCALL_CANCEL (select, nfds, readfds, writefds, exceptfds, + timeout); +#else int result; struct timespec ts, *tsp = NULL; @@ -55,6 +63,7 @@ __select(int nfds, fd_set *readfds, } return result; +#endif } libc_hidden_def (__select) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list index 1e85118..33082f3 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list @@ -1,7 +1,5 @@ # File name Caller Syscall name # args Strong name Weak names -# Override select.S in parent directory: -select - select C:5 __select select bind - bind 3 __bind bind getpeername - getpeername 3 __getpeername getpeername getsockname - getsockname 3 __getsockname getsockname diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list index fcefefc..4d550b8 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list +++ b/sysdeps/unix/sysv/linux/syscalls.list @@ -63,7 +63,6 @@ sched_rr_gi - sched_rr_get_interval i:ip __sched_rr_get_interval sched_rr_get_in sched_setp - sched_setparam i:ip __sched_setparam sched_setparam sched_sets - sched_setscheduler i:iip __sched_setscheduler sched_setscheduler sched_yield - sched_yield i: __sched_yield sched_yield -select - _newselect Ci:iPPPP __select __libc_select select sendfile - sendfile i:iipi sendfile sendfile64 - sendfile64 i:iipi sendfile64 setfsgid EXTRA setfsgid i:i setfsgid