aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog21
-rw-r--r--sysdeps/unix/sysv/linux/accept.c6
-rw-r--r--sysdeps/unix/sysv/linux/bind.c6
-rw-r--r--sysdeps/unix/sysv/linux/connect.c6
-rw-r--r--sysdeps/unix/sysv/linux/getpeername.c6
-rw-r--r--sysdeps/unix/sysv/linux/getsockname.c6
-rw-r--r--sysdeps/unix/sysv/linux/getsockopt.c6
-rw-r--r--sysdeps/unix/sysv/linux/listen.c6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/kernel-features.h21
-rw-r--r--sysdeps/unix/sysv/linux/recv.c6
-rw-r--r--sysdeps/unix/sysv/linux/recvfrom.c7
-rw-r--r--sysdeps/unix/sysv/linux/recvmsg.c6
-rw-r--r--sysdeps/unix/sysv/linux/send.c6
-rw-r--r--sysdeps/unix/sysv/linux/sendmsg.c6
-rw-r--r--sysdeps/unix/sysv/linux/sendto.c7
-rw-r--r--sysdeps/unix/sysv/linux/setsockopt.c6
-rw-r--r--sysdeps/unix/sysv/linux/shutdown.c6
-rw-r--r--sysdeps/unix/sysv/linux/socket.c6
-rw-r--r--sysdeps/unix/sysv/linux/socketpair.c6
19 files changed, 146 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 6e55d88..5c115bf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,24 @@
+2015-08-25 Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>
+
+ * sysdeps/unix/sysv/linux/powerpc/kernel-features.h: Define new macros.
+ * sysdeps/unix/sysv/linux/accept.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/bind.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/connect.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/getpeername.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/getsockname.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/getsockopt.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/listen.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/recv.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/recvfrom.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/recvmsg.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/send.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/sendmsg.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/sendto.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/setsockopt.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/shutdown.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/socket.c: Call direct system call.
+ * sysdeps/unix/sysv/linux/socketpair.c: Call direct system call.
+
2015-08-25 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
* sysdeps/powerpc/powerpc32/sysdep.h (ABORT_TRANSACTION): Use
diff --git a/sysdeps/unix/sysv/linux/accept.c b/sysdeps/unix/sysv/linux/accept.c
index 72d42a7..8b4fff0 100644
--- a/sysdeps/unix/sysv/linux/accept.c
+++ b/sysdeps/unix/sysv/linux/accept.c
@@ -21,11 +21,17 @@
#include <sysdep-cancel.h>
#include <socketcall.h>
+#include <sys/syscall.h>
+#include <kernel-features.h>
int
__libc_accept (int fd, __SOCKADDR_ARG addr, socklen_t *len)
{
+#ifdef __ASSUME_ACCEPT_SYSCALL
+ return SYSCALL_CANCEL (accept, fd, addr.__sockaddr__, len);
+#else
return SOCKETCALL_CANCEL (accept, fd, addr.__sockaddr__, len);
+#endif
}
weak_alias (__libc_accept, accept)
libc_hidden_def (accept)
diff --git a/sysdeps/unix/sysv/linux/bind.c b/sysdeps/unix/sysv/linux/bind.c
index db72df6..4c13b09 100644
--- a/sysdeps/unix/sysv/linux/bind.c
+++ b/sysdeps/unix/sysv/linux/bind.c
@@ -20,10 +20,16 @@
#include <sys/socket.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
int
__bind (int fd, __CONST_SOCKADDR_ARG addr, socklen_t len)
{
+#ifdef __ASSUME_BIND_SYSCALL
+ return INLINE_SYSCALL (bind, 3, fd, addr.__sockaddr__, len);
+#else
return SOCKETCALL (bind, fd, addr.__sockaddr__, len, 0, 0, 0);
+#endif
}
weak_alias (__bind, bind)
diff --git a/sysdeps/unix/sysv/linux/connect.c b/sysdeps/unix/sysv/linux/connect.c
index dd17e8c..d62e4d7 100644
--- a/sysdeps/unix/sysv/linux/connect.c
+++ b/sysdeps/unix/sysv/linux/connect.c
@@ -21,11 +21,17 @@
#include <sysdep-cancel.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
int
__libc_connect (int fd, __CONST_SOCKADDR_ARG addr, socklen_t len)
{
+#ifdef __ASSUME_CONNECT_SYSCALL
+ return SYSCALL_CANCEL (connect, fd, addr.__sockaddr__, len);
+#else
return SOCKETCALL_CANCEL (connect, fd, addr.__sockaddr__, len);
+#endif
}
weak_alias (__libc_connect, connect)
weak_alias (__libc_connect, __connect)
diff --git a/sysdeps/unix/sysv/linux/getpeername.c b/sysdeps/unix/sysv/linux/getpeername.c
index 05fd2e8..cd5725b 100644
--- a/sysdeps/unix/sysv/linux/getpeername.c
+++ b/sysdeps/unix/sysv/linux/getpeername.c
@@ -20,10 +20,16 @@
#include <sys/socket.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
int
__getpeername (int fd, __SOCKADDR_ARG addr, socklen_t *len)
{
+#ifdef __ASSUME_GETPEERNAME_SYSCALL
+ return INLINE_SYSCALL (getpeername, 3, fd, addr.__sockaddr__, len);
+#else
return SOCKETCALL (getpeername, fd, addr.__sockaddr__, len);
+#endif
}
weak_alias (__getpeername, getpeername)
diff --git a/sysdeps/unix/sysv/linux/getsockname.c b/sysdeps/unix/sysv/linux/getsockname.c
index 6c84ace..78b6050 100644
--- a/sysdeps/unix/sysv/linux/getsockname.c
+++ b/sysdeps/unix/sysv/linux/getsockname.c
@@ -20,10 +20,16 @@
#include <sys/socket.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
int
__getsockname (int fd, __SOCKADDR_ARG addr, socklen_t *len)
{
+#ifdef __ASSUME_GETSOCKNAME_SYSCALL
+ return INLINE_SYSCALL (getsockname, 3, fd, addr.__sockaddr__, len);
+#else
return SOCKETCALL (getsockname, fd, addr.__sockaddr__, len);
+#endif
}
weak_alias (__getsockname, getsockname)
diff --git a/sysdeps/unix/sysv/linux/getsockopt.c b/sysdeps/unix/sysv/linux/getsockopt.c
index ba5681b..b194551 100644
--- a/sysdeps/unix/sysv/linux/getsockopt.c
+++ b/sysdeps/unix/sysv/linux/getsockopt.c
@@ -20,10 +20,16 @@
#include <sys/socket.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
int
__getsockopt (int fd, int level, int optname, void *optval, socklen_t *len)
{
+#ifdef __ASSUME_GETSOCKOPT_SYSCALL
+ return INLINE_SYSCALL (getsockopt, 5, fd, level, optname, optval, len);
+#else
return SOCKETCALL (getsockopt, fd, level, optname, optval, len);
+#endif
}
weak_alias (__getsockopt, getsockopt)
diff --git a/sysdeps/unix/sysv/linux/listen.c b/sysdeps/unix/sysv/linux/listen.c
index 2e387a4..cf77c68 100644
--- a/sysdeps/unix/sysv/linux/listen.c
+++ b/sysdeps/unix/sysv/linux/listen.c
@@ -20,10 +20,16 @@
#include <sys/socket.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
int
listen (int fd, int backlog)
{
+#ifdef __ASSUME_LISTEN_SYSCALL
+ return INLINE_SYSCALL (listen, 2, fd, backlog);
+#else
return SOCKETCALL (listen, fd, backlog);
+#endif
}
weak_alias (listen, __listen);
diff --git a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
index 7201cb4..8a536cf 100644
--- a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
@@ -30,6 +30,27 @@
# define __ASSUME_RECVMMSG_SYSCALL 1
#endif
+/* New syscalls added for PowerPC in 2.6.37. */
+#if __LINUX_KERNEL_VERSION >= 0x020625
+# define __ASSUME_SOCKET_SYSCALL 1
+# define __ASSUME_BIND_SYSCALL 1
+# define __ASSUME_CONNECT_SYSCALL 1
+# define __ASSUME_LISTEN_SYSCALL 1
+# define __ASSUME_ACCEPT_SYSCALL 1
+# define __ASSUME_GETSOCKNAME_SYSCALL 1
+# define __ASSUME_GETPEERNAME_SYSCALL 1
+# define __ASSUME_SOCKETPAIR_SYSCALL 1
+# define __ASSUME_SEND_SYSCALL 1
+# define __ASSUME_SENDTO_SYSCALL 1
+# define __ASSUME_RECV_SYSCALL 1
+# define __ASSUME_RECVFROM_SYSCALL 1
+# define __ASSUME_SHUTDOWN_SYSCALL 1
+# define __ASSUME_GETSOCKOPT_SYSCALL 1
+# define __ASSUME_SETSOCKOPT_SYSCALL 1
+# define __ASSUME_SENDMSG_SYSCALL 1
+# define __ASSUME_RECVMSG_SYSCALL 1
+#endif
+
/* The sendmmsg syscall was added for PowerPC in 3.0. */
#if __LINUX_KERNEL_VERSION >= 0x030000
# define __ASSUME_SENDMMSG_SYSCALL 1
diff --git a/sysdeps/unix/sysv/linux/recv.c b/sysdeps/unix/sysv/linux/recv.c
index cd2bc1e..12be890 100644
--- a/sysdeps/unix/sysv/linux/recv.c
+++ b/sysdeps/unix/sysv/linux/recv.c
@@ -21,11 +21,17 @@
#include <sysdep-cancel.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
ssize_t
__libc_recv (int fd, void *buf, size_t len, int flags)
{
+#ifdef __ASSUME_RECV_SYSCALL
+ return SYSCALL_CANCEL (recv, fd, buf, len, flags);
+#else
return SOCKETCALL_CANCEL (recv, fd, buf, len, flags);
+#endif
}
weak_alias (__libc_recv, recv)
weak_alias (__libc_recv, __recv)
diff --git a/sysdeps/unix/sysv/linux/recvfrom.c b/sysdeps/unix/sysv/linux/recvfrom.c
index 90eb40d..19f59a7 100644
--- a/sysdeps/unix/sysv/linux/recvfrom.c
+++ b/sysdeps/unix/sysv/linux/recvfrom.c
@@ -21,13 +21,20 @@
#include <sysdep-cancel.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
ssize_t
__libc_recvfrom (int fd, void *buf, size_t len, int flags,
__SOCKADDR_ARG addr, socklen_t *addrlen)
{
+#ifdef __ASSUME_RECVFROM_SYSCALL
+ return SYSCALL_CANCEL (recvfrom, fd, buf, len, flags, addr.__sockaddr__,
+ addrlen);
+#else
return SOCKETCALL_CANCEL (recvfrom, fd, buf, len, flags, addr.__sockaddr__,
addrlen);
+#endif
}
weak_alias (__libc_recvfrom, recvfrom)
weak_alias (__libc_recvfrom, __recvfrom)
diff --git a/sysdeps/unix/sysv/linux/recvmsg.c b/sysdeps/unix/sysv/linux/recvmsg.c
index cd7c9ca..952a0f2 100644
--- a/sysdeps/unix/sysv/linux/recvmsg.c
+++ b/sysdeps/unix/sysv/linux/recvmsg.c
@@ -21,11 +21,17 @@
#include <sysdep-cancel.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
ssize_t
__libc_recvmsg (int fd, struct msghdr *msg, int flags)
{
+#ifdef __ASSUME_RECVMSG_SYSCALL
+ return SYSCALL_CANCEL (recvmsg, fd, msg, flags);
+#else
return SOCKETCALL_CANCEL (recvmsg, fd, msg, flags);
+#endif
}
weak_alias (__libc_recvmsg, recvmsg)
weak_alias (__libc_recvmsg, __recvmsg)
diff --git a/sysdeps/unix/sysv/linux/send.c b/sysdeps/unix/sysv/linux/send.c
index f87ea86..d917e4d 100644
--- a/sysdeps/unix/sysv/linux/send.c
+++ b/sysdeps/unix/sysv/linux/send.c
@@ -21,11 +21,17 @@
#include <sysdep-cancel.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
ssize_t
__libc_send (int fd, const void *buf, size_t len, int flags)
{
+#ifdef __ASSUME_SEND_SYSCALL
+ return SYSCALL_CANCEL (send, fd, buf, len, flags);
+#else
return SOCKETCALL_CANCEL (send, fd, buf, len, flags);
+#endif
}
weak_alias (__libc_send, send)
weak_alias (__libc_send, __send)
diff --git a/sysdeps/unix/sysv/linux/sendmsg.c b/sysdeps/unix/sysv/linux/sendmsg.c
index e69ac3e..21ee009 100644
--- a/sysdeps/unix/sysv/linux/sendmsg.c
+++ b/sysdeps/unix/sysv/linux/sendmsg.c
@@ -21,11 +21,17 @@
#include <sysdep-cancel.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
ssize_t
__libc_sendmsg (int fd, const struct msghdr *msg, int flags)
{
+#ifdef __ASSUME_SENDMSG_SYSCALL
+ return SYSCALL_CANCEL (sendmsg, fd, msg, flags);
+#else
return SOCKETCALL_CANCEL (sendmsg, fd, msg, flags);
+#endif
}
weak_alias (__libc_sendmsg, sendmsg)
weak_alias (__libc_sendmsg, __sendmsg)
diff --git a/sysdeps/unix/sysv/linux/sendto.c b/sysdeps/unix/sysv/linux/sendto.c
index d2896a6..d7a2e53 100644
--- a/sysdeps/unix/sysv/linux/sendto.c
+++ b/sysdeps/unix/sysv/linux/sendto.c
@@ -21,13 +21,20 @@
#include <sysdep-cancel.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
ssize_t
__libc_sendto (int fd, const void *buf, size_t len, int flags,
__CONST_SOCKADDR_ARG addr, socklen_t addrlen)
{
+#ifdef __ASSUME_SENDTO_SYSCALL
+ return SYSCALL_CANCEL (sendto, fd, buf, len, flags, addr.__sockaddr__,
+ addrlen);
+#else
return SOCKETCALL_CANCEL (sendto, fd, buf, len, flags, addr.__sockaddr__,
addrlen);
+#endif
}
weak_alias (__libc_sendto, sendto)
weak_alias (__libc_sendto, __sendto)
diff --git a/sysdeps/unix/sysv/linux/setsockopt.c b/sysdeps/unix/sysv/linux/setsockopt.c
index 626c55b..1e87f42 100644
--- a/sysdeps/unix/sysv/linux/setsockopt.c
+++ b/sysdeps/unix/sysv/linux/setsockopt.c
@@ -20,10 +20,16 @@
#include <sys/socket.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
int
setsockopt (int fd, int level, int optname, const void *optval, socklen_t len)
{
+#ifdef __ASSUME_SETSOCKOPT_SYSCALL
+ return INLINE_SYSCALL (setsockopt, 5, fd, level, optname, optval, len);
+#else
return SOCKETCALL (setsockopt, fd, level, optname, optval, len);
+#endif
}
weak_alias (setsockopt, __setsockopt)
diff --git a/sysdeps/unix/sysv/linux/shutdown.c b/sysdeps/unix/sysv/linux/shutdown.c
index 8b3a3d8..21ec4cc 100644
--- a/sysdeps/unix/sysv/linux/shutdown.c
+++ b/sysdeps/unix/sysv/linux/shutdown.c
@@ -20,10 +20,16 @@
#include <sys/socket.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
int
__shutdown (int fd, int how)
{
+#ifdef __ASSUME_SHUTDOWN_SYSCALL
+ return INLINE_SYSCALL (shutdown, 2, fd, how);
+#else
return SOCKETCALL (shutdown, fd, how);
+#endif
}
weak_alias (__shutdown, shutdown)
diff --git a/sysdeps/unix/sysv/linux/socket.c b/sysdeps/unix/sysv/linux/socket.c
index 3b2c7fe..4628d15 100644
--- a/sysdeps/unix/sysv/linux/socket.c
+++ b/sysdeps/unix/sysv/linux/socket.c
@@ -20,11 +20,17 @@
#include <sys/socket.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
int
__socket (int fd, int type, int domain)
{
+#ifdef __ASSUME_SOCKET_SYSCALL
+ return INLINE_SYSCALL (socket, 3, fd, type, domain);
+#else
return SOCKETCALL (socket, fd, type, domain);
+#endif
}
libc_hidden_def (__socket)
weak_alias (__socket, socket)
diff --git a/sysdeps/unix/sysv/linux/socketpair.c b/sysdeps/unix/sysv/linux/socketpair.c
index cb70bcf..5c68970 100644
--- a/sysdeps/unix/sysv/linux/socketpair.c
+++ b/sysdeps/unix/sysv/linux/socketpair.c
@@ -20,10 +20,16 @@
#include <sys/socket.h>
#include <socketcall.h>
+#include <kernel-features.h>
+#include <sys/syscall.h>
int
__socketpair (int domain, int type, int protocol, int sv[2])
{
+#ifdef __ASSUME_SOCKETPAIR_SYSCALL
+ return INLINE_SYSCALL (socketpair, 4, domain, type, protocol, sv);
+#else
return SOCKETCALL (socketpair, domain, type, protocol, sv);
+#endif
}
weak_alias (__socketpair, socketpair)