* [PATCH 2/3] Consolidate Linux select implementation
2017-04-20 17:56 [PATCH 1/3] Consolidate Linux poll implementation Adhemerval Zanella
@ 2017-04-20 17:56 ` Adhemerval Zanella
2017-04-22 7:35 ` Richard Henderson
` (3 more replies)
2017-04-20 17:56 ` [PATCH 3/3] Consolidate Linux epoll_wait syscall Adhemerval Zanella
` (2 subsequent siblings)
3 siblings, 4 replies; 12+ messages in thread
From: Adhemerval Zanella @ 2017-04-20 17:56 UTC (permalink / raw)
To: libc-alpha
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
--
2.7.4
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/3] Consolidate Linux poll implementation
@ 2017-04-20 17:56 Adhemerval Zanella
2017-04-20 17:56 ` [PATCH 2/3] Consolidate Linux select implementation Adhemerval Zanella
` (3 more replies)
0 siblings, 4 replies; 12+ messages in thread
From: Adhemerval Zanella @ 2017-04-20 17:56 UTC (permalink / raw)
To: libc-alpha
This patch consolidates the poll Linux syscall implementation on
sysdeps/unix/sysv/linux/poll.c. It basically removes poll from
auto-generation list and add a default implementation that either
call __NR_poll directly (if the kernel headers defines it) or
ppoll adjusting the timeout argument (as the generic implementation).
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.
* sysdeps/unix/sysv/linux/generic/poll.c: Remove file.
* sysdeps/unix/sysv/linux/poll.c: New file.
* sysdeps/unix/sysv/linux/syscalls.list: Remove poll from
auto-generation list.
---
ChangeLog | 7 +++++++
sysdeps/unix/sysv/linux/{generic => }/poll.c | 8 ++++++--
sysdeps/unix/sysv/linux/syscalls.list | 1 -
3 files changed, 13 insertions(+), 3 deletions(-)
rename sysdeps/unix/sysv/linux/{generic => }/poll.c (88%)
diff --git a/sysdeps/unix/sysv/linux/generic/poll.c b/sysdeps/unix/sysv/linux/poll.c
similarity index 88%
rename from sysdeps/unix/sysv/linux/generic/poll.c
rename to sysdeps/unix/sysv/linux/poll.c
index c06d383..5a781dd 100644
--- a/sysdeps/unix/sysv/linux/generic/poll.c
+++ b/sysdeps/unix/sysv/linux/poll.c
@@ -1,6 +1,6 @@
-/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
+/* Linux poll 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
@@ -25,6 +25,9 @@
int
__poll (struct pollfd *fds, nfds_t nfds, int timeout)
{
+#ifdef __NR_poll
+ return SYSCALL_CANCEL (poll, fds, nfds, timeout);
+#else
struct timespec timeout_ts;
struct timespec *timeout_ts_p = NULL;
@@ -36,6 +39,7 @@ __poll (struct pollfd *fds, nfds_t nfds, int timeout)
}
return SYSCALL_CANCEL (ppoll, fds, nfds, timeout_ts_p, NULL, 0);
+#endif
}
libc_hidden_def (__poll)
weak_alias (__poll, poll)
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index 5d3c417..fcefefc 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -50,7 +50,6 @@ pause - pause Ci: __libc_pause pause
pipe - pipe i:f __pipe pipe
pipe2 - pipe2 i:fi __pipe2 pipe2
pivot_root EXTRA pivot_root i:ss pivot_root
-poll - poll Ci:pii __libc_poll __poll poll
prctl EXTRA prctl i:iiiii __prctl prctl
putpmsg - putpmsg i:ippii putpmsg
query_module EXTRA query_module i:sipip __compat_query_module query_module@GLIBC_2.0:GLIBC_2.23
--
2.7.4
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 3/3] Consolidate Linux epoll_wait syscall
2017-04-20 17:56 [PATCH 1/3] Consolidate Linux poll implementation Adhemerval Zanella
2017-04-20 17:56 ` [PATCH 2/3] Consolidate Linux select implementation Adhemerval Zanella
@ 2017-04-20 17:56 ` Adhemerval Zanella
2017-05-02 21:10 ` Adhemerval Zanella
2017-05-03 3:44 ` Siddhesh Poyarekar
2017-05-02 21:10 ` [PATCH 1/3] Consolidate Linux poll implementation Adhemerval Zanella
2017-05-03 3:37 ` Siddhesh Poyarekar
3 siblings, 2 replies; 12+ messages in thread
From: Adhemerval Zanella @ 2017-04-20 17:56 UTC (permalink / raw)
To: libc-alpha
This patch consolidates the epoll_wait Linux syscall generation on
sysdeps/unix/sysv/linux/epoll_wait.c. The implementation tries to
use __NR_epoll_wait if defined, otherwise calls epoll_pwait.
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/epoll_wait.c: New file.
* sysdeps/unix/sysv/linux/generic/epoll_wait.c: Remove file.
* sysdeps/unix/sysv/linux/syscalls.list: Remove epoll_wait from
auto-generation list.
---
ChangeLog | 9 +++++++++
sysdeps/unix/sysv/linux/Makefile | 2 +-
sysdeps/unix/sysv/linux/{generic => }/epoll_wait.c | 8 ++++++--
sysdeps/unix/sysv/linux/generic/Makefile | 2 +-
sysdeps/unix/sysv/linux/syscalls.list | 1 -
5 files changed, 17 insertions(+), 5 deletions(-)
rename sysdeps/unix/sysv/linux/{generic => }/epoll_wait.c (82%)
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 1872cdb..a8790b1 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -17,7 +17,7 @@ include $(firstword $(wildcard $(sysdirs:=/sysctl.mk)))
sysdep_routines += clone umount umount2 readahead \
setfsuid setfsgid epoll_pwait signalfd \
eventfd eventfd_read eventfd_write prlimit \
- personality
+ personality epoll_wait
CFLAGS-gethostid.c = -fexceptions
CFLAGS-tst-writev.c += "-DARTIFICIAL_LIMIT=(0x80000000-sysconf(_SC_PAGESIZE))"
diff --git a/sysdeps/unix/sysv/linux/generic/epoll_wait.c b/sysdeps/unix/sysv/linux/epoll_wait.c
similarity index 82%
rename from sysdeps/unix/sysv/linux/generic/epoll_wait.c
rename to sysdeps/unix/sysv/linux/epoll_wait.c
index d9363f1..eb6e6d3 100644
--- a/sysdeps/unix/sysv/linux/generic/epoll_wait.c
+++ b/sysdeps/unix/sysv/linux/epoll_wait.c
@@ -1,6 +1,6 @@
-/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
+/* Linux epoll_wait syscall 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
@@ -24,5 +24,9 @@
int
epoll_wait (int epfd, struct epoll_event *events, int maxevents, int timeout)
{
+#ifdef __NR_epoll_wait
+ return SYSCALL_CANCEL (epoll_wait, epfd, events, maxevents, timeout);
+#else
return epoll_pwait (epfd, events, maxevents, timeout, NULL);
+#endif
}
diff --git a/sysdeps/unix/sysv/linux/generic/Makefile b/sysdeps/unix/sysv/linux/generic/Makefile
index c1daee2..7e27e79 100644
--- a/sysdeps/unix/sysv/linux/generic/Makefile
+++ b/sysdeps/unix/sysv/linux/generic/Makefile
@@ -1,3 +1,3 @@
ifeq ($(subdir),misc)
-sysdep_routines += epoll_create epoll_wait inotify_init
+sysdep_routines += epoll_create inotify_init
endif
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index 4d550b8..1a10903 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -12,7 +12,6 @@ delete_module EXTRA delete_module 3 delete_module
epoll_create EXTRA epoll_create i:i epoll_create
epoll_create1 EXTRA epoll_create1 i:i epoll_create1
epoll_ctl EXTRA epoll_ctl i:iiip epoll_ctl
-epoll_wait EXTRA epoll_wait Ci:ipii epoll_wait
eventfd EXTRA eventfd2 i:ii eventfd
execve - execve i:spp __execve execve
fdatasync - fdatasync Ci:i fdatasync
--
2.7.4
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] Consolidate Linux select implementation
2017-04-20 17:56 ` [PATCH 2/3] Consolidate Linux select implementation Adhemerval Zanella
@ 2017-04-22 7:35 ` Richard Henderson
2017-04-22 14:43 ` Adhemerval Zanella
2017-04-22 9:07 ` Luis Javier Merino
` (2 subsequent siblings)
3 siblings, 1 reply; 12+ messages in thread
From: Richard Henderson @ 2017-04-22 7:35 UTC (permalink / raw)
To: Adhemerval Zanella, libc-alpha
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~
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] Consolidate Linux select implementation
2017-04-20 17:56 ` [PATCH 2/3] Consolidate Linux select implementation Adhemerval Zanella
2017-04-22 7:35 ` Richard Henderson
@ 2017-04-22 9:07 ` Luis Javier Merino
2017-05-02 21:10 ` Adhemerval Zanella
2017-05-03 3:43 ` Siddhesh Poyarekar
3 siblings, 0 replies; 12+ messages in thread
From: Luis Javier Merino @ 2017-04-22 9:07 UTC (permalink / raw)
To: Adhemerval Zanella; +Cc: libc-alpha
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.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] Consolidate Linux select implementation
2017-04-22 7:35 ` Richard Henderson
@ 2017-04-22 14:43 ` Adhemerval Zanella
0 siblings, 0 replies; 12+ messages in thread
From: Adhemerval Zanella @ 2017-04-22 14:43 UTC (permalink / raw)
To: Richard Henderson, libc-alpha
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.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] Consolidate Linux epoll_wait syscall
2017-04-20 17:56 ` [PATCH 3/3] Consolidate Linux epoll_wait syscall Adhemerval Zanella
@ 2017-05-02 21:10 ` Adhemerval Zanella
2017-05-03 3:44 ` Siddhesh Poyarekar
1 sibling, 0 replies; 12+ messages in thread
From: Adhemerval Zanella @ 2017-05-02 21:10 UTC (permalink / raw)
To: libc-alpha
On 20/04/2017 14:56, Adhemerval Zanella wrote:
> This patch consolidates the epoll_wait Linux syscall generation on
> sysdeps/unix/sysv/linux/epoll_wait.c. The implementation tries to
> use __NR_epoll_wait if defined, otherwise calls epoll_pwait.
>
> 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/epoll_wait.c: New file.
> * sysdeps/unix/sysv/linux/generic/epoll_wait.c: Remove file.
> * sysdeps/unix/sysv/linux/syscalls.list: Remove epoll_wait from
> auto-generation list.
> ---
> ChangeLog | 9 +++++++++
> sysdeps/unix/sysv/linux/Makefile | 2 +-
> sysdeps/unix/sysv/linux/{generic => }/epoll_wait.c | 8 ++++++--
> sysdeps/unix/sysv/linux/generic/Makefile | 2 +-
> sysdeps/unix/sysv/linux/syscalls.list | 1 -
> 5 files changed, 17 insertions(+), 5 deletions(-)
> rename sysdeps/unix/sysv/linux/{generic => }/epoll_wait.c (82%)
>
> diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
> index 1872cdb..a8790b1 100644
> --- a/sysdeps/unix/sysv/linux/Makefile
> +++ b/sysdeps/unix/sysv/linux/Makefile
> @@ -17,7 +17,7 @@ include $(firstword $(wildcard $(sysdirs:=/sysctl.mk)))
> sysdep_routines += clone umount umount2 readahead \
> setfsuid setfsgid epoll_pwait signalfd \
> eventfd eventfd_read eventfd_write prlimit \
> - personality
> + personality epoll_wait
>
> CFLAGS-gethostid.c = -fexceptions
> CFLAGS-tst-writev.c += "-DARTIFICIAL_LIMIT=(0x80000000-sysconf(_SC_PAGESIZE))"
> diff --git a/sysdeps/unix/sysv/linux/generic/epoll_wait.c b/sysdeps/unix/sysv/linux/epoll_wait.c
> similarity index 82%
> rename from sysdeps/unix/sysv/linux/generic/epoll_wait.c
> rename to sysdeps/unix/sysv/linux/epoll_wait.c
> index d9363f1..eb6e6d3 100644
> --- a/sysdeps/unix/sysv/linux/generic/epoll_wait.c
> +++ b/sysdeps/unix/sysv/linux/epoll_wait.c
> @@ -1,6 +1,6 @@
> -/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
> +/* Linux epoll_wait syscall 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
> @@ -24,5 +24,9 @@
> int
> epoll_wait (int epfd, struct epoll_event *events, int maxevents, int timeout)
> {
> +#ifdef __NR_epoll_wait
> + return SYSCALL_CANCEL (epoll_wait, epfd, events, maxevents, timeout);
> +#else
> return epoll_pwait (epfd, events, maxevents, timeout, NULL);
> +#endif
> }
> diff --git a/sysdeps/unix/sysv/linux/generic/Makefile b/sysdeps/unix/sysv/linux/generic/Makefile
> index c1daee2..7e27e79 100644
> --- a/sysdeps/unix/sysv/linux/generic/Makefile
> +++ b/sysdeps/unix/sysv/linux/generic/Makefile
> @@ -1,3 +1,3 @@
> ifeq ($(subdir),misc)
> -sysdep_routines += epoll_create epoll_wait inotify_init
> +sysdep_routines += epoll_create inotify_init
> endif
> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
> index 4d550b8..1a10903 100644
> --- a/sysdeps/unix/sysv/linux/syscalls.list
> +++ b/sysdeps/unix/sysv/linux/syscalls.list
> @@ -12,7 +12,6 @@ delete_module EXTRA delete_module 3 delete_module
> epoll_create EXTRA epoll_create i:i epoll_create
> epoll_create1 EXTRA epoll_create1 i:i epoll_create1
> epoll_ctl EXTRA epoll_ctl i:iiip epoll_ctl
> -epoll_wait EXTRA epoll_wait Ci:ipii epoll_wait
> eventfd EXTRA eventfd2 i:ii eventfd
> execve - execve i:spp __execve execve
> fdatasync - fdatasync Ci:i fdatasync
>
Ping.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] Consolidate Linux poll implementation
2017-04-20 17:56 [PATCH 1/3] Consolidate Linux poll implementation Adhemerval Zanella
2017-04-20 17:56 ` [PATCH 2/3] Consolidate Linux select implementation Adhemerval Zanella
2017-04-20 17:56 ` [PATCH 3/3] Consolidate Linux epoll_wait syscall Adhemerval Zanella
@ 2017-05-02 21:10 ` Adhemerval Zanella
2017-05-03 3:37 ` Siddhesh Poyarekar
3 siblings, 0 replies; 12+ messages in thread
From: Adhemerval Zanella @ 2017-05-02 21:10 UTC (permalink / raw)
To: libc-alpha
On 20/04/2017 14:56, Adhemerval Zanella wrote:
> This patch consolidates the poll Linux syscall implementation on
> sysdeps/unix/sysv/linux/poll.c. It basically removes poll from
> auto-generation list and add a default implementation that either
> call __NR_poll directly (if the kernel headers defines it) or
> ppoll adjusting the timeout argument (as the generic implementation).
>
> Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
> aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.
>
> * sysdeps/unix/sysv/linux/generic/poll.c: Remove file.
> * sysdeps/unix/sysv/linux/poll.c: New file.
> * sysdeps/unix/sysv/linux/syscalls.list: Remove poll from
> auto-generation list.
> ---
> ChangeLog | 7 +++++++
> sysdeps/unix/sysv/linux/{generic => }/poll.c | 8 ++++++--
> sysdeps/unix/sysv/linux/syscalls.list | 1 -
> 3 files changed, 13 insertions(+), 3 deletions(-)
> rename sysdeps/unix/sysv/linux/{generic => }/poll.c (88%)
>
> diff --git a/sysdeps/unix/sysv/linux/generic/poll.c b/sysdeps/unix/sysv/linux/poll.c
> similarity index 88%
> rename from sysdeps/unix/sysv/linux/generic/poll.c
> rename to sysdeps/unix/sysv/linux/poll.c
> index c06d383..5a781dd 100644
> --- a/sysdeps/unix/sysv/linux/generic/poll.c
> +++ b/sysdeps/unix/sysv/linux/poll.c
> @@ -1,6 +1,6 @@
> -/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
> +/* Linux poll 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
> @@ -25,6 +25,9 @@
> int
> __poll (struct pollfd *fds, nfds_t nfds, int timeout)
> {
> +#ifdef __NR_poll
> + return SYSCALL_CANCEL (poll, fds, nfds, timeout);
> +#else
> struct timespec timeout_ts;
> struct timespec *timeout_ts_p = NULL;
>
> @@ -36,6 +39,7 @@ __poll (struct pollfd *fds, nfds_t nfds, int timeout)
> }
>
> return SYSCALL_CANCEL (ppoll, fds, nfds, timeout_ts_p, NULL, 0);
> +#endif
> }
> libc_hidden_def (__poll)
> weak_alias (__poll, poll)
> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
> index 5d3c417..fcefefc 100644
> --- a/sysdeps/unix/sysv/linux/syscalls.list
> +++ b/sysdeps/unix/sysv/linux/syscalls.list
> @@ -50,7 +50,6 @@ pause - pause Ci: __libc_pause pause
> pipe - pipe i:f __pipe pipe
> pipe2 - pipe2 i:fi __pipe2 pipe2
> pivot_root EXTRA pivot_root i:ss pivot_root
> -poll - poll Ci:pii __libc_poll __poll poll
> prctl EXTRA prctl i:iiiii __prctl prctl
> putpmsg - putpmsg i:ippii putpmsg
> query_module EXTRA query_module i:sipip __compat_query_module query_module@GLIBC_2.0:GLIBC_2.23
>
Ping.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] Consolidate Linux select implementation
2017-04-20 17:56 ` [PATCH 2/3] Consolidate Linux select implementation Adhemerval Zanella
2017-04-22 7:35 ` Richard Henderson
2017-04-22 9:07 ` Luis Javier Merino
@ 2017-05-02 21:10 ` Adhemerval Zanella
2017-05-03 3:43 ` Siddhesh Poyarekar
3 siblings, 0 replies; 12+ messages in thread
From: Adhemerval Zanella @ 2017-05-02 21:10 UTC (permalink / raw)
To: libc-alpha
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.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] Consolidate Linux poll implementation
2017-04-20 17:56 [PATCH 1/3] Consolidate Linux poll implementation Adhemerval Zanella
` (2 preceding siblings ...)
2017-05-02 21:10 ` [PATCH 1/3] Consolidate Linux poll implementation Adhemerval Zanella
@ 2017-05-03 3:37 ` Siddhesh Poyarekar
3 siblings, 0 replies; 12+ messages in thread
From: Siddhesh Poyarekar @ 2017-05-03 3:37 UTC (permalink / raw)
To: Adhemerval Zanella, libc-alpha
On Thursday 20 April 2017 11:26 PM, Adhemerval Zanella wrote:
> This patch consolidates the poll Linux syscall implementation on
> sysdeps/unix/sysv/linux/poll.c. It basically removes poll from
> auto-generation list and add a default implementation that either
> call __NR_poll directly (if the kernel headers defines it) or
> ppoll adjusting the timeout argument (as the generic implementation).
>
> Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
> aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.
>
> * sysdeps/unix/sysv/linux/generic/poll.c: Remove file.
> * sysdeps/unix/sysv/linux/poll.c: New file.
> * sysdeps/unix/sysv/linux/syscalls.list: Remove poll from
> auto-generation list.
OK.
Siddhesh
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] Consolidate Linux select implementation
2017-04-20 17:56 ` [PATCH 2/3] Consolidate Linux select implementation Adhemerval Zanella
` (2 preceding siblings ...)
2017-05-02 21:10 ` Adhemerval Zanella
@ 2017-05-03 3:43 ` Siddhesh Poyarekar
3 siblings, 0 replies; 12+ messages in thread
From: Siddhesh Poyarekar @ 2017-05-03 3:43 UTC (permalink / raw)
To: Adhemerval Zanella, libc-alpha
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
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] Consolidate Linux epoll_wait syscall
2017-04-20 17:56 ` [PATCH 3/3] Consolidate Linux epoll_wait syscall Adhemerval Zanella
2017-05-02 21:10 ` Adhemerval Zanella
@ 2017-05-03 3:44 ` Siddhesh Poyarekar
1 sibling, 0 replies; 12+ messages in thread
From: Siddhesh Poyarekar @ 2017-05-03 3:44 UTC (permalink / raw)
To: Adhemerval Zanella, libc-alpha
On Thursday 20 April 2017 11:26 PM, Adhemerval Zanella wrote:
> This patch consolidates the epoll_wait Linux syscall generation on
> sysdeps/unix/sysv/linux/epoll_wait.c. The implementation tries to
> use __NR_epoll_wait if defined, otherwise calls epoll_pwait.
>
> 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/epoll_wait.c: New file.
> * sysdeps/unix/sysv/linux/generic/epoll_wait.c: Remove file.
> * sysdeps/unix/sysv/linux/syscalls.list: Remove epoll_wait from
> auto-generation list.
Looks good to me.
Siddhesh
> ---
> ChangeLog | 9 +++++++++
> sysdeps/unix/sysv/linux/Makefile | 2 +-
> sysdeps/unix/sysv/linux/{generic => }/epoll_wait.c | 8 ++++++--
> sysdeps/unix/sysv/linux/generic/Makefile | 2 +-
> sysdeps/unix/sysv/linux/syscalls.list | 1 -
> 5 files changed, 17 insertions(+), 5 deletions(-)
> rename sysdeps/unix/sysv/linux/{generic => }/epoll_wait.c (82%)
>
> diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
> index 1872cdb..a8790b1 100644
> --- a/sysdeps/unix/sysv/linux/Makefile
> +++ b/sysdeps/unix/sysv/linux/Makefile
> @@ -17,7 +17,7 @@ include $(firstword $(wildcard $(sysdirs:=/sysctl.mk)))
> sysdep_routines += clone umount umount2 readahead \
> setfsuid setfsgid epoll_pwait signalfd \
> eventfd eventfd_read eventfd_write prlimit \
> - personality
> + personality epoll_wait
>
> CFLAGS-gethostid.c = -fexceptions
> CFLAGS-tst-writev.c += "-DARTIFICIAL_LIMIT=(0x80000000-sysconf(_SC_PAGESIZE))"
> diff --git a/sysdeps/unix/sysv/linux/generic/epoll_wait.c b/sysdeps/unix/sysv/linux/epoll_wait.c
> similarity index 82%
> rename from sysdeps/unix/sysv/linux/generic/epoll_wait.c
> rename to sysdeps/unix/sysv/linux/epoll_wait.c
> index d9363f1..eb6e6d3 100644
> --- a/sysdeps/unix/sysv/linux/generic/epoll_wait.c
> +++ b/sysdeps/unix/sysv/linux/epoll_wait.c
> @@ -1,6 +1,6 @@
> -/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
> +/* Linux epoll_wait syscall 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
> @@ -24,5 +24,9 @@
> int
> epoll_wait (int epfd, struct epoll_event *events, int maxevents, int timeout)
> {
> +#ifdef __NR_epoll_wait
> + return SYSCALL_CANCEL (epoll_wait, epfd, events, maxevents, timeout);
> +#else
> return epoll_pwait (epfd, events, maxevents, timeout, NULL);
> +#endif
> }
> diff --git a/sysdeps/unix/sysv/linux/generic/Makefile b/sysdeps/unix/sysv/linux/generic/Makefile
> index c1daee2..7e27e79 100644
> --- a/sysdeps/unix/sysv/linux/generic/Makefile
> +++ b/sysdeps/unix/sysv/linux/generic/Makefile
> @@ -1,3 +1,3 @@
> ifeq ($(subdir),misc)
> -sysdep_routines += epoll_create epoll_wait inotify_init
> +sysdep_routines += epoll_create inotify_init
> endif
> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
> index 4d550b8..1a10903 100644
> --- a/sysdeps/unix/sysv/linux/syscalls.list
> +++ b/sysdeps/unix/sysv/linux/syscalls.list
> @@ -12,7 +12,6 @@ delete_module EXTRA delete_module 3 delete_module
> epoll_create EXTRA epoll_create i:i epoll_create
> epoll_create1 EXTRA epoll_create1 i:i epoll_create1
> epoll_ctl EXTRA epoll_ctl i:iiip epoll_ctl
> -epoll_wait EXTRA epoll_wait Ci:ipii epoll_wait
> eventfd EXTRA eventfd2 i:ii eventfd
> execve - execve i:spp __execve execve
> fdatasync - fdatasync Ci:i fdatasync
>
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2017-05-03 3:44 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-20 17:56 [PATCH 1/3] Consolidate Linux poll implementation Adhemerval Zanella
2017-04-20 17:56 ` [PATCH 2/3] Consolidate Linux select implementation Adhemerval Zanella
2017-04-22 7:35 ` Richard Henderson
2017-04-22 14:43 ` Adhemerval Zanella
2017-04-22 9:07 ` Luis Javier Merino
2017-05-02 21:10 ` Adhemerval Zanella
2017-05-03 3:43 ` Siddhesh Poyarekar
2017-04-20 17:56 ` [PATCH 3/3] Consolidate Linux epoll_wait syscall Adhemerval Zanella
2017-05-02 21:10 ` Adhemerval Zanella
2017-05-03 3:44 ` Siddhesh Poyarekar
2017-05-02 21:10 ` [PATCH 1/3] Consolidate Linux poll implementation Adhemerval Zanella
2017-05-03 3:37 ` Siddhesh Poyarekar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).