]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
* Versions.def (glibc): Add GLIBC_2.9.
authorUlrich Drepper <drepper@redhat.com>
Fri, 25 Jul 2008 04:51:56 +0000 (04:51 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 25 Jul 2008 04:51:56 +0000 (04:51 +0000)
* io/Makefile (routines): Add dup3 and pipe2.
* io/Versions [glibc] (GLIBC_2.9): Add dup3 and pipe2.
* io/dup3.c: New file.
* io/pipe2.c: New file.
* posix/unistd.h: Declare dup3 and pipe2.
* socket/Makefile (routines): Add paccept.
* socket/Versions [glibc] (GLIBC_2.9): Add paccept.
* socket/paccept.c: New file.
* socket/sys/socket.h: Declare paccept.
* sysdeps/unix/syscalls.list: Add entry for dup3.
* sysdeps/unix/sysv/linux/Versions [glibc] (GLIBC_2.9): Add
epoll_create2 and inotify_init1.
* sysdeps/unix/sysv/linux/eventfd.c: Use eventfd1 syscall if possible.
* sysdeps/unix/sysv/linux/paccept.c: New file.
* sysdeps/unix/sysv/linux/signalfd.c: Use signalfd4 syscall if
possible.
* sysdeps/unix/sysv/linux/socketcall.h: Add SOCKOP_paccept.
* sysdeps/unix/sysv/linux/syscalls.list: Add epoll_create2,
inotify_init1, and pipe2 entries.
* sysdeps/unix/sysv/linux/alpha/sys/epoll.h: New file.
* sysdeps/unix/sysv/linux/alpha/sys/eventfd.h: New file.
* sysdeps/unix/sysv/linux/alpha/sys/inotify.h: New file.
* sysdeps/unix/sysv/linux/alpha/sys/signalfd.h: New file.
* sysdeps/unix/sysv/linux/alpha/sys/timerfd.h: New file.
* sysdeps/unix/sysv/linux/bits/socket.h: Define SOCK_CLOEXEC and
SOCK_NONBLOCK.
* sysdeps/unix/sysv/linux/i386/paccept.S: New file.
* sysdeps/unix/sysv/linux/sparc/sys/epoll.h: New file.
* sysdeps/unix/sysv/linux/sparc/sys/eventfd.h: New file.
* sysdeps/unix/sysv/linux/sparc/sys/inotify.h: New file.
* sysdeps/unix/sysv/linux/sparc/sys/signalfd.h: New file.
* sysdeps/unix/sysv/linux/sparc/sys/timerfd.h: New file.
* sysdeps/unix/sysv/linux/sparc/bits/socket.h: New file.
* sysdeps/unix/sysv/linux/sys/epoll.h: Define EPOLL_CLOEXEC and
EPOLL_NONBLOCK.  Declare epoll_create2.
* sysdeps/unix/sysv/linux/sys/eventfd.h: Define EFD_CLOEXEC and
EFD_NONBLOCK.
* sysdeps/unix/sysv/linux/sys/inotify.h: Define IN_CLOEXEC and
IN_NONBLOCK.  Declare inotify_init1.
* sysdeps/unix/sysv/linux/sys/signalfd.h: Define SFD_CLOEXEC and
SFD_NONBLOCK.
* sysdeps/unix/sysv/linux/sys/timerfd.h: Define TFD_CLOEXEC and
TFD_NONBLOCK.

36 files changed:
ChangeLog
Versions.def
io/Makefile
io/Versions
io/dup3.c [new file with mode: 0644]
io/pipe2.c [new file with mode: 0644]
posix/unistd.h
socket/Makefile
socket/Versions
socket/paccept.c [new file with mode: 0644]
socket/sys/socket.h
sysdeps/unix/syscalls.list
sysdeps/unix/sysv/linux/Versions
sysdeps/unix/sysv/linux/alpha/sys/epoll.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/alpha/sys/eventfd.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/alpha/sys/inotify.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/alpha/sys/signalfd.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/alpha/sys/timerfd.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/bits/socket.h
sysdeps/unix/sysv/linux/eventfd.c
sysdeps/unix/sysv/linux/i386/paccept.S [new file with mode: 0644]
sysdeps/unix/sysv/linux/paccept.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/signalfd.c
sysdeps/unix/sysv/linux/socketcall.h
sysdeps/unix/sysv/linux/sparc/bits/socket.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/sys/epoll.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/sys/eventfd.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/sys/inotify.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/sys/signalfd.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/sys/timerfd.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sys/epoll.h
sysdeps/unix/sysv/linux/sys/eventfd.h
sysdeps/unix/sysv/linux/sys/inotify.h
sysdeps/unix/sysv/linux/sys/signalfd.h
sysdeps/unix/sysv/linux/sys/timerfd.h
sysdeps/unix/sysv/linux/syscalls.list

index 65d8a969a16eb3bfe42a36e3074d4d7c0516a0f8..67fc9d3d1d2414f74caf9babaa77a6460f351129 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,50 @@
 2008-07-24  Ulrich Drepper  <drepper@redhat.com>
 
+       * Versions.def (glibc): Add GLIBC_2.9.
+       * io/Makefile (routines): Add dup3 and pipe2.
+       * io/Versions [glibc] (GLIBC_2.9): Add dup3 and pipe2.
+       * io/dup3.c: New file.
+       * io/pipe2.c: New file.
+       * posix/unistd.h: Declare dup3 and pipe2.
+       * socket/Makefile (routines): Add paccept.
+       * socket/Versions [glibc] (GLIBC_2.9): Add paccept.
+       * socket/paccept.c: New file.
+       * socket/sys/socket.h: Declare paccept.
+       * sysdeps/unix/syscalls.list: Add entry for dup3.
+       * sysdeps/unix/sysv/linux/Versions [glibc] (GLIBC_2.9): Add
+       epoll_create2 and inotify_init1.
+       * sysdeps/unix/sysv/linux/eventfd.c: Use eventfd1 syscall if possible.
+       * sysdeps/unix/sysv/linux/paccept.c: New file.
+       * sysdeps/unix/sysv/linux/signalfd.c: Use signalfd4 syscall if
+       possible.
+       * sysdeps/unix/sysv/linux/socketcall.h: Add SOCKOP_paccept.
+       * sysdeps/unix/sysv/linux/syscalls.list: Add epoll_create2,
+       inotify_init1, and pipe2 entries.
+       * sysdeps/unix/sysv/linux/alpha/sys/epoll.h: New file.
+       * sysdeps/unix/sysv/linux/alpha/sys/eventfd.h: New file.
+       * sysdeps/unix/sysv/linux/alpha/sys/inotify.h: New file.
+       * sysdeps/unix/sysv/linux/alpha/sys/signalfd.h: New file.
+       * sysdeps/unix/sysv/linux/alpha/sys/timerfd.h: New file.
+       * sysdeps/unix/sysv/linux/bits/socket.h: Define SOCK_CLOEXEC and
+       SOCK_NONBLOCK.
+       * sysdeps/unix/sysv/linux/i386/paccept.S: New file.
+       * sysdeps/unix/sysv/linux/sparc/sys/epoll.h: New file.
+       * sysdeps/unix/sysv/linux/sparc/sys/eventfd.h: New file.
+       * sysdeps/unix/sysv/linux/sparc/sys/inotify.h: New file.
+       * sysdeps/unix/sysv/linux/sparc/sys/signalfd.h: New file.
+       * sysdeps/unix/sysv/linux/sparc/sys/timerfd.h: New file.
+       * sysdeps/unix/sysv/linux/sparc/bits/socket.h: New file.
+       * sysdeps/unix/sysv/linux/sys/epoll.h: Define EPOLL_CLOEXEC and
+       EPOLL_NONBLOCK.  Declare epoll_create2.
+       * sysdeps/unix/sysv/linux/sys/eventfd.h: Define EFD_CLOEXEC and
+       EFD_NONBLOCK.
+       * sysdeps/unix/sysv/linux/sys/inotify.h: Define IN_CLOEXEC and
+       IN_NONBLOCK.  Declare inotify_init1.
+       * sysdeps/unix/sysv/linux/sys/signalfd.h: Define SFD_CLOEXEC and
+       SFD_NONBLOCK.
+       * sysdeps/unix/sysv/linux/sys/timerfd.h: Define TFD_CLOEXEC and
+       TFD_NONBLOCK.
+
        * elf/elf.h: Define AT_EXECFN.
        * elf/rtld.c [!__ASSUME_AT_EXECFN] (process_envvars): Don't handle
        LD_ORIGIN_PATH.
index 0de15f8f7f3427a65de40dad431e8695079c91d0..8b79917e62041e1bea7d3ed0573f3104421f2c97 100644 (file)
@@ -25,6 +25,7 @@ libc {
   GLIBC_2.6
   GLIBC_2.7
   GLIBC_2.8
+  GLIBC_2.9
 %ifdef USE_IN_LIBIO
   HURD_CTHREADS_0.3
 %endif
index 1acda4c8b6a0231c706b76e753023220a7660be9..caaa51b351a99a4f4a35b7362c7032f05b0ba3c4 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 1992-2002,2003,2005,2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 1992-2003,2005,2006,2007,2008 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
@@ -40,7 +40,7 @@ routines :=                                                           \
        open open64 openat openat64 close                               \
        read write lseek lseek64 access euidaccess faccessat            \
        fcntl flock lockf lockf64                                       \
-       dup dup2 pipe                                                   \
+       dup dup2 dup3 pipe pipe2                                        \
        creat creat64                                                   \
        chdir fchdir                                                    \
        getcwd getwd getdirname                                         \
index d603668f4fddc1950e825c18bd3516bb77372b50..6c0a23b4651afac811e026f019382b29761df8dd 100644 (file)
@@ -119,4 +119,7 @@ libc {
   GLIBC_2.7 {
     __open_2; __open64_2; __openat_2; __openat64_2;
   }
+  GLIBC_2.9 {
+    dup3; pipe2;
+  }
 }
diff --git a/io/dup3.c b/io/dup3.c
new file mode 100644 (file)
index 0000000..162ab4e
--- /dev/null
+++ b/io/dup3.c
@@ -0,0 +1,48 @@
+/* Copyright (C) 2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+
+/* Duplicate FD to FD2, closing the old FD2 and making FD2 be
+   open the same file as FD is which setting flags according to
+   FLAGS.  Return FD2 or -1.  */
+int
+dup3 (fd, fd2, flags)
+     int fd;
+     int fd2;
+     int flags;
+{
+  if (fd < 0 || fd2 < 0)
+    {
+      __set_errno (EBADF);
+      return -1;
+    }
+
+  if (fd == fd2)
+    /* No way to check that they are valid.  */
+    return fd2;
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+stub_warning (dup3)
+
+#include <stub-tag.h>
diff --git a/io/pipe2.c b/io/pipe2.c
new file mode 100644 (file)
index 0000000..a0b8a8b
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright (C) 1991, 1995, 1996, 2002, 2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <errno.h>
+#include <unistd.h>
+#include <stddef.h>
+
+/* Create a one-way communication channel (__pipe).  If successful,
+   two file descriptors are stored in PIPEDES; bytes written on
+   PIPEDES[1] can be read from PIPEDES[0].  Apply FLAGS to the new
+   file descriptors.  Returns 0 if successful, -1 if not.  */
+int
+pipe2 (pipedes, flags)
+     int pipedes[2];
+     int flags;
+{
+  if (pipedes == NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+stub_warning (pipe2)
+
+#include <stub-tag.h>
index 01ac3f8b41fcc98291f959e0bb06557a8b49d400..96bb02dff4b67360c0390a279d2d35bec121c888 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2006, 2007, 2008 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
@@ -383,6 +383,12 @@ extern ssize_t pwrite64 (int __fd, __const void *__buf, size_t __n,
    Returns 0 if successful, -1 if not.  */
 extern int pipe (int __pipedes[2]) __THROW __wur;
 
+#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;
+#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
@@ -492,6 +498,12 @@ extern int dup (int __fd) __THROW __wur;
 /* Duplicate FD to FD2, closing FD2 and making it open on the same file.  */
 extern int dup2 (int __fd, int __fd2) __THROW;
 
+#ifdef __USE_GNU
+/* Duplicate FD to FD2, closing FD2 and making it open on the same
+   file while setting flags according to FLAGS.  */
+extern int dup3 (int __fd, int __fd2, int __flags) __THROW;
+#endif
+
 /* NULL-terminated array of "NAME=VALUE" environment variables.  */
 extern char **__environ;
 #ifdef __USE_GNU
index aa0776e5bf1b014e2fbf90e7f691acab29ac2b12..e1c9ec0fade9902ad9797bfe579ae652c8978e08 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 1991,1995-2001,2005 Free Software Foundation, Inc.
+# Copyright (C) 1991,1995-2001,2005,2008 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
@@ -27,7 +27,7 @@ headers       := sys/socket.h sys/un.h bits/sockaddr.h bits/socket.h \
 routines := accept bind connect getpeername getsockname getsockopt     \
            listen recv recvfrom recvmsg send sendmsg sendto            \
            setsockopt shutdown socket socketpair isfdtype opensock     \
-           sockatmark
+           sockatmark paccept
 
 distribute := ifreq.h
 
index d282eff79e7344b66f949b89b8f666490bcd94c1..9764227c36ad00f28ccf13580ef656e35165598f 100644 (file)
@@ -31,4 +31,7 @@ libc {
     # Addition from P1003.1-200x
     sockatmark;
   }
+  GLIBC_2.9 {
+    paccept;
+  }
 }
diff --git a/socket/paccept.c b/socket/paccept.c
new file mode 100644 (file)
index 0000000..777dd8c
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright (C) 2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <errno.h>
+#include <sys/socket.h>
+
+/* Await a connection on socket FD.
+   When a connection arrives, open a new socket to communicate with it,
+   set *ADDR (which is *ADDR_LEN bytes long) to the address of the connecting
+   peer and *ADDR_LEN to the address's actual length, and return the
+   new socket's descriptor, or -1 for errors.  SS is installed as
+   the thread's signal mask and FLAGS are additional flags.  */
+int
+paccept (fd, addr, addr_len, ss, flags)
+     int fd;
+     __SOCKADDR_ARG addr;
+     socklen_t *addr_len;
+     const __sigset_t *ss;
+     int flags;
+{
+  __set_errno (ENOSYS);
+  return -1;
+}
+libc_hidden_def (paccept)
+
+
+stub_warning (paccept)
+#include <stub-tag.h>
index 6d9eab7f943f19ba59054e6bf1ed17095f60f8a5..ea4123d287a58068a00701c67d8f9020f06bec21 100644 (file)
@@ -1,5 +1,5 @@
 /* Declarations of socket constants, types, and functions.
-   Copyright (C) 1991,92,1994-2001,2003,2005,2007
+   Copyright (C) 1991,92,1994-2001,2003,2005,2007,2008
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -28,6 +28,10 @@ __BEGIN_DECLS
 #include <sys/uio.h>
 #define        __need_size_t
 #include <stddef.h>
+#ifdef __USE_GNU
+/* Get the __sigset_t definition.  */
+# include <bits/sigset.h>
+#endif
 
 
 /* This operating system-specific header file defines the SOCK_*, PF_*,
@@ -210,6 +214,18 @@ extern int listen (int __fd, int __n) __THROW;
 extern int accept (int __fd, __SOCKADDR_ARG __addr,
                   socklen_t *__restrict __addr_len);
 
+#ifdef __USE_GNU
+/* Variant of the accept function which takes additional parameters.  The
+   MASK parameter allows to change the thread signal mask for the duration
+   of the call.  The FLAGS parameter allows to pass additional flags.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int paccept (int __fd, __SOCKADDR_ARG __addr,
+                   socklen_t *__restrict __addr_len,
+                   __const __sigset_t *__restrict __ss, int __flags);
+#endif
+
 /* Shut down all or part of the connection open on socket FD.
    HOW determines what to shut down:
      SHUT_RD   = No more receptions;
index 4c963abe58e208a5ac28a27338a5226cc3bb0243..04ed63c4d75451b978fd9488e102fe0d058b0295 100644 (file)
@@ -9,6 +9,7 @@ chroot          -       chroot          i:s     chroot
 close          -       close           Ci:i    __libc_close    __close close
 dup            -       dup             i:i     __dup           dup
 dup2           -       dup2            i:ii    __dup2          dup2
+dup3           -       dup3            i:iii   dup3
 fchdir         -       fchdir          i:i     __fchdir        fchdir
 fcntl          -       fcntl           Ci:iiF  __libc_fcntl    __fcntl __fcntl_internal fcntl
 fstatfs                -       fstatfs         i:ip    __fstatfs       fstatfs
index af4c293c26e8a94096b8c580bfae14d2ea7e8d31..5a76028c6cc800387934461daffe5371cde617ad 100644 (file)
@@ -135,6 +135,9 @@ libc {
   GLIBC_2.8 {
     timerfd_create; timerfd_settime; timerfd_gettime;
   }
+  GLIBC_2.9 {
+    epoll_create2; inotify_init1;
+  }
   GLIBC_PRIVATE {
     # functions used in other libraries
     __syscall_rt_sigqueueinfo;
diff --git a/sysdeps/unix/sysv/linux/alpha/sys/epoll.h b/sysdeps/unix/sysv/linux/alpha/sys/epoll.h
new file mode 100644 (file)
index 0000000..9f983a5
--- /dev/null
@@ -0,0 +1,143 @@
+/* Copyright (C) 2002-2006, 2007, 2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef        _SYS_EPOLL_H
+#define        _SYS_EPOLL_H    1
+
+#include <stdint.h>
+#include <sys/types.h>
+
+/* Get __sigset_t.  */
+#include <bits/sigset.h>
+
+#ifndef __sigset_t_defined
+# define __sigset_t_defined
+typedef __sigset_t sigset_t;
+#endif
+
+
+/* Flags to be passed to epoll_create2.  */
+enum
+  {
+    EPOLL_CLOEXEC = 010000000,
+#define EPOLL_CLOEXEC EPOLL_CLOEXEC
+    EPOLL_NONBLOCK = 04
+#define EPOLL_NONBLOCK EPOLL_NONBLOCK
+  };
+
+
+enum EPOLL_EVENTS
+  {
+    EPOLLIN = 0x001,
+#define EPOLLIN EPOLLIN
+    EPOLLPRI = 0x002,
+#define EPOLLPRI EPOLLPRI
+    EPOLLOUT = 0x004,
+#define EPOLLOUT EPOLLOUT
+    EPOLLRDNORM = 0x040,
+#define EPOLLRDNORM EPOLLRDNORM
+    EPOLLRDBAND = 0x080,
+#define EPOLLRDBAND EPOLLRDBAND
+    EPOLLWRNORM = 0x100,
+#define EPOLLWRNORM EPOLLWRNORM
+    EPOLLWRBAND = 0x200,
+#define EPOLLWRBAND EPOLLWRBAND
+    EPOLLMSG = 0x400,
+#define EPOLLMSG EPOLLMSG
+    EPOLLERR = 0x008,
+#define EPOLLERR EPOLLERR
+    EPOLLHUP = 0x010,
+#define EPOLLHUP EPOLLHUP
+    EPOLLRDHUP = 0x2000,
+#define EPOLLRDHUP EPOLLRDHUP
+    EPOLLONESHOT = (1 << 30),
+#define EPOLLONESHOT EPOLLONESHOT
+    EPOLLET = (1 << 31)
+#define EPOLLET EPOLLET
+  };
+
+
+/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl().  */
+#define EPOLL_CTL_ADD 1        /* Add a file descriptor to the interface.  */
+#define EPOLL_CTL_DEL 2        /* Remove a file descriptor from the interface.  */
+#define EPOLL_CTL_MOD 3        /* Change file descriptor epoll_event structure.  */
+
+
+typedef union epoll_data
+{
+  void *ptr;
+  int fd;
+  uint32_t u32;
+  uint64_t u64;
+} epoll_data_t;
+
+struct epoll_event
+{
+  uint32_t events;     /* Epoll events */
+  epoll_data_t data;   /* User data variable */
+};
+
+
+__BEGIN_DECLS
+
+/* Creates an epoll instance.  Returns an fd for the new instance.
+   The "size" parameter is a hint specifying the number of file
+   descriptors to be associated with the new instance.  The fd
+   returned by epoll_create() should be closed with close().  */
+extern int epoll_create (int __size) __THROW;
+
+/* Same as epoll_create but with an additional FLAGS parameter.  */
+extern int epoll_create2 (int __size, int __flags) __THROW;
+
+
+/* Manipulate an epoll instance "epfd". Returns 0 in case of success,
+   -1 in case of error ( the "errno" variable will contain the
+   specific error code ) The "op" parameter is one of the EPOLL_CTL_*
+   constants defined above. The "fd" parameter is the target of the
+   operation. The "event" parameter describes which events the caller
+   is interested in and any associated user data.  */
+extern int epoll_ctl (int __epfd, int __op, int __fd,
+                     struct epoll_event *__event) __THROW;
+
+
+/* Wait for events on an epoll instance "epfd". Returns the number of
+   triggered events returned in "events" buffer. Or -1 in case of
+   error with the "errno" variable set to the specific error code. The
+   "events" parameter is a buffer that will contain triggered
+   events. The "maxevents" is the maximum number of events to be
+   returned ( usually size of "events" ). The "timeout" parameter
+   specifies the maximum wait time in milliseconds (-1 == infinite).
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int epoll_wait (int __epfd, struct epoll_event *__events,
+                      int __maxevents, int __timeout);
+
+
+/* Same as epoll_wait, but the thread's signal mask is temporarily
+   and atomically replaced with the one provided as parameter.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int epoll_pwait (int __epfd, struct epoll_event *__events,
+                       int __maxevents, int __timeout,
+                       __const __sigset_t *__ss);
+
+__END_DECLS
+
+#endif /* sys/epoll.h */
diff --git a/sysdeps/unix/sysv/linux/alpha/sys/eventfd.h b/sysdeps/unix/sysv/linux/alpha/sys/eventfd.h
new file mode 100644 (file)
index 0000000..c8ce554
--- /dev/null
@@ -0,0 +1,52 @@
+/* Copyright (C) 2007, 2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef        _SYS_EVENTFD_H
+#define        _SYS_EVENTFD_H  1
+
+#include <stdint.h>
+
+
+/* Type for event counter.  */
+typedef uint64_t eventfd_t;
+
+/* Flags for signalfd.  */
+enum
+  {
+    EFD_CLOEXEC = 010000000,
+#define EFD_CLOEXEC EFD_CLOEXEC
+    EFD_NONBLOCK = 04
+#define EFD_NONBLOCK EFD_NONBLOCK
+  };
+
+
+__BEGIN_DECLS
+
+/* Return file descriptor for generic event channel.  Set initial
+   value to COUNT.  */
+extern int eventfd (int __count, int __flags) __THROW;
+
+/* Read event counter and possibly wait for events.  */
+extern int eventfd_read (int __fd, eventfd_t *__value);
+
+/* Increment event counter.  */
+extern int eventfd_write (int __fd, eventfd_t value);
+
+__END_DECLS
+
+#endif /* sys/eventfd.h */
diff --git a/sysdeps/unix/sysv/linux/alpha/sys/inotify.h b/sysdeps/unix/sysv/linux/alpha/sys/inotify.h
new file mode 100644 (file)
index 0000000..d61c700
--- /dev/null
@@ -0,0 +1,105 @@
+/* Copyright (C) 2005, 2006, 2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef        _SYS_INOTIFY_H
+#define        _SYS_INOTIFY_H  1
+
+#include <stdint.h>
+
+
+/* Flags for the parameter of inotify_init1.  */
+enum
+  {
+    IN_CLOEXEC = 010000000,
+#define IN_CLOEXEC IN_CLOEXEC
+    IN_NONBLOCK = 04
+#define IN_NONBLOCK IN_NONBLOCK
+  };
+
+
+/* Structure describing an inotify event.  */
+struct inotify_event
+{
+  int wd;              /* Watch descriptor.  */
+  uint32_t mask;       /* Watch mask.  */
+  uint32_t cookie;     /* Cookie to synchronize two events.  */
+  uint32_t len;                /* Length (including NULs) of name.  */
+  char name __flexarr; /* Name.  */
+};
+
+
+/* Supported events suitable for MASK parameter of INOTIFY_ADD_WATCH.  */
+#define IN_ACCESS       0x00000001     /* File was accessed.  */
+#define IN_MODIFY       0x00000002     /* File was modified.  */
+#define IN_ATTRIB       0x00000004     /* Metadata changed.  */
+#define IN_CLOSE_WRITE  0x00000008     /* Writtable file was closed.  */
+#define IN_CLOSE_NOWRITE 0x00000010    /* Unwrittable file closed.  */
+#define IN_CLOSE        (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close.  */
+#define IN_OPEN                 0x00000020     /* File was opened.  */
+#define IN_MOVED_FROM   0x00000040     /* File was moved from X.  */
+#define IN_MOVED_TO      0x00000080    /* File was moved to Y.  */
+#define IN_MOVE                 (IN_MOVED_FROM | IN_MOVED_TO) /* Moves.  */
+#define IN_CREATE       0x00000100     /* Subfile was created.  */
+#define IN_DELETE       0x00000200     /* Subfile was deleted.  */
+#define IN_DELETE_SELF  0x00000400     /* Self was deleted.  */
+#define IN_MOVE_SELF    0x00000800     /* Self was moved.  */
+
+/* Events sent by the kernel.  */
+#define IN_UNMOUNT      0x00002000     /* Backing fs was unmounted.  */
+#define IN_Q_OVERFLOW   0x00004000     /* Event queued overflowed.  */
+#define IN_IGNORED      0x00008000     /* File was ignored.  */
+
+/* Helper events.  */
+#define IN_CLOSE        (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)    /* Close.  */
+#define IN_MOVE                 (IN_MOVED_FROM | IN_MOVED_TO)          /* Moves.  */
+
+/* Special flags.  */
+#define IN_ONLYDIR      0x01000000     /* Only watch the path if it is a
+                                          directory.  */
+#define IN_DONT_FOLLOW  0x02000000     /* Do not follow a sym link.  */
+#define IN_MASK_ADD     0x20000000     /* Add to the mask of an already
+                                          existing watch.  */
+#define IN_ISDIR        0x40000000     /* Event occurred against dir.  */
+#define IN_ONESHOT      0x80000000     /* Only send event once.  */
+
+/* All events which a program can wait on.  */
+#define IN_ALL_EVENTS   (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE  \
+                         | IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM        \
+                         | IN_MOVED_TO | IN_CREATE | IN_DELETE               \
+                         | IN_DELETE_SELF | IN_MOVE_SELF)
+
+
+__BEGIN_DECLS
+
+/* Create and initialize inotify instance.  */
+extern int inotify_init (void) __THROW;
+
+/* Create and initialize inotify instance.  */
+extern int inotify_init1 (int __flags) __THROW;
+
+/* Add watch of object NAME to inotify instance FD.  Notify about
+   events specified by MASK.  */
+extern int inotify_add_watch (int __fd, const char *__name, uint32_t __mask)
+  __THROW;
+
+/* Remove the watch specified by WD from the inotify instance FD.  */
+extern int inotify_rm_watch (int __fd, uint32_t __wd) __THROW;
+
+__END_DECLS
+
+#endif /* sys/inotify.h */
diff --git a/sysdeps/unix/sysv/linux/alpha/sys/signalfd.h b/sysdeps/unix/sysv/linux/alpha/sys/signalfd.h
new file mode 100644 (file)
index 0000000..a820eaf
--- /dev/null
@@ -0,0 +1,66 @@
+/* Copyright (C) 2007, 2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef        _SYS_SIGNALFD_H
+#define        _SYS_SIGNALFD_H 1
+
+#define __need_sigset_t
+#include <signal.h>
+#include <stdint.h>
+
+
+struct signalfd_siginfo
+{
+  uint32_t ssi_signo;
+  int32_t ssi_errno;
+  int32_t ssi_code;
+  uint32_t ssi_pid;
+  uint32_t ssi_uid;
+  int32_t ssi_fd;
+  uint32_t ssi_tid;
+  uint32_t ssi_band;
+  uint32_t ssi_overrun;
+  uint32_t ssi_trapno;
+  int32_t ssi_status;
+  int32_t ssi_int;
+  uint64_t ssi_ptr;
+  uint64_t ssi_utime;
+  uint64_t ssi_stime;
+  uint64_t ssi_addr;
+  uint8_t __pad[48];
+};
+
+/* Flags for signalfd.  */
+enum
+  {
+    SFD_CLOEXEC = 010000000,
+#define SFD_CLOEXEC SFD_CLOEXEC
+    SFD_NONBLOCK = 04
+#define SFD_NONBLOCK SFD_NONBLOCK
+  };
+
+__BEGIN_DECLS
+
+/* Request notification for delivery of signals in MASK to be
+   performed using descriptor FD.*/
+extern int signalfd (int __fd, const sigset_t *__mask, int __flags)
+  __nonnull ((2)) __THROW;
+
+__END_DECLS
+
+#endif /* sys/signalfd.h */
diff --git a/sysdeps/unix/sysv/linux/alpha/sys/timerfd.h b/sysdeps/unix/sysv/linux/alpha/sys/timerfd.h
new file mode 100644 (file)
index 0000000..09d6ccf
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright (C) 2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef        _SYS_TIMERFD_H
+#define        _SYS_TIMERFD_H  1
+
+#include <time.h>
+
+
+/* Bits to be set in the FLAGS parameter of `timerfd_create'.  */
+enum
+  {
+    TFD_CLOEXEC = 010000000,
+#define TFD_CLOEXEC TFD_CLOEXEC
+    TFD_NONBLOCK = 04
+#define TFD_NONBLOCK TFD_NONBLOCK
+  };
+
+
+/* Bits to be set in the FLAGS parameter of `timerfd_settime'.  */
+enum
+  {
+    TFD_TIMER_ABSTIME = 1 << 0
+#define TFD_TIMER_ABSTIME TFD_TIMER_ABSTIME
+  };
+
+
+__BEGIN_DECLS
+
+/* Return file descriptor for new interval timer source.  */
+extern int timerfd_create (clockid_t __clock_id, int __flags) __THROW;
+
+/* Set next expiration time of interval timer source UFD to UTMR.  If
+   FLAGS has the TFD_TIMER_ABSTIME flag set the timeout value is
+   absolute.  Optionally return the old expiration time in OTMR.  */
+extern int timerfd_settime (int __ufd, int __flags,
+                           __const struct itimerspec *__utmr,
+                           struct itimerspec *__otmr) __THROW;
+
+/* Return the next expiration time of UFD.  */
+extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW;
+
+__END_DECLS
+
+#endif /* sys/timerfd.h */
index 3dda3d1c2913ea6294c6a40ef392b7bf8442838d..187d964bdf32145a15d81a9addc2b39811b5a173 100644 (file)
@@ -52,12 +52,22 @@ enum __socket_type
   SOCK_SEQPACKET = 5,          /* Sequenced, reliable, connection-based,
                                   datagrams of fixed maximum length.  */
 #define SOCK_SEQPACKET SOCK_SEQPACKET
-  SOCK_DCCP = 6,
-#define SOCK_DCCP SOCK_DCCP    /* Datagram Congestion Control Protocol.  */
-  SOCK_PACKET = 10             /* Linux specific way of getting packets
+  SOCK_DCCP = 6,               /* Datagram Congestion Control Protocol.  */
+#define SOCK_DCCP SOCK_DCCP
+  SOCK_PACKET = 10,            /* Linux specific way of getting packets
                                   at the dev level.  For writing rarp and
                                   other similar things on the user level. */
 #define SOCK_PACKET SOCK_PACKET
+
+  /* Flags to be ORed into the type parameter of socket and socketpair and
+     used for the flags parameter of paccept.  */
+
+  SOCK_CLOEXEC = 02000000,     /* Atomically set close-on-exec flag for the
+                                  new descriptor(s).  */
+#define SOCK_CLOEXEC SOCK_CLOEXEC
+  SOCK_NONBLOCK = 04000                /* Atomically mark descriptor(s) as
+                                  non-blocking.  */
+#define SOCK_NONBLOCK SOCK_NONBLOCK
 };
 
 /* Protocol families.  */
index 180861aad28c254541b107ecc2eb834ba1665b57..6ebfed86f1216260571caaf323f3371328869e92 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2007, 2008 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
 int
 eventfd (int count, int flags)
 {
-  /* The system call has no flag parameter which is bad.  So we have
+#ifdef __NR_eventfd1
+  return INLINE_SYSCALL (eventfd1, 1, flags);
+#else
+  /* The old system call has no flag parameter which is bad.  So we have
      to wait until we have to support to pass additional values to the
      kernel (sys_indirect) before implementing setting flags like
      O_NONBLOCK etc.  */
@@ -34,10 +37,11 @@ eventfd (int count, int flags)
       return -1;
     }
 
-#ifdef __NR_eventfd
+# ifdef __NR_eventfd
   return INLINE_SYSCALL (eventfd, 1, count);
-#else
+# else
   __set_errno (ENOSYS);
   return -1;
+# endif
 #endif
 }
diff --git a/sysdeps/unix/sysv/linux/i386/paccept.S b/sysdeps/unix/sysv/linux/i386/paccept.S
new file mode 100644 (file)
index 0000000..02ad78d
--- /dev/null
@@ -0,0 +1,135 @@
+/* Copyright (C) 1995-1998,2002,2003,2005,2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <sysdep-cancel.h>
+#include <socketcall.h>
+#include <tls.h>
+
+#define _NSIG 64
+
+#define P(a, b) P2(a, b)
+#define P2(a, b) a##b
+
+       .text
+/* The socket-oriented system calls are handled unusally in Linux.
+   They are all gated through the single `socketcall' system call number.
+   `socketcall' takes two arguments: the first is the subcode, specifying
+   which socket function is being called; and the second is a pointer to
+   the arguments to the specific function.  */
+
+ENTRY(do_paccept)
+#ifdef SOCKOP_paccept
+       subl $6*4, %esp
+       cfi_adjust_cfa_offset(6*4)
+
+       movl (%eax), %ecx
+       movl %ecx, (%esp)
+       movl 4(%eax), %ecx
+       movl %ecx, 4(%esp)
+       movl 8(%eax), %ecx
+       movl %ecx, 8(%esp)
+       movl 12(%eax), %ecx
+       movl %ecx, 12(%esp)
+       movl $(_NSIG / 8), 16(%esp)
+       movl 16(%eax), %ecx
+       movl %ecx, 20(%esp)
+
+       movl $SYS_ify(socketcall), %eax /* System call number in %eax.  */
+
+       movl $SOCKOP_paccept, %ebx      /* Subcode is first arg to syscall.  */
+       movl %esp, %ecx                 /* Address of args is 2nd arg.  */
+
+        /* Do the system call trap.  */
+       ENTER_KERNEL
+
+       addl $6*4, %esp
+       cfi_adjust_cfa_offset(-6*4)
+
+       /* %eax is < 0 if there was an error.  */
+       cmpl $-125, %eax
+       jae SYSCALL_ERROR_LABEL
+#else
+       movl $-ENOSYS, %eax
+       jmp SYSCALL_ERROR_LABEL
+
+       .section .gnu.glibc-stub.paccept
+       .previous
+       .section .gnu.warning.paccept
+       .string "warning: paccept is not implemented and will always fail"
+       .previous
+#endif
+L(pseudo_end):
+       ret
+PSEUDO_END(do_paccept)
+
+
+       .globl paccept
+ENTRY (paccept)
+#ifdef CENABLE
+       SINGLE_THREAD_P
+       jne 1f
+#endif
+
+       /* Save registers.  */
+       movl %ebx, %edx
+       cfi_register (3, 2)
+
+       lea 4(%esp), %eax
+       call do_paccept
+
+       /* Restore registers.  */
+       movl %edx, %ebx
+       cfi_restore (3)
+
+       ret
+
+#ifdef CENABLE
+       /* We need one more register.  */
+1:     pushl %esi
+       cfi_adjust_cfa_offset(4)
+
+       /* Enable asynchronous cancellation.  */
+       CENABLE
+       movl %eax, %esi
+       cfi_offset(6, -8)               /* %esi */
+
+       /* Save registers.  */
+       movl %ebx, %edx
+       cfi_register (3, 2)
+
+       lea 8(%esp), %eax
+       call do_paccept
+
+       /* Restore registers.  */
+       movl %edx, %ebx
+       cfi_restore (3)
+
+       /* Restore the cancellation.  */
+       xchgl %esi, %eax
+       CDISABLE
+
+       /* Restore registers.  */
+       movl %esi, %eax
+       popl %esi
+       cfi_restore (6)
+       cfi_adjust_cfa_offset(-4)
+
+       /* Successful; return the syscall's value.  */
+       ret
+#endif
+PSEUDO_END (paccept)
diff --git a/sysdeps/unix/sysv/linux/paccept.c b/sysdeps/unix/sysv/linux/paccept.c
new file mode 100644 (file)
index 0000000..1817d38
--- /dev/null
@@ -0,0 +1,54 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@redhat.com>, 2008.
+
+   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 <signal.h>
+#include <sys/socket.h>
+
+#include <sysdep-cancel.h>
+#include <sys/syscall.h>
+
+#ifdef __NR_paccept
+int
+paccept (int fd, __SOCKADDR_ARG addr, socklen_t *addr_len,
+        const __sigset_t *ss, int flags)
+{
+  if (SINGLE_THREAD_P)
+    return INLINE_SYSCALL (paccept, 6, fd, addr, addr_len, ss,
+                          _NSIG / 8, flags);
+
+  int oldtype = LIBC_CANCEL_ASYNC ();
+
+  int result = INLINE_SYSCALL (paccept, 6, fd, addr, addr_len, ss,
+                              _NSIG / 8, flags);
+
+  LIBC_CANCEL_RESET (oldtype);
+
+  return result;
+}
+#else
+int
+paccept (int fd, __SOCKADDR_ARG addr, socklen_t *addr_len,
+        const __sigset_t *ss, int flags)
+{
+  __set_errno (ENOSYS);
+  return -1;
+stub_warning (epoll_pwait)
+}
+#endif
index 09355ecd1dbbc67b4e988d089a75a5bef81d994f..9898f2923122bd0f9efc008bb4b27354ab2da5a2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2007, 2008 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
 int
 signalfd (int fd, const sigset_t *mask, int flags)
 {
-  /* The system call has no flag parameter which is bad.  So we have
+#ifdef __NR_signalfd4
+  return INLINE_SYSCALL (signalfd4, 4, fd, mask, _NSIG / 8, flags);
+#else
+  /* The old system call has no flag parameter which is bad.  So we have
      to wait until we have to support to pass additional values to the
      kernel (sys_indirect) before implementing setting flags like
      O_NONBLOCK etc.  */
@@ -35,10 +38,11 @@ signalfd (int fd, const sigset_t *mask, int flags)
       return -1;
     }
 
-#ifdef __NR_signalfd
+# ifdef __NR_signalfd
   return INLINE_SYSCALL (signalfd, 3, fd, mask, _NSIG / 8);
-#else
+# else
   __set_errno (ENOSYS);
   return -1;
+# endif
 #endif
 }
index d836534f3aad2b7b6ddee4af8efe303ca4b22c04..24ec9ee2ac3eec23f6bbbaeb410e0800f2d9a55b 100644 (file)
@@ -1,5 +1,5 @@
 /* ID for functions called via socketcall system call.
-   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 2008 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
@@ -18,7 +18,6 @@
    02111-1307 USA.  */
 
 #ifndef _SYS_SOCKETCALL_H
-
 #define _SYS_SOCKETCALL_H      1
 
 /* Define unique numbers for the operations permitted on socket.  Linux
@@ -44,5 +43,6 @@
 #define SOCKOP_getsockopt      15
 #define SOCKOP_sendmsg         16
 #define SOCKOP_recvmsg         17
+#define SOCKOP_paccept         18
 
-#endif /* _SYS_SOCKETCALL_H */
+#endif /* sys/socketcall.h */
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/socket.h b/sysdeps/unix/sysv/linux/sparc/bits/socket.h
new file mode 100644 (file)
index 0000000..032b7df
--- /dev/null
@@ -0,0 +1,391 @@
+/* System-specific socket constants and types.  Linux/SPARC version.
+   Copyright (C) 1991, 1992, 1994-2001, 2004, 2006, 2007, 2008
+   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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef __BITS_SOCKET_H
+#define __BITS_SOCKET_H
+
+#ifndef _SYS_SOCKET_H
+# error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
+#endif
+
+#define        __need_size_t
+#include <stddef.h>
+
+#include <sys/types.h>
+
+/* Type for length arguments in socket calls.  */
+#ifndef __socklen_t_defined
+typedef __socklen_t socklen_t;
+# define __socklen_t_defined
+#endif
+
+/* Types of sockets.  */
+enum __socket_type
+{
+  SOCK_STREAM = 1,             /* Sequenced, reliable, connection-based
+                                  byte streams.  */
+#define SOCK_STREAM SOCK_STREAM
+  SOCK_DGRAM = 2,              /* Connectionless, unreliable datagrams
+                                  of fixed maximum length.  */
+#define SOCK_DGRAM SOCK_DGRAM
+  SOCK_RAW = 3,                        /* Raw protocol interface.  */
+#define SOCK_RAW SOCK_RAW
+  SOCK_RDM = 4,                        /* Reliably-delivered messages.  */
+#define SOCK_RDM SOCK_RDM
+  SOCK_SEQPACKET = 5,          /* Sequenced, reliable, connection-based,
+                                  datagrams of fixed maximum length.  */
+#define SOCK_SEQPACKET SOCK_SEQPACKET
+  SOCK_DCCP = 6,               /* Datagram Congestion Control Protocol.  */
+#define SOCK_DCCP SOCK_DCCP
+  SOCK_PACKET = 10,            /* Linux specific way of getting packets
+                                  at the dev level.  For writing rarp and
+                                  other similar things on the user level. */
+#define SOCK_PACKET SOCK_PACKET
+
+  /* Flags to be ORed into the type parameter of socket and socketpair.  */
+
+  SOCK_CLOEXEC = 0x400000,     /* Atomically set close-on-exec flag for the
+                                  new descriptor(s).  */
+#define SOCK_CLOEXEC SOCK_CLOEXEC
+  SOCK_NONBLOCK = 0x4000       /* Atomically mark descriptor(s) as
+                                  non-blocking.  */
+#define SOCK_NONBLOCK SOCK_NONBLOCK
+};
+
+/* Protocol families.  */
+#define        PF_UNSPEC       0       /* Unspecified.  */
+#define        PF_LOCAL        1       /* Local to host (pipes and file-domain).  */
+#define        PF_UNIX         PF_LOCAL /* POSIX name for PF_LOCAL.  */
+#define        PF_FILE         PF_LOCAL /* Another non-standard name for PF_LOCAL.  */
+#define        PF_INET         2       /* IP protocol family.  */
+#define        PF_AX25         3       /* Amateur Radio AX.25.  */
+#define        PF_IPX          4       /* Novell Internet Protocol.  */
+#define        PF_APPLETALK    5       /* Appletalk DDP.  */
+#define        PF_NETROM       6       /* Amateur radio NetROM.  */
+#define        PF_BRIDGE       7       /* Multiprotocol bridge.  */
+#define        PF_ATMPVC       8       /* ATM PVCs.  */
+#define        PF_X25          9       /* Reserved for X.25 project.  */
+#define        PF_INET6        10      /* IP version 6.  */
+#define        PF_ROSE         11      /* Amateur Radio X.25 PLP.  */
+#define        PF_DECnet       12      /* Reserved for DECnet project.  */
+#define        PF_NETBEUI      13      /* Reserved for 802.2LLC project.  */
+#define        PF_SECURITY     14      /* Security callback pseudo AF.  */
+#define        PF_KEY          15      /* PF_KEY key management API.  */
+#define        PF_NETLINK      16
+#define        PF_ROUTE        PF_NETLINK /* Alias to emulate 4.4BSD.  */
+#define        PF_PACKET       17      /* Packet family.  */
+#define        PF_ASH          18      /* Ash.  */
+#define        PF_ECONET       19      /* Acorn Econet.  */
+#define        PF_ATMSVC       20      /* ATM SVCs.  */
+#define        PF_SNA          22      /* Linux SNA Project */
+#define        PF_IRDA         23      /* IRDA sockets.  */
+#define        PF_PPPOX        24      /* PPPoX sockets.  */
+#define        PF_WANPIPE      25      /* Wanpipe API sockets.  */
+#define        PF_BLUETOOTH    31      /* Bluetooth sockets.  */
+#define        PF_IUCV         32      /* IUCV sockets.  */
+#define PF_RXRPC       33      /* RxRPC sockets.  */
+#define        PF_MAX          34      /* For now..  */
+
+/* Address families.  */
+#define        AF_UNSPEC       PF_UNSPEC
+#define        AF_LOCAL        PF_LOCAL
+#define        AF_UNIX         PF_UNIX
+#define        AF_FILE         PF_FILE
+#define        AF_INET         PF_INET
+#define        AF_AX25         PF_AX25
+#define        AF_IPX          PF_IPX
+#define        AF_APPLETALK    PF_APPLETALK
+#define        AF_NETROM       PF_NETROM
+#define        AF_BRIDGE       PF_BRIDGE
+#define        AF_ATMPVC       PF_ATMPVC
+#define        AF_X25          PF_X25
+#define        AF_INET6        PF_INET6
+#define        AF_ROSE         PF_ROSE
+#define        AF_DECnet       PF_DECnet
+#define        AF_NETBEUI      PF_NETBEUI
+#define        AF_SECURITY     PF_SECURITY
+#define        AF_KEY          PF_KEY
+#define        AF_NETLINK      PF_NETLINK
+#define        AF_ROUTE        PF_ROUTE
+#define        AF_PACKET       PF_PACKET
+#define        AF_ASH          PF_ASH
+#define        AF_ECONET       PF_ECONET
+#define        AF_ATMSVC       PF_ATMSVC
+#define        AF_SNA          PF_SNA
+#define        AF_IRDA         PF_IRDA
+#define        AF_PPPOX        PF_PPPOX
+#define        AF_WANPIPE      PF_WANPIPE
+#define        AF_BLUETOOTH    PF_BLUETOOTH
+#define        AF_IUCV         PF_IUCV
+#define AF_RXRPC       PF_RXRPC
+#define        AF_MAX          PF_MAX
+
+/* Socket level values.  Others are defined in the appropriate headers.
+
+   XXX These definitions also should go into the appropriate headers as
+   far as they are available.  */
+#define SOL_RAW                255
+#define SOL_DECNET      261
+#define SOL_X25         262
+#define SOL_PACKET     263
+#define SOL_ATM                264     /* ATM layer (cell level).  */
+#define SOL_AAL                265     /* ATM Adaption Layer (packet level).  */
+#define SOL_IRDA       266
+
+/* Maximum queue length specifiable by listen.  */
+#define SOMAXCONN      128
+
+/* Get the definition of the macro to define the common sockaddr members.  */
+#include <bits/sockaddr.h>
+
+/* Structure describing a generic socket address.  */
+struct sockaddr
+  {
+    __SOCKADDR_COMMON (sa_);   /* Common data: address family and length.  */
+    char sa_data[14];          /* Address data.  */
+  };
+
+
+/* Structure large enough to hold any socket address (with the historical
+   exception of AF_UNIX).  We reserve 128 bytes.  */
+#define __ss_aligntype unsigned long int
+#define _SS_SIZE       128
+#define _SS_PADSIZE    (_SS_SIZE - (2 * sizeof (__ss_aligntype)))
+
+struct sockaddr_storage
+  {
+    __SOCKADDR_COMMON (ss_);   /* Address family, etc.  */
+    __ss_aligntype __ss_align; /* Force desired alignment.  */
+    char __ss_padding[_SS_PADSIZE];
+  };
+
+
+/* Bits in the FLAGS argument to `send', `recv', et al.  */
+enum
+  {
+    MSG_OOB            = 0x01, /* Process out-of-band data.  */
+#define MSG_OOB                MSG_OOB
+    MSG_PEEK           = 0x02, /* Peek at incoming messages.  */
+#define MSG_PEEK       MSG_PEEK
+    MSG_DONTROUTE      = 0x04, /* Don't use local routing.  */
+#define MSG_DONTROUTE  MSG_DONTROUTE
+#ifdef __USE_GNU
+    /* DECnet uses a different name.  */
+    MSG_TRYHARD                = MSG_DONTROUTE,
+# define MSG_TRYHARD   MSG_DONTROUTE
+#endif
+    MSG_CTRUNC         = 0x08, /* Control data lost before delivery.  */
+#define MSG_CTRUNC     MSG_CTRUNC
+    MSG_PROXY          = 0x10, /* Supply or ask second address.  */
+#define MSG_PROXY      MSG_PROXY
+    MSG_TRUNC          = 0x20,
+#define        MSG_TRUNC       MSG_TRUNC
+    MSG_DONTWAIT       = 0x40, /* Nonblocking IO.  */
+#define        MSG_DONTWAIT    MSG_DONTWAIT
+    MSG_EOR            = 0x80, /* End of record.  */
+#define        MSG_EOR         MSG_EOR
+    MSG_WAITALL                = 0x100, /* Wait for a full request.  */
+#define        MSG_WAITALL     MSG_WAITALL
+    MSG_FIN            = 0x200,
+#define        MSG_FIN         MSG_FIN
+    MSG_SYN            = 0x400,
+#define        MSG_SYN         MSG_SYN
+    MSG_CONFIRM                = 0x800, /* Confirm path validity.  */
+#define        MSG_CONFIRM     MSG_CONFIRM
+    MSG_RST            = 0x1000,
+#define        MSG_RST         MSG_RST
+    MSG_ERRQUEUE       = 0x2000, /* Fetch message from error queue.  */
+#define        MSG_ERRQUEUE    MSG_ERRQUEUE
+    MSG_NOSIGNAL       = 0x4000, /* Do not generate SIGPIPE.  */
+#define        MSG_NOSIGNAL    MSG_NOSIGNAL
+    MSG_MORE           = 0x8000,  /* Sender will send more.  */
+#define        MSG_MORE        MSG_MORE
+
+    MSG_CMSG_CLOEXEC   = 0x40000000    /* Set close_on_exit for file
+                                           descriptor received through
+                                           SCM_RIGHTS.  */
+#define MSG_CMSG_CLOEXEC MSG_CMSG_CLOEXEC
+  };
+
+
+/* Structure describing messages sent by
+   `sendmsg' and received by `recvmsg'.  */
+struct msghdr
+  {
+    void *msg_name;            /* Address to send to/receive from.  */
+    socklen_t msg_namelen;     /* Length of address data.  */
+
+    struct iovec *msg_iov;     /* Vector of data to send/receive into.  */
+    size_t msg_iovlen;         /* Number of elements in the vector.  */
+
+    void *msg_control;         /* Ancillary data (eg BSD filedesc passing). */
+    size_t msg_controllen;     /* Ancillary data buffer length.
+                                  !! The type should be socklen_t but the
+                                  definition of the kernel is incompatible
+                                  with this.  */
+
+    int msg_flags;             /* Flags on received message.  */
+  };
+
+/* Structure used for storage of ancillary data object information.  */
+struct cmsghdr
+  {
+    size_t cmsg_len;           /* Length of data in cmsg_data plus length
+                                  of cmsghdr structure.
+                                  !! The type should be socklen_t but the
+                                  definition of the kernel is incompatible
+                                  with this.  */
+    int cmsg_level;            /* Originating protocol.  */
+    int cmsg_type;             /* Protocol specific type.  */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+    __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data.  */
+#endif
+  };
+
+/* Ancillary data object manipulation macros.  */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
+#else
+# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
+#endif
+#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
+#define CMSG_FIRSTHDR(mhdr) \
+  ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr)                \
+   ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0)
+#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \
+                        & (size_t) ~(sizeof (size_t) - 1))
+#define CMSG_SPACE(len) (CMSG_ALIGN (len) \
+                        + CMSG_ALIGN (sizeof (struct cmsghdr)))
+#define CMSG_LEN(len)   (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
+
+extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
+                                     struct cmsghdr *__cmsg) __THROW;
+#ifdef __USE_EXTERN_INLINES
+# ifndef _EXTERN_INLINE
+#  define _EXTERN_INLINE __extern_inline
+# endif
+_EXTERN_INLINE struct cmsghdr *
+__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
+{
+  if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
+    /* The kernel header does this so there may be a reason.  */
+    return 0;
+
+  __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
+                              + CMSG_ALIGN (__cmsg->cmsg_len));
+  if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
+                                       + __mhdr->msg_controllen)
+      || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
+         > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
+    /* No more entries.  */
+    return 0;
+  return __cmsg;
+}
+#endif /* Use `extern inline'.  */
+
+/* Socket level message types.  This must match the definitions in
+   <linux/socket.h>.  */
+enum
+  {
+    SCM_RIGHTS = 0x01          /* Transfer file descriptors.  */
+#define SCM_RIGHTS SCM_RIGHTS
+#ifdef __USE_BSD
+    , SCM_CREDENTIALS = 0x02   /* Credentials passing.  */
+# define SCM_CREDENTIALS SCM_CREDENTIALS
+#endif
+  };
+
+#ifdef __USE_GNU
+/* User visible structure for SCM_CREDENTIALS message */
+struct ucred
+{
+  pid_t pid;                   /* PID of sending process.  */
+  uid_t uid;                   /* UID of sending process.  */
+  gid_t gid;                   /* GID of sending process.  */
+};
+#endif
+
+/* Ugly workaround for unclean kernel headers.  */
+#if !defined __USE_MISC && !defined __USE_GNU
+# ifndef FIOGETOWN
+#  define __SYS_SOCKET_H_undef_FIOGETOWN
+# endif
+# ifndef FIOSETOWN
+#  define __SYS_SOCKET_H_undef_FIOSETOWN
+# endif
+# ifndef SIOCATMARK
+#  define __SYS_SOCKET_H_undef_SIOCATMARK
+# endif
+# ifndef SIOCGPGRP
+#  define __SYS_SOCKET_H_undef_SIOCGPGRP
+# endif
+# ifndef SIOCGSTAMP
+#  define __SYS_SOCKET_H_undef_SIOCGSTAMP
+# endif
+# ifndef SIOCGSTAMPNS
+#  define __SYS_SOCKET_H_undef_SIOCGSTAMPNS
+# endif
+# ifndef SIOCSPGRP
+#  define __SYS_SOCKET_H_undef_SIOCSPGRP
+# endif
+#endif
+
+/* Get socket manipulation related informations from kernel headers.  */
+#include <asm/socket.h>
+
+#if !defined __USE_MISC && !defined __USE_GNU
+# ifdef __SYS_SOCKET_H_undef_FIOGETOWN
+#  undef __SYS_SOCKET_H_undef_FIOGETOWN
+#  undef FIOGETOWN
+# endif
+# ifdef __SYS_SOCKET_H_undef_FIOSETOWN
+#  undef __SYS_SOCKET_H_undef_FIOSETOWN
+#  undef FIOSETOWN
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCATMARK
+#  undef __SYS_SOCKET_H_undef_SIOCATMARK
+#  undef SIOCATMARK
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCGPGRP
+#  undef __SYS_SOCKET_H_undef_SIOCGPGRP
+#  undef SIOCGPGRP
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMP
+#  undef __SYS_SOCKET_H_undef_SIOCGSTAMP
+#  undef SIOCGSTAMP
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMPNS
+#  undef __SYS_SOCKET_H_undef_SIOCGSTAMPNS
+#  undef SIOCGSTAMPNS
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCSPGRP
+#  undef __SYS_SOCKET_H_undef_SIOCSPGRP
+#  undef SIOCSPGRP
+# endif
+#endif
+
+/* Structure used to manipulate the SO_LINGER option.  */
+struct linger
+  {
+    int l_onoff;               /* Nonzero to linger on close.  */
+    int l_linger;              /* Time to linger.  */
+  };
+
+#endif /* bits/socket.h */
diff --git a/sysdeps/unix/sysv/linux/sparc/sys/epoll.h b/sysdeps/unix/sysv/linux/sparc/sys/epoll.h
new file mode 100644 (file)
index 0000000..cc0ddef
--- /dev/null
@@ -0,0 +1,143 @@
+/* Copyright (C) 2002-2006, 2007, 2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef        _SYS_EPOLL_H
+#define        _SYS_EPOLL_H    1
+
+#include <stdint.h>
+#include <sys/types.h>
+
+/* Get __sigset_t.  */
+#include <bits/sigset.h>
+
+#ifndef __sigset_t_defined
+# define __sigset_t_defined
+typedef __sigset_t sigset_t;
+#endif
+
+
+/* Flags to be passed to epoll_create2.  */
+enum
+  {
+    EPOLL_CLOEXEC = 0x400000,
+#define EPOLL_CLOEXEC EPOLL_CLOEXEC
+    EPOLL_NONBLOCK = 0x4000
+#define EPOLL_NONBLOCK EPOLL_NONBLOCK
+  };
+
+
+enum EPOLL_EVENTS
+  {
+    EPOLLIN = 0x001,
+#define EPOLLIN EPOLLIN
+    EPOLLPRI = 0x002,
+#define EPOLLPRI EPOLLPRI
+    EPOLLOUT = 0x004,
+#define EPOLLOUT EPOLLOUT
+    EPOLLRDNORM = 0x040,
+#define EPOLLRDNORM EPOLLRDNORM
+    EPOLLRDBAND = 0x080,
+#define EPOLLRDBAND EPOLLRDBAND
+    EPOLLWRNORM = 0x100,
+#define EPOLLWRNORM EPOLLWRNORM
+    EPOLLWRBAND = 0x200,
+#define EPOLLWRBAND EPOLLWRBAND
+    EPOLLMSG = 0x400,
+#define EPOLLMSG EPOLLMSG
+    EPOLLERR = 0x008,
+#define EPOLLERR EPOLLERR
+    EPOLLHUP = 0x010,
+#define EPOLLHUP EPOLLHUP
+    EPOLLRDHUP = 0x2000,
+#define EPOLLRDHUP EPOLLRDHUP
+    EPOLLONESHOT = (1 << 30),
+#define EPOLLONESHOT EPOLLONESHOT
+    EPOLLET = (1 << 31)
+#define EPOLLET EPOLLET
+  };
+
+
+/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl().  */
+#define EPOLL_CTL_ADD 1        /* Add a file descriptor to the interface.  */
+#define EPOLL_CTL_DEL 2        /* Remove a file descriptor from the interface.  */
+#define EPOLL_CTL_MOD 3        /* Change file descriptor epoll_event structure.  */
+
+
+typedef union epoll_data
+{
+  void *ptr;
+  int fd;
+  uint32_t u32;
+  uint64_t u64;
+} epoll_data_t;
+
+struct epoll_event
+{
+  uint32_t events;     /* Epoll events */
+  epoll_data_t data;   /* User data variable */
+};
+
+
+__BEGIN_DECLS
+
+/* Creates an epoll instance.  Returns an fd for the new instance.
+   The "size" parameter is a hint specifying the number of file
+   descriptors to be associated with the new instance.  The fd
+   returned by epoll_create() should be closed with close().  */
+extern int epoll_create (int __size) __THROW;
+
+/* Same as epoll_create but with an additional FLAGS parameter.  */
+extern int epoll_create2 (int __size, int __flags) __THROW;
+
+
+/* Manipulate an epoll instance "epfd". Returns 0 in case of success,
+   -1 in case of error ( the "errno" variable will contain the
+   specific error code ) The "op" parameter is one of the EPOLL_CTL_*
+   constants defined above. The "fd" parameter is the target of the
+   operation. The "event" parameter describes which events the caller
+   is interested in and any associated user data.  */
+extern int epoll_ctl (int __epfd, int __op, int __fd,
+                     struct epoll_event *__event) __THROW;
+
+
+/* Wait for events on an epoll instance "epfd". Returns the number of
+   triggered events returned in "events" buffer. Or -1 in case of
+   error with the "errno" variable set to the specific error code. The
+   "events" parameter is a buffer that will contain triggered
+   events. The "maxevents" is the maximum number of events to be
+   returned ( usually size of "events" ). The "timeout" parameter
+   specifies the maximum wait time in milliseconds (-1 == infinite).
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int epoll_wait (int __epfd, struct epoll_event *__events,
+                      int __maxevents, int __timeout);
+
+
+/* Same as epoll_wait, but the thread's signal mask is temporarily
+   and atomically replaced with the one provided as parameter.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int epoll_pwait (int __epfd, struct epoll_event *__events,
+                       int __maxevents, int __timeout,
+                       __const __sigset_t *__ss);
+
+__END_DECLS
+
+#endif /* sys/epoll.h */
diff --git a/sysdeps/unix/sysv/linux/sparc/sys/eventfd.h b/sysdeps/unix/sysv/linux/sparc/sys/eventfd.h
new file mode 100644 (file)
index 0000000..aff4f35
--- /dev/null
@@ -0,0 +1,52 @@
+/* Copyright (C) 2007, 2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef        _SYS_EVENTFD_H
+#define        _SYS_EVENTFD_H  1
+
+#include <stdint.h>
+
+
+/* Type for event counter.  */
+typedef uint64_t eventfd_t;
+
+/* Flags for signalfd.  */
+enum
+  {
+    EFD_CLOEXEC = 0x400000,
+#define EFD_CLOEXEC EFD_CLOEXEC
+    EFD_NONBLOCK = 0x4000
+#define EFD_NONBLOCK EFD_NONBLOCK
+  };
+
+
+__BEGIN_DECLS
+
+/* Return file descriptor for generic event channel.  Set initial
+   value to COUNT.  */
+extern int eventfd (int __count, int __flags) __THROW;
+
+/* Read event counter and possibly wait for events.  */
+extern int eventfd_read (int __fd, eventfd_t *__value);
+
+/* Increment event counter.  */
+extern int eventfd_write (int __fd, eventfd_t value);
+
+__END_DECLS
+
+#endif /* sys/eventfd.h */
diff --git a/sysdeps/unix/sysv/linux/sparc/sys/inotify.h b/sysdeps/unix/sysv/linux/sparc/sys/inotify.h
new file mode 100644 (file)
index 0000000..b1fccc4
--- /dev/null
@@ -0,0 +1,105 @@
+/* Copyright (C) 2005, 2006, 2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef        _SYS_INOTIFY_H
+#define        _SYS_INOTIFY_H  1
+
+#include <stdint.h>
+
+
+/* Flags for the parameter of inotify_init1.  */
+enum
+  {
+    IN_CLOEXEC = 0x400000,
+#define IN_CLOEXEC IN_CLOEXEC
+    IN_NONBLOCK = 0x4000
+#define IN_NONBLOCK IN_NONBLOCK
+  };
+
+
+/* Structure describing an inotify event.  */
+struct inotify_event
+{
+  int wd;              /* Watch descriptor.  */
+  uint32_t mask;       /* Watch mask.  */
+  uint32_t cookie;     /* Cookie to synchronize two events.  */
+  uint32_t len;                /* Length (including NULs) of name.  */
+  char name __flexarr; /* Name.  */
+};
+
+
+/* Supported events suitable for MASK parameter of INOTIFY_ADD_WATCH.  */
+#define IN_ACCESS       0x00000001     /* File was accessed.  */
+#define IN_MODIFY       0x00000002     /* File was modified.  */
+#define IN_ATTRIB       0x00000004     /* Metadata changed.  */
+#define IN_CLOSE_WRITE  0x00000008     /* Writtable file was closed.  */
+#define IN_CLOSE_NOWRITE 0x00000010    /* Unwrittable file closed.  */
+#define IN_CLOSE        (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close.  */
+#define IN_OPEN                 0x00000020     /* File was opened.  */
+#define IN_MOVED_FROM   0x00000040     /* File was moved from X.  */
+#define IN_MOVED_TO      0x00000080    /* File was moved to Y.  */
+#define IN_MOVE                 (IN_MOVED_FROM | IN_MOVED_TO) /* Moves.  */
+#define IN_CREATE       0x00000100     /* Subfile was created.  */
+#define IN_DELETE       0x00000200     /* Subfile was deleted.  */
+#define IN_DELETE_SELF  0x00000400     /* Self was deleted.  */
+#define IN_MOVE_SELF    0x00000800     /* Self was moved.  */
+
+/* Events sent by the kernel.  */
+#define IN_UNMOUNT      0x00002000     /* Backing fs was unmounted.  */
+#define IN_Q_OVERFLOW   0x00004000     /* Event queued overflowed.  */
+#define IN_IGNORED      0x00008000     /* File was ignored.  */
+
+/* Helper events.  */
+#define IN_CLOSE        (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)    /* Close.  */
+#define IN_MOVE                 (IN_MOVED_FROM | IN_MOVED_TO)          /* Moves.  */
+
+/* Special flags.  */
+#define IN_ONLYDIR      0x01000000     /* Only watch the path if it is a
+                                          directory.  */
+#define IN_DONT_FOLLOW  0x02000000     /* Do not follow a sym link.  */
+#define IN_MASK_ADD     0x20000000     /* Add to the mask of an already
+                                          existing watch.  */
+#define IN_ISDIR        0x40000000     /* Event occurred against dir.  */
+#define IN_ONESHOT      0x80000000     /* Only send event once.  */
+
+/* All events which a program can wait on.  */
+#define IN_ALL_EVENTS   (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE  \
+                         | IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM        \
+                         | IN_MOVED_TO | IN_CREATE | IN_DELETE               \
+                         | IN_DELETE_SELF | IN_MOVE_SELF)
+
+
+__BEGIN_DECLS
+
+/* Create and initialize inotify instance.  */
+extern int inotify_init (void) __THROW;
+
+/* Create and initialize inotify instance.  */
+extern int inotify_init1 (int __flags) __THROW;
+
+/* Add watch of object NAME to inotify instance FD.  Notify about
+   events specified by MASK.  */
+extern int inotify_add_watch (int __fd, const char *__name, uint32_t __mask)
+  __THROW;
+
+/* Remove the watch specified by WD from the inotify instance FD.  */
+extern int inotify_rm_watch (int __fd, uint32_t __wd) __THROW;
+
+__END_DECLS
+
+#endif /* sys/inotify.h */
diff --git a/sysdeps/unix/sysv/linux/sparc/sys/signalfd.h b/sysdeps/unix/sysv/linux/sparc/sys/signalfd.h
new file mode 100644 (file)
index 0000000..a134cc7
--- /dev/null
@@ -0,0 +1,66 @@
+/* Copyright (C) 2007, 2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef        _SYS_SIGNALFD_H
+#define        _SYS_SIGNALFD_H 1
+
+#define __need_sigset_t
+#include <signal.h>
+#include <stdint.h>
+
+
+struct signalfd_siginfo
+{
+  uint32_t ssi_signo;
+  int32_t ssi_errno;
+  int32_t ssi_code;
+  uint32_t ssi_pid;
+  uint32_t ssi_uid;
+  int32_t ssi_fd;
+  uint32_t ssi_tid;
+  uint32_t ssi_band;
+  uint32_t ssi_overrun;
+  uint32_t ssi_trapno;
+  int32_t ssi_status;
+  int32_t ssi_int;
+  uint64_t ssi_ptr;
+  uint64_t ssi_utime;
+  uint64_t ssi_stime;
+  uint64_t ssi_addr;
+  uint8_t __pad[48];
+};
+
+/* Flags for signalfd.  */
+enum
+  {
+    SFD_CLOEXEC = 0x400000,
+#define SFD_CLOEXEC SFD_CLOEXEC
+    SFD_NONBLOCK = 0x4000
+#define SFD_NONBLOCK SFD_NONBLOCK
+  };
+
+__BEGIN_DECLS
+
+/* Request notification for delivery of signals in MASK to be
+   performed using descriptor FD.*/
+extern int signalfd (int __fd, const sigset_t *__mask, int __flags)
+  __nonnull ((2)) __THROW;
+
+__END_DECLS
+
+#endif /* sys/signalfd.h */
diff --git a/sysdeps/unix/sysv/linux/sparc/sys/timerfd.h b/sysdeps/unix/sysv/linux/sparc/sys/timerfd.h
new file mode 100644 (file)
index 0000000..833d050
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright (C) 2008 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef        _SYS_TIMERFD_H
+#define        _SYS_TIMERFD_H  1
+
+#include <time.h>
+
+
+/* Bits to be set in the FLAGS parameter of `timerfd_create'.  */
+enum
+  {
+    TFD_CLOEXEC = 0x400000,
+#define TFD_CLOEXEC TFD_CLOEXEC
+    TFD_NONBLOCK = 0x4000
+#define TFD_NONBLOCK TFD_NONBLOCK
+  };
+
+
+/* Bits to be set in the FLAGS parameter of `timerfd_settime'.  */
+enum
+  {
+    TFD_TIMER_ABSTIME = 1 << 0
+#define TFD_TIMER_ABSTIME TFD_TIMER_ABSTIME
+  };
+
+
+__BEGIN_DECLS
+
+/* Return file descriptor for new interval timer source.  */
+extern int timerfd_create (clockid_t __clock_id, int __flags) __THROW;
+
+/* Set next expiration time of interval timer source UFD to UTMR.  If
+   FLAGS has the TFD_TIMER_ABSTIME flag set the timeout value is
+   absolute.  Optionally return the old expiration time in OTMR.  */
+extern int timerfd_settime (int __ufd, int __flags,
+                           __const struct itimerspec *__utmr,
+                           struct itimerspec *__otmr) __THROW;
+
+/* Return the next expiration time of UFD.  */
+extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW;
+
+__END_DECLS
+
+#endif /* sys/timerfd.h */
index f4e8bda99a96cbfb060af67237632d03e7c34ede..aa8784b1ee07574d0d9a14a10b1fa6cfa99f8644 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2006, 2007, 2008 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
@@ -31,6 +31,16 @@ typedef __sigset_t sigset_t;
 #endif
 
 
+/* Flags to be passed to epoll_create2.  */
+enum
+  {
+    EPOLL_CLOEXEC = 02000000,
+#define EPOLL_CLOEXEC EPOLL_CLOEXEC
+    EPOLL_NONBLOCK = 04000
+#define EPOLL_NONBLOCK EPOLL_NONBLOCK
+  };
+
+
 enum EPOLL_EVENTS
   {
     EPOLLIN = 0x001,
@@ -63,9 +73,9 @@ enum EPOLL_EVENTS
 
 
 /* Valid opcodes ( "op" parameter ) to issue to epoll_ctl().  */
-#define EPOLL_CTL_ADD 1        /* Add a file decriptor to the interface.  */
-#define EPOLL_CTL_DEL 2        /* Remove a file decriptor from the interface.  */
-#define EPOLL_CTL_MOD 3        /* Change file decriptor epoll_event structure.  */
+#define EPOLL_CTL_ADD 1        /* Add a file descriptor to the interface.  */
+#define EPOLL_CTL_DEL 2        /* Remove a file descriptor from the interface.  */
+#define EPOLL_CTL_MOD 3        /* Change file descriptor epoll_event structure.  */
 
 
 typedef union epoll_data
@@ -91,6 +101,9 @@ __BEGIN_DECLS
    returned by epoll_create() should be closed with close().  */
 extern int epoll_create (int __size) __THROW;
 
+/* Same as epoll_create but with an additional FLAGS parameter.  */
+extern int epoll_create2 (int __size, int __flags) __THROW;
+
 
 /* Manipulate an epoll instance "epfd". Returns 0 in case of success,
    -1 in case of error ( the "errno" variable will contain the
index 1ebaea7b30883af99d0bd6856f783b06e7c23250..205824b6691d6f664141dd1b0ab1dd6d5481fa24 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2007, 2008 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
 /* Type for event counter.  */
 typedef uint64_t eventfd_t;
 
+/* Flags for signalfd.  */
+enum
+  {
+    EFD_CLOEXEC = 02000000,
+#define EFD_CLOEXEC EFD_CLOEXEC
+    EFD_NONBLOCK = 04000
+#define EFD_NONBLOCK EFD_NONBLOCK
+  };
+
 
 __BEGIN_DECLS
 
index 0131db9d3ed41a87abf9b7a8e4382b1bf5a1aecc..81e31fb6465be3de470fcfd43855c58d3002ef32 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2005, 2006, 2008 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
 #include <stdint.h>
 
 
+/* Flags for the parameter of inotify_init1.  */
+enum
+  {
+    IN_CLOEXEC = 02000000,
+#define IN_CLOEXEC IN_CLOEXEC
+    IN_NONBLOCK = 04000
+#define IN_NONBLOCK IN_NONBLOCK
+  };
+
+
 /* Structure describing an inotify event.  */
 struct inotify_event
 {
@@ -79,6 +89,9 @@ __BEGIN_DECLS
 /* Create and initialize inotify instance.  */
 extern int inotify_init (void) __THROW;
 
+/* Create and initialize inotify instance.  */
+extern int inotify_init1 (int __flags) __THROW;
+
 /* Add watch of object NAME to inotify instance FD.  Notify about
    events specified by MASK.  */
 extern int inotify_add_watch (int __fd, const char *__name, uint32_t __mask)
index 7a7f53ba323b7908918ab4ac40dd7e673e6c0162..dae71a400e68f1a6ca250665fba5070a63c5f3d4 100644 (file)
@@ -45,6 +45,14 @@ struct signalfd_siginfo
   uint8_t __pad[48];
 };
 
+/* Flags for signalfd.  */
+enum
+  {
+    SFD_CLOEXEC = 02000000,
+#define SFD_CLOEXEC SFD_CLOEXEC
+    SFD_NONBLOCK = 04000
+#define SFD_NONBLOCK SFD_NONBLOCK
+  };
 
 __BEGIN_DECLS
 
index 0a4b81c9b7e804ecf75fe12189f2c488dc859b83..c1bb06f5ff15d2fe1e7a17231f0c2e1a90bc9efe 100644 (file)
 #include <time.h>
 
 
+/* Bits to be set in the FLAGS parameter of `timerfd_create'.  */
+enum
+  {
+    TFD_CLOEXEC = 02000000,
+#define TFD_CLOEXEC TFD_CLOEXEC
+    TFD_NONBLOCK = 04000
+#define TFD_NONBLOCK TFD_NONBLOCK
+  };
+
+
 /* Bits to be set in the FLAGS parameter of `timerfd_settime'.  */
 enum
   {
index b3ecf9f478e11c5101ca9ecc444ca41e06ed83af..b0fe6707f1538149a062d5a7e1ce262d83df13d2 100644 (file)
@@ -8,6 +8,7 @@ creat           -       creat           Ci:si   __libc_creat creat
 create_module  EXTRA   create_module   3       create_module
 delete_module  EXTRA   delete_module   3       delete_module
 epoll_create   EXTRA   epoll_create    i:i     epoll_create
+epoll_create2  EXTRA   epoll_create2   i:ii    epoll_create2
 epoll_ctl      EXTRA   epoll_ctl       i:iiip  epoll_ctl
 epoll_wait     EXTRA   epoll_wait      Ci:ipii epoll_wait
 fdatasync      -       fdatasync       Ci:i    fdatasync
@@ -26,6 +27,7 @@ getsid                -       getsid          i:i     getsid
 init_module    EXTRA   init_module     5       init_module
 inotify_add_watch      EXTRA   inotify_add_watch       i:isi   inotify_add_watch
 inotify_init   EXTRA   inotify_init    i:      inotify_init
+inotify_init1  EXTRA   inotify_init1   i:I     inotify_init1
 inotify_rm_watch       EXTRA   inotify_rm_watch        i:ii    inotify_rm_watch
 ioperm         -       ioperm          i:iii   ioperm
 iopl           -       iopl            i:i     iopl
@@ -45,6 +47,7 @@ nfsservctl    EXTRA   nfsservctl      i:ipp   nfsservctl
 pause          -       pause           Ci:     __libc_pause    pause
 personality    EXTRA   personality     i:i     __personality   personality
 pipe           -       pipe            i:f     __pipe          pipe
+pipe2          -       pipe2           i:fi    pipe2
 pivot_root     EXTRA   pivot_root      i:ss    pivot_root
 prctl          EXTRA   prctl           i:iiiii __prctl         prctl
 putpmsg                -       putpmsg         i:ippii putpmsg