From 46c38bd7dc34e104870982c64dae364b1a28b549 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 11 Oct 2006 20:34:59 +0000 Subject: [PATCH] * sysdeps/unix/sysv/linux/syscalls.list: Add epoll_pwait. * sysdeps/unix/sysv/linux/sys/epoll.h: Declare epoll_pwait. * sysdeps/unix/sysv/linux/Versions (libc): Add epoll_pwait for version GLIBC_2.6. * Versions.def: Add GLIBC_2.6 for libc. * sysdeps/unix/sysv/linux/i386/sysdep.h (DOARGS_6): Fix offset. --- ChangeLog | 8 ++++++++ NEWS | 7 ++++++- Versions.def | 1 + nptl/ChangeLog | 3 +++ nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h | 12 +++++++++++- sysdeps/unix/sysv/linux/Versions | 3 +++ sysdeps/unix/sysv/linux/i386/sysdep.h | 2 +- sysdeps/unix/sysv/linux/sys/epoll.h | 20 +++++++++++++++++++- sysdeps/unix/sysv/linux/syscalls.list | 1 + 9 files changed, 53 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 44ab28c669..2d9919de38 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2006-10-11 Ulrich Drepper + * sysdeps/unix/sysv/linux/syscalls.list: Add epoll_pwait. + * sysdeps/unix/sysv/linux/sys/epoll.h: Declare epoll_pwait. + * sysdeps/unix/sysv/linux/Versions (libc): Add epoll_pwait for + version GLIBC_2.6. + * Versions.def: Add GLIBC_2.6 for libc. + + * sysdeps/unix/sysv/linux/i386/sysdep.h (DOARGS_6): Fix offset. + * sysdeps/i386/i486/bits/atomic.h: Add catomic_* support. 2006-10-11 Jakub Jelinek diff --git a/NEWS b/NEWS index 83b6a5e291..f078f3cc63 100644 --- a/NEWS +++ b/NEWS @@ -1,10 +1,15 @@ -GNU C Library NEWS -- history of user-visible changes. 2006-09-29 +GNU C Library NEWS -- history of user-visible changes. 2006-10-11 Copyright (C) 1992-2002,2003,2004,2005,2006 Free Software Foundation, Inc. See the end for copying conditions. Please send GNU C library bug reports via using `glibc' in the "product" field. +Version 2.6 + +* New Linux interfaces: epoll_pwait. + + Version 2.5 * For Linux, the sorting of addresses returned by getaddrinfo now also diff --git a/Versions.def b/Versions.def index f40f351801..254208469f 100644 --- a/Versions.def +++ b/Versions.def @@ -22,6 +22,7 @@ libc { GLIBC_2.3.4 GLIBC_2.4 GLIBC_2.5 + GLIBC_2.6 %ifdef USE_IN_LIBIO HURD_CTHREADS_0.3 %endif diff --git a/nptl/ChangeLog b/nptl/ChangeLog index a8bd0fd45a..f00f066479 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,5 +1,8 @@ 2006-10-11 Ulrich Drepper + * sysdeps/unix/sysv/linux/i386/sysdep-cancel.h: Add support for + cancelable syscalls with six parameters. + * sysdeps/unix/sysv/linux/rtld-lowlevel.h: Use catomic_* operations instead of atomic_*. diff --git a/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h index 147f5c8470..2d1ad3d7cc 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h +++ b/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 2002. @@ -58,6 +58,7 @@ # define SAVE_OLDTYPE_3 SAVE_OLDTYPE_2 # define SAVE_OLDTYPE_4 SAVE_OLDTYPE_2 # define SAVE_OLDTYPE_5 SAVE_OLDTYPE_2 +# define SAVE_OLDTYPE_6 SAVE_OLDTYPE_2 # define PUSHCARGS_0 /* No arguments to push. */ # define DOCARGS_0 /* No arguments to frob. */ @@ -101,6 +102,14 @@ # define _POPCARGS_5 _POPCARGS_4; popl %edi; \ cfi_adjust_cfa_offset (-4); cfi_restore (edi); +# define PUSHCARGS_6 _PUSHCARGS_6 +# define DOCARGS_6 _DOARGS_6 (44) +# define POPCARGS_6 _POPCARGS_6 +# define _PUSHCARGS_6 pushl %ebp; cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (ebp, 0); _PUSHCARGS_5 +# define _POPCARGS_6 _POPCARGS_5; popl %ebp; \ + cfi_adjust_cfa_offset (-4); cfi_restore (ebp); + # ifdef IS_IN_libpthread # define CENABLE call __pthread_enable_asynccancel; # define CDISABLE call __pthread_disable_asynccancel @@ -122,6 +131,7 @@ # define POPSTATE_3 POPSTATE_2 # define POPSTATE_4 POPSTATE_3 # define POPSTATE_5 POPSTATE_4 +# define POPSTATE_6 POPSTATE_5 # ifndef __ASSEMBLER__ # define SINGLE_THREAD_P \ diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions index 7c015b1d62..137b44c2b8 100644 --- a/sysdeps/unix/sysv/linux/Versions +++ b/sysdeps/unix/sysv/linux/Versions @@ -126,6 +126,9 @@ libc { GLIBC_2.5 { splice; sync_file_range; tee; vmsplice; } + GLIBC_2.6 { + epoll_pwait; + } GLIBC_PRIVATE { # functions used in other libraries __syscall_rt_sigqueueinfo; diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h index 90423d8434..5286676fc1 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep.h +++ b/sysdeps/unix/sysv/linux/i386/sysdep.h @@ -297,7 +297,7 @@ cfi_restore (edi); L(POPDI1): #define PUSHARGS_6 _PUSHARGS_6 -#define DOARGS_6 _DOARGS_6 (36) +#define DOARGS_6 _DOARGS_6 (40) #define POPARGS_6 _POPARGS_6 #define _PUSHARGS_6 pushl %ebp; cfi_adjust_cfa_offset (4); \ cfi_rel_offset (ebp, 0); L(PUSHBP1): _PUSHARGS_5 diff --git a/sysdeps/unix/sysv/linux/sys/epoll.h b/sysdeps/unix/sysv/linux/sys/epoll.h index 68f173a04d..d8901f7d53 100644 --- a/sysdeps/unix/sysv/linux/sys/epoll.h +++ b/sysdeps/unix/sysv/linux/sys/epoll.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005, 2006 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 @@ -22,6 +22,14 @@ #include #include +/* Get __sigset_t. */ +#include + +#ifndef __sigset_t_defined +# define __sigset_t_defined +typedef __sigset_t sigset_t; +#endif + enum EPOLL_EVENTS { @@ -105,6 +113,16 @@ extern int epoll_ctl (int __epfd, int __op, int __fd, 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/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list index fca29b26ff..5776673733 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list +++ b/sysdeps/unix/sysv/linux/syscalls.list @@ -10,6 +10,7 @@ delete_module EXTRA delete_module 3 delete_module epoll_create EXTRA epoll_create i:i epoll_create epoll_ctl EXTRA epoll_ctl i:iiip epoll_ctl epoll_wait EXTRA epoll_wait Ci:ipii epoll_wait +epoll_pwait EXTRA epoll_pwait Ci:ipiipi epoll_pwait fdatasync - fdatasync i:i fdatasync flock - flock i:ii __flock flock fork - fork i: __libc_fork __fork fork -- 2.11.4.GIT