GNU C Library master sources branch, master, updated. glibc-2.12-21-g3d04ff3

drepper@sourceware.org drepper@sourceware.org
Fri May 21 19:11:00 GMT 2010


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  3d04ff3a5d3ce3616837e1d15e03b6e1b360cf26 (commit)
       via  f0ccf6ea41931f325df4699a4c7fdf81888563ee (commit)
       via  5b08ac571ff8e94fe96511a532f0d20997de5f52 (commit)
      from  33b8d90a1b41ba6a4a7b518d0a32258fadf5c040 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=3d04ff3a5d3ce3616837e1d15e03b6e1b360cf26

commit 3d04ff3a5d3ce3616837e1d15e03b6e1b360cf26
Author: Andreas Schwab <schwab@redhat.com>
Date:   Fri May 21 12:11:28 2010 -0700

    Implement recvmmsg also as socketcall

diff --git a/ChangeLog b/ChangeLog
index b6c9889..5621d9b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2010-05-21  Andreas Schwab  <schwab@redhat.com>
 
+	* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Add recvmmsg
+	and internal_recvmmsg.
+	* sysdeps/unix/sysv/linux/recvmmsg.c: New file.
+	* sysdeps/unix/sysv/linux/internal_recvmmsg.S: New file.
+	* sysdeps/unix/sysv/linux/socketcall.h (SOCKOP_recvmmsg): Define.
+	* sysdeps/unix/sysv/linux/syscalls.list (recvmmsg): Remove.
+
 	* sunrpc/clnt_tcp.c (clnttcp_control): Add missing break.
 	* sunrpc/clnt_udp.c (clntudp_control): Likewise.
 	* sunrpc/clnt_unix.c (clntunix_control): Likewise.
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 91c123b..9c53b2d 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -12,7 +12,7 @@ CFLAGS-malloc.c += -DMORECORE_CLEARS=2
 endif
 
 ifeq ($(subdir),socket)
-sysdep_routines += internal_accept4
+sysdep_routines += internal_accept4 recvmmsg internal_recvmmsg
 endif
 
 ifeq ($(subdir),misc)
diff --git a/sysdeps/unix/sysv/linux/internal_recvmmsg.S b/sysdeps/unix/sysv/linux/internal_recvmmsg.S
new file mode 100644
index 0000000..66c1357
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/internal_recvmmsg.S
@@ -0,0 +1,14 @@
+#include <kernel-features.h>
+#include <sys/syscall.h>
+#if !defined __NR_recvmmsg && defined __NR_socketcall
+# define socket	recvmmsg
+# ifdef __ASSUME_RECVMMSG
+#  define __socket recvmmsg
+# else
+#  define __socket __internal_recvmmsg
+# endif
+# define NARGS 5
+# define NEED_CANCELLATION
+# define NO_WEAK_ALIAS
+# include <socket.S>
+#endif
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 43783c1..b3f2456 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -525,3 +525,8 @@
 #if __LINUX_KERNEL_VERSION >= 0x020620
 # define __ASSUME_F_GETOWN_EX	1
 #endif
+
+/* Support for the recvmmsg syscall was added in 2.6.33.  */
+#if __LINUX_KERNEL_VERSION >= 0x020621
+# define __ASSUME_RECVMMSG	1
+#endif
diff --git a/sysdeps/unix/sysv/linux/recvmmsg.c b/sysdeps/unix/sysv/linux/recvmmsg.c
new file mode 100644
index 0000000..0c08171
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/recvmmsg.c
@@ -0,0 +1,100 @@
+/* Copyright (C) 2010 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Andreas Schwab <schwab@redhat.com>, 2010.
+
+   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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <errno.h>
+#include <sys/socket.h>
+
+#include <sysdep-cancel.h>
+#include <sys/syscall.h>
+#include <kernel-features.h>
+
+
+#ifdef __NR_recvmmsg
+int
+recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
+	  const struct timespec *tmo)
+{
+  if (SINGLE_THREAD_P)
+    return INLINE_SYSCALL (recvmmsg, 5, fd, vmessages, vlen, flags, tmo);
+
+  int oldtype = LIBC_CANCEL_ASYNC ();
+
+  int result = INLINE_SYSCALL (recvmmsg, 5, fd, vmessages, vlen, flags, tmo);
+
+  LIBC_CANCEL_RESET (oldtype);
+
+  return result;
+}
+#elif defined __NR_socketcall
+# ifndef __ASSUME_RECVMMSG
+extern int __internal_recvmmsg (int fd, struct mmsghdr *vmessages,
+				unsigned int vlen, int flags,
+				const struct timespec *tmo)
+     attribute_hidden;
+
+static int have_recvmmsg;
+
+int
+recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
+	  const struct timespec *tmo)
+{
+  if (__builtin_expect (have_recvmmsg >= 0, 1))
+    {
+      int ret = __internal_recvmmsg (fd, vmessages, vlen, flags, tmo);
+      /* The kernel returns -EINVAL for unknown socket operations.
+	 We need to convert that error to an ENOSYS error.  */
+      if (__builtin_expect (ret < 0, 0)
+	  && have_recvmmsg == 0
+	  && errno == EINVAL)
+	{
+	  /* Try another call, this time with an invalid file
+	     descriptor and all other parameters cleared.  This call
+	     will not cause any harm and it will return
+	     immediately.  */
+	  ret = __internal_recvmmsg (-1, 0, 0, 0, 0);
+	  if (errno == EINVAL)
+	    {
+	      have_recvmmsg = -1;
+	      __set_errno (ENOSYS);
+	    }
+	  else
+	    {
+	      have_recvmmsg = 1;
+	      __set_errno (EINVAL);
+	    }
+	  return -1;
+	}
+      return ret;
+    }
+  __set_errno (ENOSYS);
+  return -1;
+}
+# else
+/* When __ASSUME_RECVMMSG recvmmsg is defined in internal_recvmmsg.S.  */
+# endif
+#else
+int
+recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
+	  const struct timespec *tmo)
+{
+  __set_errno (ENOSYS);
+  return -1;
+}
+stub_warning (recvmmsg)
+#endif
diff --git a/sysdeps/unix/sysv/linux/socketcall.h b/sysdeps/unix/sysv/linux/socketcall.h
index adf01b6..bab4e4a 100644
--- a/sysdeps/unix/sysv/linux/socketcall.h
+++ b/sysdeps/unix/sysv/linux/socketcall.h
@@ -44,5 +44,6 @@
 #define SOCKOP_sendmsg		16
 #define SOCKOP_recvmsg		17
 #define SOCKOP_accept4		18
+#define SOCKOP_recvmmsg		19
 
 #endif /* sys/socketcall.h */
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index a1a449e..a87906a 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -53,7 +53,6 @@ prctl		EXTRA	prctl		i:iiiii	__prctl		prctl
 putpmsg		-	putpmsg		i:ippii	putpmsg
 query_module	EXTRA	query_module	i:sipip	query_module
 quotactl	EXTRA	quotactl	i:isip	quotactl
-recvmmsg	EXTRA	recvmmsg	Ci:ipiip	recvmmsg
 remap_file_pages -	remap_file_pages i:piiii	__remap_file_pages remap_file_pages
 sched_getp	-	sched_getparam	i:ip	__sched_getparam	sched_getparam
 sched_gets	-	sched_getscheduler	i:i	__sched_getscheduler	sched_getscheduler

http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=f0ccf6ea41931f325df4699a4c7fdf81888563ee

commit f0ccf6ea41931f325df4699a4c7fdf81888563ee
Author: Andreas Schwab <schwab@redhat.com>
Date:   Fri May 21 11:52:20 2010 -0700

    sunrpc: Fix spurious fall-through

diff --git a/ChangeLog b/ChangeLog
index 521e6ae..b6c9889 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-05-21  Andreas Schwab  <schwab@redhat.com>
+
+	* sunrpc/clnt_tcp.c (clnttcp_control): Add missing break.
+	* sunrpc/clnt_udp.c (clntudp_control): Likewise.
+	* sunrpc/clnt_unix.c (clntunix_control): Likewise.
+
 2010-05-20  Andreas Schwab  <schwab@redhat.com>
 
 	* sysdeps/unix/sysv/linux/sys/timex.h: Use __REDIRECT_NTH.
diff --git a/sunrpc/clnt_tcp.c b/sunrpc/clnt_tcp.c
index 1552be8..d26a126 100644
--- a/sunrpc/clnt_tcp.c
+++ b/sunrpc/clnt_tcp.c
@@ -399,6 +399,7 @@ clnttcp_control (CLIENT *cl, int request, char *info)
       /* This will set the xid of the NEXT call */
       *(u_long *)ct->ct_mcall =  htonl (*(u_long *)info - 1);
       /* decrement by 1 as clnttcp_call() increments once */
+      break;
     case CLGET_VERS:
       /*
        * This RELIES on the information that, in the call body,
diff --git a/sunrpc/clnt_udp.c b/sunrpc/clnt_udp.c
index 62ee3a1..360e26a 100644
--- a/sunrpc/clnt_udp.c
+++ b/sunrpc/clnt_udp.c
@@ -582,6 +582,7 @@ clntudp_control (CLIENT *cl, int request, char *info)
       /* This will set the xid of the NEXT call */
       *(u_long *)cu->cu_outbuf =  htonl(*(u_long *)info - 1);
       /* decrement by 1 as clntudp_call() increments once */
+      break;
     case CLGET_VERS:
       /*
        * This RELIES on the information that, in the call body,
diff --git a/sunrpc/clnt_unix.c b/sunrpc/clnt_unix.c
index db3ea31..bca1273 100644
--- a/sunrpc/clnt_unix.c
+++ b/sunrpc/clnt_unix.c
@@ -376,6 +376,7 @@ clntunix_control (CLIENT *cl, int request, char *info)
       /* This will set the xid of the NEXT call */
       *(u_long *) ct->ct_mcall =  htonl (*(u_long *)info - 1);
       /* decrement by 1 as clntunix_call() increments once */
+      break;
     case CLGET_VERS:
       /*
        * This RELIES on the information that, in the call body,

http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=5b08ac571ff8e94fe96511a532f0d20997de5f52

commit 5b08ac571ff8e94fe96511a532f0d20997de5f52
Author: Andreas Schwab <schwab@redhat.com>
Date:   Fri May 21 11:45:17 2010 -0700

    Make <sys/timex.h> compatible with C++

diff --git a/ChangeLog b/ChangeLog
index e7215fd..521e6ae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2010-05-20  Andreas Schwab  <schwab@redhat.com>
+
+	* sysdeps/unix/sysv/linux/sys/timex.h: Use __REDIRECT_NTH.
+
 2010-05-17  Luis Machado  <luisgpm@br.ibm.com>
 
 	POWER7 optimizations.
diff --git a/sysdeps/unix/sysv/linux/sys/timex.h b/sysdeps/unix/sysv/linux/sys/timex.h
index e10311f..13b94d6 100644
--- a/sysdeps/unix/sysv/linux/sys/timex.h
+++ b/sysdeps/unix/sysv/linux/sys/timex.h
@@ -140,9 +140,9 @@ __BEGIN_DECLS
 extern int __adjtimex (struct timex *__ntx) __THROW;
 extern int adjtimex (struct timex *__ntx) __THROW;
 
-#if defined __GNUC__ && __GNUC__ >= 2
-extern int ntp_gettime (struct ntptimeval *__ntv)
-     __asm__ ("ntp_gettimex") __THROW;
+#ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (ntp_gettime, (struct ntptimeval *__ntv),
+			   ntp_gettimex);
 #else
 extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW;
 # define ntp_gettime ntp_gettimex

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                         |   17 +++++++
 sunrpc/clnt_tcp.c                                 |    1 +
 sunrpc/clnt_udp.c                                 |    1 +
 sunrpc/clnt_unix.c                                |    1 +
 sysdeps/unix/sysv/linux/Makefile                  |    2 +-
 sysdeps/unix/sysv/linux/internal_recvmmsg.S       |   14 ++++++
 sysdeps/unix/sysv/linux/kernel-features.h         |    5 ++
 sysdeps/unix/sysv/linux/{accept4.c => recvmmsg.c} |   53 +++++++++++----------
 sysdeps/unix/sysv/linux/socketcall.h              |    1 +
 sysdeps/unix/sysv/linux/sys/timex.h               |    6 +-
 sysdeps/unix/sysv/linux/syscalls.list             |    1 -
 11 files changed, 72 insertions(+), 30 deletions(-)
 create mode 100644 sysdeps/unix/sysv/linux/internal_recvmmsg.S
 copy sysdeps/unix/sysv/linux/{accept4.c => recvmmsg.c} (54%)


hooks/post-receive
-- 
GNU C Library master sources



More information about the Glibc-cvs mailing list