public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [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).