From 74a2c71153b910ee4773866ee30be84730a4d5b8 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Wed, 11 May 2011 11:31:45 +0200 Subject: accept4: Implement cancellation .. and add proper prototype, move it into it's own obj and other such cleanups. Signed-off-by: Bernhard Reutner-Fischer --- libc/sysdeps/linux/common/stubs.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'libc/sysdeps/linux/common/stubs.c') diff --git a/libc/sysdeps/linux/common/stubs.c b/libc/sysdeps/linux/common/stubs.c index 655c64001..d9379874a 100644 --- a/libc/sysdeps/linux/common/stubs.c +++ b/libc/sysdeps/linux/common/stubs.c @@ -31,6 +31,10 @@ static int enosys_stub(void) # undef __NR_sync_file_range #endif +#ifndef __NR_accept4 +make_stub(accept4) +#endif + #ifndef __NR_bdflush make_stub(bdflush) #endif -- cgit v1.2.3 From 6af34270fa28a4274576a6d068e6a83346480f2e Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Wed, 11 May 2011 12:05:20 +0200 Subject: socketcalls: add stubs Signed-off-by: Bernhard Reutner-Fischer --- libc/sysdeps/linux/common/stubs.c | 94 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) (limited to 'libc/sysdeps/linux/common/stubs.c') diff --git a/libc/sysdeps/linux/common/stubs.c b/libc/sysdeps/linux/common/stubs.c index d9379874a..1aa07de36 100644 --- a/libc/sysdeps/linux/common/stubs.c +++ b/libc/sysdeps/linux/common/stubs.c @@ -31,6 +31,32 @@ static int enosys_stub(void) # undef __NR_sync_file_range #endif +#ifndef __UCLIBC_HAS_SOCKET__ +# undef __NR_accept +# undef __NR_accept4 +# undef __NR_bind +# undef __NR_connect +# undef __NR_getpeername +# undef __NR_getsockname +# undef __NR_getsockopt +# undef __NR_listen +# undef __NR_recv +# undef __NR_recvfrom +# undef __NR_recvmsg +# undef __NR_send +# undef __NR_sendmsg +# undef __NR_sendto +# undef __NR_setsockopt +# undef __NR_shutdown +# undef __NR_socket +# undef __NR_socketcall +# undef __NR_socketpair +#endif + +#ifndef __NR_accept +make_stub(accept) +#endif + #ifndef __NR_accept4 make_stub(accept4) #endif @@ -39,6 +65,10 @@ make_stub(accept4) make_stub(bdflush) #endif +#ifndef __NR_bind +make_stub(bind) +#endif + #ifndef __NR_capget make_stub(capget) #endif @@ -47,6 +77,10 @@ make_stub(capget) make_stub(capset) #endif +#ifndef __NR_connect +make_stub(connect) +#endif + #ifndef __NR_create_module make_stub(create_module) #endif @@ -95,10 +129,22 @@ make_stub(fsetxattr) make_stub(get_kernel_syms) #endif +#ifndef __NR_getpeername +make_stub(getpeername) +#endif + #if !defined(__NR_getpgrp) && (defined(__NR_getpgid) && (defined(__NR_getpid) || defined(__NR_getxpid))) make_stub(getpgrp) #endif +#ifndef __NR_getsockname +make_stub(getsockname) +#endif + +#ifndef __NR_getsockopt +make_stub(getsockopt) +#endif + #ifndef __NR_getxattr make_stub(getxattr) #endif @@ -111,6 +157,10 @@ make_stub(init_module) make_stub(lgetxattr) #endif +#ifndef __NR_listen +make_stub(listen) +#endif + #ifndef __NR_listxattr make_stub(listxattr) #endif @@ -135,6 +185,18 @@ make_stub(pivot_root) make_stub(query_module) #endif +#ifndef __NR_recv +make_stub(recv) +#endif + +#ifndef __NR_recvfrom +make_stub(recvfrom) +#endif + +#ifndef __NR_recvmsg +make_stub(recvmsg) +#endif + #ifndef __NR_removexattr make_stub(removexattr) #endif @@ -147,14 +209,46 @@ make_stub(sched_getaffinity) make_stub(sched_setaffinity) #endif +#ifndef __NR_send +make_stub(send) +#endif + +#ifndef __NR_sendmsg +make_stub(sendmsg) +#endif + +#ifndef __NR_sendto +make_stub(sendto) +#endif + +#ifndef __NR_setsockopt +make_stub(setsockopt) +#endif + #ifndef __NR_setxattr make_stub(setxattr) #endif +#ifndef __NR_shutdown +make_stub(shutdown) +#endif + #if !defined(__NR_signalfd4) && !defined(__NR_signalfd) make_stub(signalfd) #endif +#ifndef __NR_socket +make_stub(socket) +#endif + +#ifndef __NR_socketcall +make_stub(socketcall) +#endif + +#ifndef __NR_socketpair +make_stub(socketpair) +#endif + #ifndef __NR_rt_sigtimedwait make_stub(sigtimedwait) make_stub(sigwaitinfo) -- cgit v1.2.3 From d3ddb92ea03c89fe7d56a0bcbfbe64743bc51210 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Wed, 11 May 2011 13:12:14 +0200 Subject: add pipe2() Signed-off-by: Bernhard Reutner-Fischer --- extra/Configs/Config.in | 3 ++- include/unistd.h | 7 +++++++ libc/sysdeps/linux/common/Makefile.in | 3 ++- libc/sysdeps/linux/common/bits/kernel-features.h | 13 +++++++++++++ libc/sysdeps/linux/common/pipe2.c | 16 ++++++++++++++++ libc/sysdeps/linux/common/stubs.c | 8 ++++++++ 6 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 libc/sysdeps/linux/common/pipe2.c (limited to 'libc/sysdeps/linux/common/stubs.c') diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in index 147a316e6..7dffdeab9 100644 --- a/extra/Configs/Config.in +++ b/extra/Configs/Config.in @@ -915,7 +915,8 @@ config UCLIBC_LINUX_SPECIFIC default y help capget(), capset(), fstatfs(), inotify_*(), ioperm(), iopl(), - madvise(), modify_ldt(), personality(), prctl()/arch_prctl(), + madvise(), modify_ldt(), pipe2(), personality(), + prctl()/arch_prctl(), ppoll(), readahead(), reboot(), remap_file_pages(), sched_getaffinity(), sched_setaffinity(), sendfile(), setfsgid(), setfsuid(), setresuid(), diff --git a/include/unistd.h b/include/unistd.h index c421cb308..6b614dd05 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -389,6 +389,13 @@ extern ssize_t pwrite64 (int __fd, __const void *__buf, size_t __n, extern int pipe (int __pipedes[2]) __THROW __wur; libc_hidden_proto(pipe) +#ifdef __USE_GNU +/* Same as pipe but apply flags passed in FLAGS to the new file + descriptors. */ +extern int pipe2 (int __pipedes[2], int __flags) __THROW __wur; +libc_hidden_proto(pipe2) +#endif + /* Schedule an alarm. In SECONDS seconds, the process will get a SIGALRM. If SECONDS is zero, any currently scheduled alarm will be cancelled. The function returns the number of seconds remaining until the last diff --git a/libc/sysdeps/linux/common/Makefile.in b/libc/sysdeps/linux/common/Makefile.in index 8811268d0..d97c73dcb 100644 --- a/libc/sysdeps/linux/common/Makefile.in +++ b/libc/sysdeps/linux/common/Makefile.in @@ -19,7 +19,8 @@ CSRC-$(UCLIBC_LINUX_MODULE_24) += create_module.c query_module.c \ get_kernel_syms.c # we need these internally: fstatfs.c statfs.c CSRC-$(UCLIBC_LINUX_SPECIFIC) += capget.c capset.c inotify.c ioperm.c iopl.c \ - madvise.c modify_ldt.c personality.c ppoll.c prctl.c readahead.c reboot.c \ + madvise.c modify_ldt.c pipe2.c personality.c ppoll.c prctl.c \ + readahead.c reboot.c \ remap_file_pages.c sched_getaffinity.c sched_setaffinity.c \ sendfile64.c sendfile.c setfsgid.c setfsuid.c setresuid.c \ splice.c vmsplice.c tee.c signalfd.c swapoff.c swapon.c \ diff --git a/libc/sysdeps/linux/common/bits/kernel-features.h b/libc/sysdeps/linux/common/bits/kernel-features.h index b338e0770..6bf554457 100644 --- a/libc/sysdeps/linux/common/bits/kernel-features.h +++ b/libc/sysdeps/linux/common/bits/kernel-features.h @@ -309,6 +309,19 @@ # define __ASSUME_O_CLOEXEC 1 #endif +/* Support for various CLOEXEC and NONBLOCK flags was added for x86, + * x86-64, PPC, IA-64, and SPARC in 2.6.27. */ +#if __LINUX_KERNEL_VERSION >= 0x02061b \ + && (defined __i386__ || defined __x86_64__ || defined __powerpc__ \ + || defined __ia64__ || defined __sparc__ || defined __s390__) +/* # define __ASSUME_SOCK_CLOEXEC 1 */ +/* # define __ASSUME_IN_NONBLOCK 1 */ +# define __ASSUME_PIPE2 1 +/* # define __ASSUME_EVENTFD2 1 */ +/* # define __ASSUME_SIGNALFD4 1 */ +#endif + + /* These features were surely available with 2.4.12. */ #if __LINUX_KERNEL_VERSION >= 132108 && defined __mc68000__ # define __ASSUME_MMAP2_SYSCALL 1 diff --git a/libc/sysdeps/linux/common/pipe2.c b/libc/sysdeps/linux/common/pipe2.c new file mode 100644 index 000000000..0a3686d81 --- /dev/null +++ b/libc/sysdeps/linux/common/pipe2.c @@ -0,0 +1,16 @@ +/* vi: set sw=4 ts=4: */ +/* + * pipe2() for uClibc + * + * Copyright (C) 2011 Bernhard Reutner-Fischer + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +#include +#include + +#ifdef __NR_pipe2 +_syscall2(int, pipe2, int *, filedes, int, flags) +libc_hidden_def(pipe2) +#endif diff --git a/libc/sysdeps/linux/common/stubs.c b/libc/sysdeps/linux/common/stubs.c index 1aa07de36..f7c6dc5c5 100644 --- a/libc/sysdeps/linux/common/stubs.c +++ b/libc/sysdeps/linux/common/stubs.c @@ -31,6 +31,10 @@ static int enosys_stub(void) # undef __NR_sync_file_range #endif +#ifndef __UCLIBC_LINUX_SPECIFIC__ +# undef __NR_pipe2 +#endif + #ifndef __UCLIBC_HAS_SOCKET__ # undef __NR_accept # undef __NR_accept4 @@ -177,6 +181,10 @@ make_stub(lremovexattr) make_stub(lsetxattr) #endif +#ifndef __NR_pipe2 +make_stub(pipe2) +#endif + #ifndef __NR_pivot_root make_stub(pivot_root) #endif -- cgit v1.2.3 From 213709e1e14418f728b52c8fefb4af505c99d567 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Thu, 12 May 2011 10:07:25 +0200 Subject: socket: fix stubs Signed-off-by: Bernhard Reutner-Fischer --- libc/sysdeps/linux/common/stubs.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'libc/sysdeps/linux/common/stubs.c') diff --git a/libc/sysdeps/linux/common/stubs.c b/libc/sysdeps/linux/common/stubs.c index f7c6dc5c5..e14bbc3a0 100644 --- a/libc/sysdeps/linux/common/stubs.c +++ b/libc/sysdeps/linux/common/stubs.c @@ -57,11 +57,11 @@ static int enosys_stub(void) # undef __NR_socketpair #endif -#ifndef __NR_accept +#if !defined __NR_accept && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(accept) #endif -#ifndef __NR_accept4 +#if !defined __NR_accept4 && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(accept4) #endif @@ -69,7 +69,7 @@ make_stub(accept4) make_stub(bdflush) #endif -#ifndef __NR_bind +#if !defined __NR_bind && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(bind) #endif @@ -81,7 +81,7 @@ make_stub(capget) make_stub(capset) #endif -#ifndef __NR_connect +#if !defined __NR_connect && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(connect) #endif @@ -133,7 +133,7 @@ make_stub(fsetxattr) make_stub(get_kernel_syms) #endif -#ifndef __NR_getpeername +#if !defined __NR_getpeername && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(getpeername) #endif @@ -141,11 +141,11 @@ make_stub(getpeername) make_stub(getpgrp) #endif -#ifndef __NR_getsockname +#if !defined __NR_getsockname && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(getsockname) #endif -#ifndef __NR_getsockopt +#if !defined __NR_getsockopt && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(getsockopt) #endif @@ -161,7 +161,7 @@ make_stub(init_module) make_stub(lgetxattr) #endif -#ifndef __NR_listen +#if !defined __NR_listen && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(listen) #endif @@ -193,15 +193,15 @@ make_stub(pivot_root) make_stub(query_module) #endif -#ifndef __NR_recv +#if !defined __NR_recv && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(recv) #endif -#ifndef __NR_recvfrom +#if !defined __NR_recvfrom && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(recvfrom) #endif -#ifndef __NR_recvmsg +#if !defined __NR_recvmsg && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(recvmsg) #endif @@ -217,19 +217,19 @@ make_stub(sched_getaffinity) make_stub(sched_setaffinity) #endif -#ifndef __NR_send +#if !defined __NR_send && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(send) #endif -#ifndef __NR_sendmsg +#if !defined __NR_sendmsg && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(sendmsg) #endif -#ifndef __NR_sendto +#if !defined __NR_sendto && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(sendto) #endif -#ifndef __NR_setsockopt +#if !defined __NR_setsockopt && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(setsockopt) #endif @@ -237,7 +237,7 @@ make_stub(setsockopt) make_stub(setxattr) #endif -#ifndef __NR_shutdown +#if !defined __NR_shutdown && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(shutdown) #endif @@ -245,15 +245,15 @@ make_stub(shutdown) make_stub(signalfd) #endif -#ifndef __NR_socket +#if !defined __NR_socket && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(socket) #endif -#ifndef __NR_socketcall +#if !defined __NR_socketcall && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(socketcall) #endif -#ifndef __NR_socketpair +#if !defined __NR_socketpair && !defined __NR_socketcall && !defined __UCLIBC_HAS_SOCKET__ make_stub(socketpair) #endif -- cgit v1.2.3