This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.12-21-g3d04ff3
- From: drepper at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 21 May 2010 19:11:51 -0000
- Subject: GNU C Library master sources branch, master, updated. glibc-2.12-21-g3d04ff3
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