1999-02-19 03:21:36 +03:00
/*
* Copyright ( c ) 1991 , 1992 Paul Kranenburg < pk @ cs . few . eur . nl >
* Copyright ( c ) 1993 Branko Lankester < branko @ hacktic . nl >
* Copyright ( c ) 1993 , 1994 , 1995 , 1996 Rick Sladkey < jrs @ world . std . com >
1999-12-23 17:20:14 +03:00
* Copyright ( c ) 1996 - 1999 Wichert Akkerman < wichert @ cistron . nl >
1999-02-19 03:21:36 +03:00
* All rights reserved .
*
* Redistribution and use in source and binary forms , with or without
* modification , are permitted provided that the following conditions
* are met :
* 1. Redistributions of source code must retain the above copyright
* notice , this list of conditions and the following disclaimer .
* 2. Redistributions in binary form must reproduce the above copyright
* notice , this list of conditions and the following disclaimer in the
* documentation and / or other materials provided with the distribution .
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission .
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ` ` AS IS ' ' AND ANY EXPRESS OR
* IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED .
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT , INDIRECT ,
* INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT
* NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE ,
* DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*
* $ Id $
*/
# include "defs.h"
# include <fcntl.h>
# include <sys/file.h>
2004-10-07 02:23:31 +04:00
# include <inttypes.h>
2004-10-20 06:17:41 +04:00
# ifdef HAVE_SYS_EPOLL_H
2004-10-07 02:23:31 +04:00
# include <sys/epoll.h>
# endif
2005-05-09 12:02:00 +04:00
# ifdef HAVE_LIBAIO_H
# include <libaio.h>
# endif
1999-02-19 03:21:36 +03:00
2001-03-08 16:59:00 +03:00
# if HAVE_LONG_LONG_OFF_T
/*
* Hacks for systems that have a long long off_t
*/
2001-03-07 19:53:07 +03:00
# define flock64 flock /* Horrid hack */
# define printflock printflock64 /* Horrider hack */
# endif
2004-09-04 07:39:20 +04:00
static const struct xlat fcntlcmds [ ] = {
1999-02-19 03:21:36 +03:00
{ F_DUPFD , " F_DUPFD " } ,
{ F_GETFD , " F_GETFD " } ,
{ F_SETFD , " F_SETFD " } ,
{ F_GETFL , " F_GETFL " } ,
{ F_SETFL , " F_SETFL " } ,
{ F_GETLK , " F_GETLK " } ,
{ F_SETLK , " F_SETLK " } ,
{ F_SETLKW , " F_SETLKW " } ,
{ F_GETOWN , " F_GETOWN " } ,
{ F_SETOWN , " F_SETOWN " } ,
# ifdef F_RSETLK
{ F_RSETLK , " F_RSETLK " } ,
# endif
# ifdef F_RSETLKW
{ F_RSETLKW , " F_RSETLKW " } ,
# endif
# ifdef F_RGETLK
{ F_RGETLK , " F_RGETLK " } ,
# endif
# ifdef F_CNVT
{ F_CNVT , " F_CNVT " } ,
2000-05-01 05:53:59 +04:00
# endif
# ifdef F_SETSIG
{ F_SETSIG , " F_SETSIG " } ,
# endif
# ifdef F_GETSIG
{ F_GETSIG , " F_GETSIG " } ,
2001-03-06 18:08:09 +03:00
# endif
# ifdef F_CHKFL
{ F_CHKFL , " F_CHKFL " } ,
# endif
# ifdef F_DUP2FD
{ F_DUP2FD , " F_DUP2FD " } ,
# endif
# ifdef F_ALLOCSP
{ F_ALLOCSP , " F_ALLOCSP " } ,
# endif
# ifdef F_ISSTREAM
{ F_ISSTREAM , " F_ISSTREAM " } ,
# endif
# ifdef F_PRIV
{ F_PRIV , " F_PRIV " } ,
# endif
# ifdef F_NPRIV
{ F_NPRIV , " F_NPRIV " } ,
# endif
# ifdef F_QUOTACL
{ F_QUOTACL , " F_QUOTACL " } ,
# endif
# ifdef F_BLOCKS
{ F_BLOCKS , " F_BLOCKS " } ,
# endif
# ifdef F_BLKSIZE
{ F_BLKSIZE , " F_BLKSIZE " } ,
# endif
# ifdef F_GETOWN
{ F_GETOWN , " F_GETOWN " } ,
# endif
# ifdef F_SETOWN
{ F_SETOWN , " F_SETOWN " } ,
# endif
# ifdef F_REVOKE
{ F_REVOKE , " F_REVOKE " } ,
# endif
# ifdef F_SETLK
{ F_SETLK , " F_SETLK " } ,
# endif
# ifdef F_SETLKW
{ F_SETLKW , " F_SETLKW " } ,
# endif
# ifdef F_FREESP
{ F_FREESP , " F_FREESP " } ,
# endif
# ifdef F_GETLK
{ F_GETLK , " F_GETLK " } ,
# endif
# ifdef F_SETLK64
{ F_SETLK64 , " F_SETLK64 " } ,
# endif
# ifdef F_SETLKW64
{ F_SETLKW64 , " F_SETLKW64 " } ,
# endif
# ifdef F_FREESP64
{ F_FREESP64 , " F_FREESP64 " } ,
# endif
# ifdef F_GETLK64
{ F_GETLK64 , " F_GETLK64 " } ,
# endif
# ifdef F_SHARE
{ F_SHARE , " F_SHARE " } ,
# endif
# ifdef F_UNSHARE
{ F_UNSHARE , " F_UNSHARE " } ,
2009-03-10 23:41:58 +03:00
# endif
# ifdef F_SETLEASE
{ F_SETLEASE , " F_SETLEASE " } ,
# endif
# ifdef F_GETLEASE
{ F_GETLEASE , " F_GETLEASE " } ,
# endif
# ifdef F_NOTIFY
{ F_NOTIFY , " F_NOTIFY " } ,
# endif
# ifdef F_DUPFD_CLOEXEC
{ F_DUPFD_CLOEXEC , " F_DUPFD_CLOEXEC " } ,
1999-02-19 03:21:36 +03:00
# endif
{ 0 , NULL } ,
} ;
2004-09-04 07:39:20 +04:00
static const struct xlat fdflags [ ] = {
1999-02-19 03:21:36 +03:00
# ifdef FD_CLOEXEC
{ FD_CLOEXEC , " FD_CLOEXEC " } ,
# endif
{ 0 , NULL } ,
} ;
# ifdef LOCK_SH
2004-09-04 07:39:20 +04:00
static const struct xlat flockcmds [ ] = {
1999-02-19 03:21:36 +03:00
{ LOCK_SH , " LOCK_SH " } ,
{ LOCK_EX , " LOCK_EX " } ,
{ LOCK_NB , " LOCK_NB " } ,
{ LOCK_UN , " LOCK_UN " } ,
{ 0 , NULL } ,
} ;
# endif /* LOCK_SH */
2004-09-04 07:39:20 +04:00
static const struct xlat lockfcmds [ ] = {
1999-02-19 03:21:36 +03:00
{ F_RDLCK , " F_RDLCK " } ,
{ F_WRLCK , " F_WRLCK " } ,
{ F_UNLCK , " F_UNLCK " } ,
# ifdef F_EXLCK
{ F_EXLCK , " F_EXLCK " } ,
# endif
# ifdef F_SHLCK
{ F_SHLCK , " F_SHLCK " } ,
# endif
{ 0 , NULL } ,
} ;
2009-03-10 23:41:58 +03:00
# ifdef F_NOTIFY
static const struct xlat notifyflags [ ] = {
# ifdef DN_ACCESS
{ DN_ACCESS , " DN_ACCESS " } ,
# endif
# ifdef DN_MODIFY
{ DN_MODIFY , " DN_MODIFY " } ,
# endif
# ifdef DN_CREATE
{ DN_CREATE , " DN_CREATE " } ,
# endif
# ifdef DN_DELETE
{ DN_DELETE , " DN_DELETE " } ,
# endif
# ifdef DN_RENAME
{ DN_RENAME , " DN_RENAME " } ,
# endif
# ifdef DN_ATTRIB
{ DN_ATTRIB , " DN_ATTRIB " } ,
# endif
# ifdef DN_MULTISHOT
{ DN_MULTISHOT , " DN_MULTISHOT " } ,
# endif
{ 0 , NULL } ,
} ;
# endif
2004-09-04 07:39:20 +04:00
static const struct xlat whence [ ] = {
1999-02-19 03:21:36 +03:00
{ SEEK_SET , " SEEK_SET " } ,
{ SEEK_CUR , " SEEK_CUR " } ,
{ SEEK_END , " SEEK_END " } ,
{ 0 , NULL } ,
} ;
2001-03-08 16:59:00 +03:00
# ifndef HAVE_LONG_LONG_OFF_T
1999-02-19 03:21:36 +03:00
/* fcntl/lockf */
static void
2009-01-06 18:12:52 +03:00
printflock ( struct tcb * tcp , long addr , int getlk )
1999-02-19 03:21:36 +03:00
{
struct flock fl ;
2009-04-15 17:22:59 +04:00
# if SUPPORTED_PERSONALITIES > 1
if ( personality_wordsize [ current_personality ] ! = sizeof ( fl . l_start ) ) {
if ( personality_wordsize [ current_personality ] = = 4 ) {
/* 32-bit x86 app on x86_64 and similar cases */
struct {
short int l_type ;
short int l_whence ;
int32_t l_start ; /* off_t */
int32_t l_len ; /* off_t */
int32_t l_pid ; /* pid_t */
} fl32 ;
if ( umove ( tcp , addr , & fl32 ) < 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " {...} " ) ;
2009-04-15 17:22:59 +04:00
return ;
}
fl . l_type = fl32 . l_type ;
fl . l_whence = fl32 . l_whence ;
fl . l_start = fl32 . l_start ;
fl . l_len = fl32 . l_len ;
fl . l_pid = fl32 . l_pid ;
} else {
/* let people know we have a problem here */
tprintf ( " { <decode error: unsupported wordsize %d> } " ,
personality_wordsize [ current_personality ] ) ;
2009-01-06 18:12:52 +03:00
return ;
}
2009-04-15 17:22:59 +04:00
} else
# endif
{
if ( umove ( tcp , addr , & fl ) < 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " {...} " ) ;
2009-01-06 18:12:52 +03:00
return ;
}
1999-02-19 03:21:36 +03:00
}
2011-09-01 12:00:28 +04:00
tprints ( " {type= " ) ;
1999-02-19 03:21:36 +03:00
printxval ( lockfcmds , fl . l_type , " F_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , whence= " ) ;
1999-02-19 03:21:36 +03:00
printxval ( whence , fl . l_whence , " SEEK_??? " ) ;
tprintf ( " , start=%ld, len=%ld " , fl . l_start , fl . l_len ) ;
if ( getlk )
tprintf ( " , pid=%lu} " , ( unsigned long ) fl . l_pid ) ;
else
2011-09-01 12:00:28 +04:00
tprints ( " } " ) ;
1999-02-19 03:21:36 +03:00
}
2001-03-07 19:53:07 +03:00
# endif
1999-02-19 03:21:36 +03:00
2001-03-08 16:59:00 +03:00
# if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
2001-03-06 18:08:09 +03:00
/* fcntl/lockf */
static void
2009-01-06 18:12:52 +03:00
printflock64 ( struct tcb * tcp , long addr , int getlk )
2001-03-06 18:08:09 +03:00
{
struct flock64 fl ;
if ( umove ( tcp , addr , & fl ) < 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " {...} " ) ;
2001-03-06 18:08:09 +03:00
return ;
}
2011-09-01 12:00:28 +04:00
tprints ( " {type= " ) ;
2001-03-06 18:08:09 +03:00
printxval ( lockfcmds , fl . l_type , " F_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , whence= " ) ;
2001-03-06 18:08:09 +03:00
printxval ( whence , fl . l_whence , " SEEK_??? " ) ;
2001-10-10 03:47:38 +04:00
tprintf ( " , start=%lld, len=%lld " , ( long long ) fl . l_start , ( long long ) fl . l_len ) ;
2001-03-06 18:08:09 +03:00
if ( getlk )
tprintf ( " , pid=%lu} " , ( unsigned long ) fl . l_pid ) ;
else
2011-09-01 12:00:28 +04:00
tprints ( " } " ) ;
2001-03-06 18:08:09 +03:00
}
# endif
2007-01-12 02:19:55 +03:00
int
sys_fcntl ( struct tcb * tcp )
{
1999-02-19 03:21:36 +03:00
if ( entering ( tcp ) ) {
Fix decoding of file descriptors
* defs.h (printfd): New function prototype.
* util.c (printfd): New function.
* file.c (print_dirfd): Update prototype to use printfd().
(sys_openat, sys_faccessat, sys_newfstatat, sys_mkdirat, sys_linkat,
sys_unlinkat, sys_readlinkat, sys_renameat, sys_fchownat, sys_fchmodat,
sys_futimesat, sys_utimensat, sys_mknodat): Update use of print_dirfd().
(sys_lseek, sys_llseek, sys_readahead, sys_ftruncate, sys_ftruncate64,
sys_fstat, sys_fstat64, sys_oldfstat, sys_fstatfs, sys_fstatfs64,
sys_fchdir, sys_fchroot, sys_linkat, sys_fchown, sys_fchmod, sys_fsync,
sys_readdir, sys_getdents, sys_getdirentries, sys_fsetxattr,
sys_fgetxattr, sys_flistxattr, sys_fremovexattr, sys_fadvise64,
sys_fadvise64_64, sys_inotify_add_watch, sys_inotify_rm_watch,
sys_fallocate): Use printfd() for decoding of file descriptors.
* desc.c (sys_fcntl, sys_flock, sys_close, sys_dup, do_dup2,
decode_select, sys_epoll_ctl, epoll_wait_common): Use printfd() for
decoding of file descriptors.
* io.c (sys_read, sys_write, sys_readv, sys_writev, sys_pread,
sys_pwrite, sys_sendfile, sys_sendfile64, sys_pread64, sys_pwrite64,
sys_ioctl): Likewise.
* mem.c (print_mmap, sys_mmap64): Likewise.
* signal.c (do_signalfd): Likewise.
* stream.c (decode_poll): Likewise.
* time.c (sys_timerfd_settime, sys_timerfd_gettime): Likewise.
Based on patch from Grant Edwards <grant.b.edwards@gmail.com>.
2011-03-04 05:08:02 +03:00
printfd ( tcp , tcp - > u_arg [ 0 ] ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
1999-02-19 03:21:36 +03:00
printxval ( fcntlcmds , tcp - > u_arg [ 1 ] , " F_??? " ) ;
switch ( tcp - > u_arg [ 1 ] ) {
case F_SETFD :
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2005-05-31 Dmitry V. Levin <ldv@altlinux.org>
* util.c (printxval): Change third argument from "char *" to
"const char *".
(printflags): Add third argument, "const char *", with similar
meaning to the third argument of printxval().
* defs.h (printxval): Change third argument from "char *" to
"const char *".
(printflags): Add third argument.
* bjm.c (sys_query_module) [LINUX]: Pass third argument to
printflags().
* desc.c (sys_fcntl): Likewise.
(sys_flock) [LOCK_SH]: Likewise.
(print_epoll_event) [HAVE_SYS_EPOLL_H]: Likewise.
* file.c (sys_open): Likewise.
(solaris_open) [LINUXSPARC]: Likewise.
(sys_access): Likewise.
(sys_chflags, sys_fchflags) [FREEBSD]: Likewise.
(realprintstat) [HAVE_LONG_LONG_OFF_T &&
HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
(printstat64) [HAVE_STAT64 &&
HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
(sys_setxattr, sys_fsetxattr): Likewise.
* ipc.c (sys_msgget, sys_msgsnd, sys_msgrcv, sys_semget,
sys_shmget, sys_shmat) [LINUX || SUNOS4 || FREEBSD]: Likewise.
(sys_mq_open) [LINUX]: Likewise.
(printmqattr) [HAVE_MQUEUE_H]: Likewise.
* mem.c (print_mmap) [!HAVE_LONG_LONG_OFF_T]: Likewise.
(sys_mmap64) [_LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T]: Likewise.
(sys_mprotect): Likewise.
(sys_mremap, sys_madvise, sys_mlockall) [LINUX]: Likewise.
(sys_msync) [MS_ASYNC]: Likewise.
(sys_mctl) [MC_SYNC]: Likewise.
(sys_remap_file_pages, sys_mbind, sys_get_mempolicy) [LINUX]:
Likewise.
* net.c (printmsghdr) [HAVE_STRUCT_MSGHDR_MSG_CONTROL]: Likewise.
(sys_send, sys_sendto): Likewise.
(sys_sendmsg) [HAVE_SENDMSG]: Likewise.
(sys_recv, sys_recvfrom): Likewise.
(sys_recvmsg) [HAVE_SENDMSG]: Likewise.
(printicmpfilter) [ICMP_FILTER]: Likewise.
* proc.c (proc_ioctl) [SVR4 && !HAVE_MP_PROCFS || FREEBSD]: Likewise.
* process.c (sys_clone) [LINUX]: Likewise.
(printwaitn): Likewise.
(sys_waitid) [SVR4 || LINUX]: Likewise.
* signal.c (sys_sigvec) [SUNOS4 || FREEBSD]: Likewise.
(sys_sigaction): Likewise.
(printcontext) [SVR4]: Likewise.
(print_stack_t) [LINUX) || FREEBSD]: Likewise.
(sys_rt_sigaction) [LINUX]: Likewise.
* sock.c (sock_ioctl) [LINUX]: Likewise.
* stream.c (sys_putmsg, sys_getmsg): Likewise.
(sys_putpmsg) [SYS_putpmsg]: Likewise.
(sys_getpmsg) [SYS_getpmsg]: Likewise.
(sys_poll): Likewise.
(print_transport_message) [TI_BIND]: Likewise.
(stream_ioctl): Likewise.
* system.c (sys_mount, sys_reboot): Likewise.
(sys_cacheflush) [LINUX && M68K]: Likewise.
(sys_capget, sys_capset) [SYS_capget]: Likewise.
* term.c (term_ioctl) [TIOCMGET]: Likewise.
* time.c (sys_clock_nanosleep, sys_timer_settime) [LINUX]:
Likewise.
Fixes RH#159310.
2005-06-01 23:02:36 +04:00
printflags ( fdflags , tcp - > u_arg [ 2 ] , " FD_??? " ) ;
1999-02-19 03:21:36 +03:00
break ;
case F_SETOWN : case F_DUPFD :
2009-03-10 23:41:58 +03:00
# ifdef F_DUPFD_CLOEXEC
case F_DUPFD_CLOEXEC :
# endif
1999-02-19 03:21:36 +03:00
tprintf ( " , %ld " , tcp - > u_arg [ 2 ] ) ;
break ;
case F_SETFL :
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2009-03-10 23:41:58 +03:00
tprint_open_modes ( tcp - > u_arg [ 2 ] ) ;
1999-02-19 03:21:36 +03:00
break ;
case F_SETLK : case F_SETLKW :
2001-03-06 18:08:09 +03:00
# ifdef F_FREESP
case F_FREESP :
# endif
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
1999-02-19 03:21:36 +03:00
printflock ( tcp , tcp - > u_arg [ 2 ] , 0 ) ;
break ;
2001-03-06 18:08:09 +03:00
# if _LFS64_LARGEFILE
# ifdef F_FREESP64
case F_FREESP64 :
# endif
2002-12-16 02:58:18 +03:00
/* Linux glibc defines SETLK64 as SETLK,
2001-03-06 18:08:09 +03:00
even though the kernel has different values - as does Solaris . */
2009-03-10 23:41:58 +03:00
# if defined(F_SETLK64) && F_SETLK64 + 0 != F_SETLK
2001-03-06 18:08:09 +03:00
case F_SETLK64 :
# endif
2009-03-10 23:41:58 +03:00
# if defined(F_SETLKW64) && F_SETLKW64 + 0 != F_SETLKW
2001-03-06 18:08:09 +03:00
case F_SETLKW64 :
# endif
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2001-03-06 18:08:09 +03:00
printflock64 ( tcp , tcp - > u_arg [ 2 ] , 0 ) ;
break ;
2009-03-10 23:41:58 +03:00
# endif
# ifdef F_NOTIFY
case F_NOTIFY :
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2009-03-10 23:41:58 +03:00
printflags ( notifyflags , tcp - > u_arg [ 2 ] , " DN_??? " ) ;
break ;
# endif
# ifdef F_SETLEASE
case F_SETLEASE :
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2009-03-10 23:41:58 +03:00
printxval ( lockfcmds , tcp - > u_arg [ 2 ] , " F_??? " ) ;
break ;
2001-03-06 18:08:09 +03:00
# endif
2009-02-27 23:32:52 +03:00
}
1999-02-19 03:21:36 +03:00
}
else {
switch ( tcp - > u_arg [ 1 ] ) {
case F_DUPFD :
2009-03-10 23:41:58 +03:00
# ifdef F_DUPFD_CLOEXEC
case F_DUPFD_CLOEXEC :
# endif
1999-02-19 03:21:36 +03:00
case F_SETFD : case F_SETFL :
case F_SETLK : case F_SETLKW :
case F_SETOWN : case F_GETOWN :
2009-03-10 23:41:58 +03:00
# ifdef F_NOTIFY
case F_NOTIFY :
# endif
# ifdef F_SETLEASE
case F_SETLEASE :
# endif
1999-02-19 03:21:36 +03:00
break ;
case F_GETFD :
2008-09-03 05:22:18 +04:00
if ( syserror ( tcp ) | | tcp - > u_rval = = 0 )
1999-02-19 03:21:36 +03:00
return 0 ;
2009-03-10 23:41:58 +03:00
tcp - > auxstr = sprintflags ( " flags " , fdflags , tcp - > u_rval ) ;
1999-02-19 03:21:36 +03:00
return RVAL_HEX | RVAL_STR ;
case F_GETFL :
2008-09-03 05:22:18 +04:00
if ( syserror ( tcp ) )
return 0 ;
2007-01-12 02:19:55 +03:00
tcp - > auxstr = sprint_open_modes ( tcp - > u_rval ) ;
1999-02-19 03:21:36 +03:00
return RVAL_HEX | RVAL_STR ;
case F_GETLK :
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
1999-02-19 03:21:36 +03:00
printflock ( tcp , tcp - > u_arg [ 2 ] , 1 ) ;
break ;
2001-03-06 18:08:09 +03:00
# if _LFS64_LARGEFILE
2011-06-07 14:13:24 +04:00
# if defined(F_GETLK64) && F_GETLK64+0 != F_GETLK
2001-03-06 18:08:09 +03:00
case F_GETLK64 :
# endif
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2001-03-06 18:08:09 +03:00
printflock64 ( tcp , tcp - > u_arg [ 2 ] , 1 ) ;
break ;
2009-03-10 23:41:58 +03:00
# endif
# ifdef F_GETLEASE
case F_GETLEASE :
if ( syserror ( tcp ) )
return 0 ;
tcp - > auxstr = xlookup ( lockfcmds , tcp - > u_rval ) ;
return RVAL_HEX | RVAL_STR ;
2001-03-06 18:08:09 +03:00
# endif
2009-02-27 23:32:52 +03:00
default :
1999-02-19 03:21:36 +03:00
tprintf ( " , %#lx " , tcp - > u_arg [ 2 ] ) ;
break ;
}
}
return 0 ;
}
# ifdef LOCK_SH
int
2009-01-06 18:12:52 +03:00
sys_flock ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
Fix decoding of file descriptors
* defs.h (printfd): New function prototype.
* util.c (printfd): New function.
* file.c (print_dirfd): Update prototype to use printfd().
(sys_openat, sys_faccessat, sys_newfstatat, sys_mkdirat, sys_linkat,
sys_unlinkat, sys_readlinkat, sys_renameat, sys_fchownat, sys_fchmodat,
sys_futimesat, sys_utimensat, sys_mknodat): Update use of print_dirfd().
(sys_lseek, sys_llseek, sys_readahead, sys_ftruncate, sys_ftruncate64,
sys_fstat, sys_fstat64, sys_oldfstat, sys_fstatfs, sys_fstatfs64,
sys_fchdir, sys_fchroot, sys_linkat, sys_fchown, sys_fchmod, sys_fsync,
sys_readdir, sys_getdents, sys_getdirentries, sys_fsetxattr,
sys_fgetxattr, sys_flistxattr, sys_fremovexattr, sys_fadvise64,
sys_fadvise64_64, sys_inotify_add_watch, sys_inotify_rm_watch,
sys_fallocate): Use printfd() for decoding of file descriptors.
* desc.c (sys_fcntl, sys_flock, sys_close, sys_dup, do_dup2,
decode_select, sys_epoll_ctl, epoll_wait_common): Use printfd() for
decoding of file descriptors.
* io.c (sys_read, sys_write, sys_readv, sys_writev, sys_pread,
sys_pwrite, sys_sendfile, sys_sendfile64, sys_pread64, sys_pwrite64,
sys_ioctl): Likewise.
* mem.c (print_mmap, sys_mmap64): Likewise.
* signal.c (do_signalfd): Likewise.
* stream.c (decode_poll): Likewise.
* time.c (sys_timerfd_settime, sys_timerfd_gettime): Likewise.
Based on patch from Grant Edwards <grant.b.edwards@gmail.com>.
2011-03-04 05:08:02 +03:00
printfd ( tcp , tcp - > u_arg [ 0 ] ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2005-05-31 Dmitry V. Levin <ldv@altlinux.org>
* util.c (printxval): Change third argument from "char *" to
"const char *".
(printflags): Add third argument, "const char *", with similar
meaning to the third argument of printxval().
* defs.h (printxval): Change third argument from "char *" to
"const char *".
(printflags): Add third argument.
* bjm.c (sys_query_module) [LINUX]: Pass third argument to
printflags().
* desc.c (sys_fcntl): Likewise.
(sys_flock) [LOCK_SH]: Likewise.
(print_epoll_event) [HAVE_SYS_EPOLL_H]: Likewise.
* file.c (sys_open): Likewise.
(solaris_open) [LINUXSPARC]: Likewise.
(sys_access): Likewise.
(sys_chflags, sys_fchflags) [FREEBSD]: Likewise.
(realprintstat) [HAVE_LONG_LONG_OFF_T &&
HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
(printstat64) [HAVE_STAT64 &&
HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
(sys_setxattr, sys_fsetxattr): Likewise.
* ipc.c (sys_msgget, sys_msgsnd, sys_msgrcv, sys_semget,
sys_shmget, sys_shmat) [LINUX || SUNOS4 || FREEBSD]: Likewise.
(sys_mq_open) [LINUX]: Likewise.
(printmqattr) [HAVE_MQUEUE_H]: Likewise.
* mem.c (print_mmap) [!HAVE_LONG_LONG_OFF_T]: Likewise.
(sys_mmap64) [_LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T]: Likewise.
(sys_mprotect): Likewise.
(sys_mremap, sys_madvise, sys_mlockall) [LINUX]: Likewise.
(sys_msync) [MS_ASYNC]: Likewise.
(sys_mctl) [MC_SYNC]: Likewise.
(sys_remap_file_pages, sys_mbind, sys_get_mempolicy) [LINUX]:
Likewise.
* net.c (printmsghdr) [HAVE_STRUCT_MSGHDR_MSG_CONTROL]: Likewise.
(sys_send, sys_sendto): Likewise.
(sys_sendmsg) [HAVE_SENDMSG]: Likewise.
(sys_recv, sys_recvfrom): Likewise.
(sys_recvmsg) [HAVE_SENDMSG]: Likewise.
(printicmpfilter) [ICMP_FILTER]: Likewise.
* proc.c (proc_ioctl) [SVR4 && !HAVE_MP_PROCFS || FREEBSD]: Likewise.
* process.c (sys_clone) [LINUX]: Likewise.
(printwaitn): Likewise.
(sys_waitid) [SVR4 || LINUX]: Likewise.
* signal.c (sys_sigvec) [SUNOS4 || FREEBSD]: Likewise.
(sys_sigaction): Likewise.
(printcontext) [SVR4]: Likewise.
(print_stack_t) [LINUX) || FREEBSD]: Likewise.
(sys_rt_sigaction) [LINUX]: Likewise.
* sock.c (sock_ioctl) [LINUX]: Likewise.
* stream.c (sys_putmsg, sys_getmsg): Likewise.
(sys_putpmsg) [SYS_putpmsg]: Likewise.
(sys_getpmsg) [SYS_getpmsg]: Likewise.
(sys_poll): Likewise.
(print_transport_message) [TI_BIND]: Likewise.
(stream_ioctl): Likewise.
* system.c (sys_mount, sys_reboot): Likewise.
(sys_cacheflush) [LINUX && M68K]: Likewise.
(sys_capget, sys_capset) [SYS_capget]: Likewise.
* term.c (term_ioctl) [TIOCMGET]: Likewise.
* time.c (sys_clock_nanosleep, sys_timer_settime) [LINUX]:
Likewise.
Fixes RH#159310.
2005-06-01 23:02:36 +04:00
printflags ( flockcmds , tcp - > u_arg [ 1 ] , " LOCK_??? " ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
# endif /* LOCK_SH */
int
2009-01-06 18:12:52 +03:00
sys_close ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
Fix decoding of file descriptors
* defs.h (printfd): New function prototype.
* util.c (printfd): New function.
* file.c (print_dirfd): Update prototype to use printfd().
(sys_openat, sys_faccessat, sys_newfstatat, sys_mkdirat, sys_linkat,
sys_unlinkat, sys_readlinkat, sys_renameat, sys_fchownat, sys_fchmodat,
sys_futimesat, sys_utimensat, sys_mknodat): Update use of print_dirfd().
(sys_lseek, sys_llseek, sys_readahead, sys_ftruncate, sys_ftruncate64,
sys_fstat, sys_fstat64, sys_oldfstat, sys_fstatfs, sys_fstatfs64,
sys_fchdir, sys_fchroot, sys_linkat, sys_fchown, sys_fchmod, sys_fsync,
sys_readdir, sys_getdents, sys_getdirentries, sys_fsetxattr,
sys_fgetxattr, sys_flistxattr, sys_fremovexattr, sys_fadvise64,
sys_fadvise64_64, sys_inotify_add_watch, sys_inotify_rm_watch,
sys_fallocate): Use printfd() for decoding of file descriptors.
* desc.c (sys_fcntl, sys_flock, sys_close, sys_dup, do_dup2,
decode_select, sys_epoll_ctl, epoll_wait_common): Use printfd() for
decoding of file descriptors.
* io.c (sys_read, sys_write, sys_readv, sys_writev, sys_pread,
sys_pwrite, sys_sendfile, sys_sendfile64, sys_pread64, sys_pwrite64,
sys_ioctl): Likewise.
* mem.c (print_mmap, sys_mmap64): Likewise.
* signal.c (do_signalfd): Likewise.
* stream.c (decode_poll): Likewise.
* time.c (sys_timerfd_settime, sys_timerfd_gettime): Likewise.
Based on patch from Grant Edwards <grant.b.edwards@gmail.com>.
2011-03-04 05:08:02 +03:00
printfd ( tcp , tcp - > u_arg [ 0 ] ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
static int
do_dup2 ( struct tcb * tcp , int flags_arg )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
Fix decoding of file descriptors
* defs.h (printfd): New function prototype.
* util.c (printfd): New function.
* file.c (print_dirfd): Update prototype to use printfd().
(sys_openat, sys_faccessat, sys_newfstatat, sys_mkdirat, sys_linkat,
sys_unlinkat, sys_readlinkat, sys_renameat, sys_fchownat, sys_fchmodat,
sys_futimesat, sys_utimensat, sys_mknodat): Update use of print_dirfd().
(sys_lseek, sys_llseek, sys_readahead, sys_ftruncate, sys_ftruncate64,
sys_fstat, sys_fstat64, sys_oldfstat, sys_fstatfs, sys_fstatfs64,
sys_fchdir, sys_fchroot, sys_linkat, sys_fchown, sys_fchmod, sys_fsync,
sys_readdir, sys_getdents, sys_getdirentries, sys_fsetxattr,
sys_fgetxattr, sys_flistxattr, sys_fremovexattr, sys_fadvise64,
sys_fadvise64_64, sys_inotify_add_watch, sys_inotify_rm_watch,
sys_fallocate): Use printfd() for decoding of file descriptors.
* desc.c (sys_fcntl, sys_flock, sys_close, sys_dup, do_dup2,
decode_select, sys_epoll_ctl, epoll_wait_common): Use printfd() for
decoding of file descriptors.
* io.c (sys_read, sys_write, sys_readv, sys_writev, sys_pread,
sys_pwrite, sys_sendfile, sys_sendfile64, sys_pread64, sys_pwrite64,
sys_ioctl): Likewise.
* mem.c (print_mmap, sys_mmap64): Likewise.
* signal.c (do_signalfd): Likewise.
* stream.c (decode_poll): Likewise.
* time.c (sys_timerfd_settime, sys_timerfd_gettime): Likewise.
Based on patch from Grant Edwards <grant.b.edwards@gmail.com>.
2011-03-04 05:08:02 +03:00
printfd ( tcp , tcp - > u_arg [ 0 ] ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
Fix decoding of file descriptors
* defs.h (printfd): New function prototype.
* util.c (printfd): New function.
* file.c (print_dirfd): Update prototype to use printfd().
(sys_openat, sys_faccessat, sys_newfstatat, sys_mkdirat, sys_linkat,
sys_unlinkat, sys_readlinkat, sys_renameat, sys_fchownat, sys_fchmodat,
sys_futimesat, sys_utimensat, sys_mknodat): Update use of print_dirfd().
(sys_lseek, sys_llseek, sys_readahead, sys_ftruncate, sys_ftruncate64,
sys_fstat, sys_fstat64, sys_oldfstat, sys_fstatfs, sys_fstatfs64,
sys_fchdir, sys_fchroot, sys_linkat, sys_fchown, sys_fchmod, sys_fsync,
sys_readdir, sys_getdents, sys_getdirentries, sys_fsetxattr,
sys_fgetxattr, sys_flistxattr, sys_fremovexattr, sys_fadvise64,
sys_fadvise64_64, sys_inotify_add_watch, sys_inotify_rm_watch,
sys_fallocate): Use printfd() for decoding of file descriptors.
* desc.c (sys_fcntl, sys_flock, sys_close, sys_dup, do_dup2,
decode_select, sys_epoll_ctl, epoll_wait_common): Use printfd() for
decoding of file descriptors.
* io.c (sys_read, sys_write, sys_readv, sys_writev, sys_pread,
sys_pwrite, sys_sendfile, sys_sendfile64, sys_pread64, sys_pwrite64,
sys_ioctl): Likewise.
* mem.c (print_mmap, sys_mmap64): Likewise.
* signal.c (do_signalfd): Likewise.
* stream.c (decode_poll): Likewise.
* time.c (sys_timerfd_settime, sys_timerfd_gettime): Likewise.
Based on patch from Grant Edwards <grant.b.edwards@gmail.com>.
2011-03-04 05:08:02 +03:00
printfd ( tcp , tcp - > u_arg [ 1 ] ) ;
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
if ( flags_arg > = 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
printflags ( open_mode_flags , tcp - > u_arg [ flags_arg ] , " O_??? " ) ;
}
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
int
sys_dup2 ( struct tcb * tcp )
{
return do_dup2 ( tcp , - 1 ) ;
}
int
sys_dup3 ( struct tcb * tcp )
{
return do_dup2 ( tcp , 2 ) ;
}
2012-02-25 05:38:52 +04:00
# if defined(ALPHA)
1999-02-19 03:21:36 +03:00
int
2009-01-06 18:12:52 +03:00
sys_getdtablesize ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
return 0 ;
}
2012-02-25 05:38:52 +04:00
# endif
1999-02-19 03:21:36 +03:00
static int
2006-12-13 20:10:11 +03:00
decode_select ( struct tcb * tcp , long * args , enum bitness_t bitness )
1999-02-19 03:21:36 +03:00
{
2011-09-01 20:18:04 +04:00
int i , j ;
2011-09-01 18:35:44 +04:00
unsigned nfds , fdsize ;
2005-02-06 04:55:12 +03:00
fd_set * fds ;
2010-09-07 02:08:24 +04:00
const char * sep ;
1999-02-19 03:21:36 +03:00
long arg ;
2011-09-01 18:35:44 +04:00
fdsize = args [ 0 ] ;
/* Beware of select(2^31-1, NULL, NULL, NULL) and similar... */
if ( args [ 0 ] > 1024 * 1024 )
fdsize = 1024 * 1024 ;
if ( args [ 0 ] < 0 )
fdsize = 0 ;
fdsize = ( ( ( fdsize + 7 ) / 8 ) + sizeof ( long ) - 1 ) & - sizeof ( long ) ;
1999-02-19 03:21:36 +03:00
if ( entering ( tcp ) ) {
2011-08-31 16:00:02 +04:00
fds = malloc ( fdsize ) ;
if ( ! fds )
die_out_of_memory ( ) ;
1999-02-19 03:21:36 +03:00
nfds = args [ 0 ] ;
tprintf ( " %d " , nfds ) ;
for ( i = 0 ; i < 3 ; i + + ) {
arg = args [ i + 1 ] ;
if ( arg = = 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " , NULL " ) ;
1999-02-19 03:21:36 +03:00
continue ;
}
2011-08-31 16:00:02 +04:00
if ( ! verbose ( tcp ) ) {
1999-02-19 03:21:36 +03:00
tprintf ( " , %#lx " , arg ) ;
continue ;
}
2005-02-06 04:55:12 +03:00
if ( umoven ( tcp , arg , fdsize , ( char * ) fds ) < 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " , [?] " ) ;
1999-02-19 03:21:36 +03:00
continue ;
}
2011-09-01 12:00:28 +04:00
tprints ( " , [ " ) ;
1999-02-19 03:21:36 +03:00
for ( j = 0 , sep = " " ; j < nfds ; j + + ) {
2005-02-06 04:55:12 +03:00
if ( FD_ISSET ( j , fds ) ) {
2011-09-01 11:55:05 +04:00
tprints ( sep ) ;
Fix decoding of file descriptors
* defs.h (printfd): New function prototype.
* util.c (printfd): New function.
* file.c (print_dirfd): Update prototype to use printfd().
(sys_openat, sys_faccessat, sys_newfstatat, sys_mkdirat, sys_linkat,
sys_unlinkat, sys_readlinkat, sys_renameat, sys_fchownat, sys_fchmodat,
sys_futimesat, sys_utimensat, sys_mknodat): Update use of print_dirfd().
(sys_lseek, sys_llseek, sys_readahead, sys_ftruncate, sys_ftruncate64,
sys_fstat, sys_fstat64, sys_oldfstat, sys_fstatfs, sys_fstatfs64,
sys_fchdir, sys_fchroot, sys_linkat, sys_fchown, sys_fchmod, sys_fsync,
sys_readdir, sys_getdents, sys_getdirentries, sys_fsetxattr,
sys_fgetxattr, sys_flistxattr, sys_fremovexattr, sys_fadvise64,
sys_fadvise64_64, sys_inotify_add_watch, sys_inotify_rm_watch,
sys_fallocate): Use printfd() for decoding of file descriptors.
* desc.c (sys_fcntl, sys_flock, sys_close, sys_dup, do_dup2,
decode_select, sys_epoll_ctl, epoll_wait_common): Use printfd() for
decoding of file descriptors.
* io.c (sys_read, sys_write, sys_readv, sys_writev, sys_pread,
sys_pwrite, sys_sendfile, sys_sendfile64, sys_pread64, sys_pwrite64,
sys_ioctl): Likewise.
* mem.c (print_mmap, sys_mmap64): Likewise.
* signal.c (do_signalfd): Likewise.
* stream.c (decode_poll): Likewise.
* time.c (sys_timerfd_settime, sys_timerfd_gettime): Likewise.
Based on patch from Grant Edwards <grant.b.edwards@gmail.com>.
2011-03-04 05:08:02 +03:00
printfd ( tcp , j ) ;
1999-02-19 03:21:36 +03:00
sep = " " ;
}
}
2011-09-01 12:00:28 +04:00
tprints ( " ] " ) ;
1999-02-19 03:21:36 +03:00
}
2005-02-06 04:55:12 +03:00
free ( fds ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2007-07-24 05:57:11 +04:00
printtv_bitness ( tcp , args [ 4 ] , bitness , 0 ) ;
1999-02-19 03:21:36 +03:00
}
2011-06-22 16:32:43 +04:00
else {
2011-08-31 14:26:03 +04:00
static char outstr [ 1024 ] ;
char * outptr ;
# define end_outstr (outstr + sizeof(outstr))
const char * sep ;
1999-02-19 03:21:36 +03:00
if ( syserror ( tcp ) )
return 0 ;
2011-08-20 14:48:18 +04:00
nfds = tcp - > u_rval ;
if ( nfds = = 0 ) {
1999-02-19 03:21:36 +03:00
tcp - > auxstr = " Timeout " ;
return RVAL_STR ;
}
2005-02-06 04:55:12 +03:00
2011-08-31 14:26:03 +04:00
fds = malloc ( fdsize ) ;
2011-08-31 16:00:02 +04:00
if ( ! fds )
die_out_of_memory ( ) ;
2005-02-06 04:55:12 +03:00
2011-08-31 14:26:03 +04:00
outptr = outstr ;
sep = " " ;
1999-02-19 03:21:36 +03:00
for ( i = 0 ; i < 3 ; i + + ) {
int first = 1 ;
arg = args [ i + 1 ] ;
2011-08-31 16:00:02 +04:00
if ( ! arg | | umoven ( tcp , arg , fdsize , ( char * ) fds ) < 0 )
1999-02-19 03:21:36 +03:00
continue ;
for ( j = 0 ; j < args [ 0 ] ; j + + ) {
2005-02-06 04:55:12 +03:00
if ( FD_ISSET ( j , fds ) ) {
2011-08-31 14:26:03 +04:00
/* +2 chars needed at the end: ']',NUL */
if ( outptr < end_outstr - ( sizeof ( " , except [ " ) + sizeof ( int ) * 3 + 2 ) ) {
if ( first ) {
outptr + = sprintf ( outptr , " %s%s [%u " ,
sep ,
i = = 0 ? " in " : i = = 1 ? " out " : " except " ,
j
) ;
first = 0 ;
sep = " , " ;
}
else {
outptr + = sprintf ( outptr , " %u " , j ) ;
}
1999-02-19 03:21:36 +03:00
}
nfds - - ;
}
}
2011-08-31 14:26:03 +04:00
if ( outptr ! = outstr )
* outptr + + = ' ] ' ;
1999-02-19 03:21:36 +03:00
if ( nfds = = 0 )
break ;
}
2005-02-06 04:55:12 +03:00
free ( fds ) ;
1999-02-19 03:21:36 +03:00
/* This contains no useful information on SunOS. */
if ( args [ 4 ] ) {
2012-01-20 14:04:04 +04:00
if ( outptr < end_outstr - ( 10 + TIMEVAL_TEXT_BUFSIZE ) ) {
2011-08-31 14:26:03 +04:00
outptr + = sprintf ( outptr , " %sleft " , sep ) ;
2012-01-20 14:04:04 +04:00
outptr = sprinttv ( outptr , tcp , args [ 4 ] , bitness , /*special:*/ 0 ) ;
2011-08-31 14:26:03 +04:00
}
1999-02-19 03:21:36 +03:00
}
2011-08-31 14:26:03 +04:00
* outptr = ' \0 ' ;
2011-09-01 13:27:37 +04:00
tcp - > auxstr = outstr ;
1999-02-19 03:21:36 +03:00
return RVAL_STR ;
2011-08-31 14:26:03 +04:00
# undef end_outstr
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
int
2009-01-06 18:12:52 +03:00
sys_oldselect ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
long args [ 5 ] ;
if ( umoven ( tcp , tcp - > u_arg [ 0 ] , sizeof args , ( char * ) args ) < 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " [...] " ) ;
1999-02-19 03:21:36 +03:00
return 0 ;
}
2006-12-13 20:10:11 +03:00
return decode_select ( tcp , args , BITNESS_CURRENT ) ;
1999-02-19 03:21:36 +03:00
}
1999-11-18 20:09:47 +03:00
# ifdef ALPHA
2002-12-16 02:58:18 +03:00
int
2009-01-06 18:12:52 +03:00
sys_osf_select ( struct tcb * tcp )
1999-11-18 20:09:47 +03:00
{
long * args = tcp - > u_arg ;
2006-12-13 20:10:11 +03:00
return decode_select ( tcp , args , BITNESS_32 ) ;
1999-11-18 20:09:47 +03:00
}
# endif
2009-01-06 18:12:52 +03:00
static const struct xlat epollctls [ ] = {
2004-10-20 06:17:41 +04:00
# ifdef EPOLL_CTL_ADD
2004-10-07 02:23:31 +04:00
{ EPOLL_CTL_ADD , " EPOLL_CTL_ADD " } ,
2004-10-20 06:17:41 +04:00
# endif
# ifdef EPOLL_CTL_MOD
2004-10-07 02:23:31 +04:00
{ EPOLL_CTL_MOD , " EPOLL_CTL_MOD " } ,
2004-10-20 06:17:41 +04:00
# endif
# ifdef EPOLL_CTL_DEL
2004-10-07 02:23:31 +04:00
{ EPOLL_CTL_DEL , " EPOLL_CTL_DEL " } ,
2004-10-20 06:17:41 +04:00
# endif
2004-10-07 02:23:31 +04:00
{ 0 , NULL }
} ;
2009-01-06 18:12:52 +03:00
static const struct xlat epollevents [ ] = {
2004-10-20 06:17:41 +04:00
# ifdef EPOLLIN
2004-10-07 02:23:31 +04:00
{ EPOLLIN , " EPOLLIN " } ,
2004-10-20 06:17:41 +04:00
# endif
# ifdef EPOLLPRI
2004-10-07 02:23:31 +04:00
{ EPOLLPRI , " EPOLLPRI " } ,
2004-10-20 06:17:41 +04:00
# endif
# ifdef EPOLLOUT
2004-10-07 02:23:31 +04:00
{ EPOLLOUT , " EPOLLOUT " } ,
2004-10-20 06:17:41 +04:00
# endif
# ifdef EPOLLRDNORM
2004-10-07 02:23:31 +04:00
{ EPOLLRDNORM , " EPOLLRDNORM " } ,
2004-10-20 06:17:41 +04:00
# endif
# ifdef EPOLLRDBAND
2004-10-07 02:23:31 +04:00
{ EPOLLRDBAND , " EPOLLRDBAND " } ,
2004-10-20 06:17:41 +04:00
# endif
# ifdef EPOLLWRNORM
2004-10-07 02:23:31 +04:00
{ EPOLLWRNORM , " EPOLLWRNORM " } ,
2004-10-20 06:17:41 +04:00
# endif
# ifdef EPOLLWRBAND
2004-10-07 02:23:31 +04:00
{ EPOLLWRBAND , " EPOLLWRBAND " } ,
2004-10-20 06:17:41 +04:00
# endif
# ifdef EPOLLMSG
2004-10-07 02:23:31 +04:00
{ EPOLLMSG , " EPOLLMSG " } ,
2004-10-20 06:17:41 +04:00
# endif
# ifdef EPOLLERR
2004-10-07 02:23:31 +04:00
{ EPOLLERR , " EPOLLERR " } ,
2004-10-20 06:17:41 +04:00
# endif
# ifdef EPOLLHUP
2004-10-07 02:23:31 +04:00
{ EPOLLHUP , " EPOLLHUP " } ,
2004-10-20 06:17:41 +04:00
# endif
2011-10-11 19:55:40 +04:00
# ifdef EPOLLRDHUP
{ EPOLLRDHUP , " EPOLLRDHUP " } ,
# endif
2004-10-20 06:17:41 +04:00
# ifdef EPOLLONESHOT
2004-10-07 02:23:31 +04:00
{ EPOLLONESHOT , " EPOLLONESHOT " } ,
2004-10-20 06:17:41 +04:00
# endif
# ifdef EPOLLET
2004-10-07 02:23:31 +04:00
{ EPOLLET , " EPOLLET " } ,
2004-10-20 06:17:41 +04:00
# endif
2004-10-07 02:23:31 +04:00
{ 0 , NULL }
} ;
2012-02-27 17:18:02 +04:00
/* Not aliased to printargs_ld: we want it to have a distinct address */
2004-10-07 02:23:31 +04:00
int
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
sys_epoll_create ( struct tcb * tcp )
2004-10-07 02:23:31 +04:00
{
2012-02-27 17:18:02 +04:00
return printargs_ld ( tcp ) ;
2004-10-07 02:23:31 +04:00
}
2011-10-14 06:33:45 +04:00
static const struct xlat epollflags [ ] = {
# ifdef EPOLL_CLOEXEC
{ EPOLL_CLOEXEC , " EPOLL_CLOEXEC " } ,
# endif
# ifdef EPOLL_NONBLOCK
{ EPOLL_NONBLOCK , " EPOLL_NONBLOCK " } ,
# endif
{ 0 , NULL }
} ;
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
int
sys_epoll_create1 ( struct tcb * tcp )
{
if ( entering ( tcp ) )
2011-10-14 06:33:45 +04:00
printflags ( epollflags , tcp - > u_arg [ 0 ] , " EPOLL_??? " ) ;
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
return 0 ;
}
2004-10-20 06:17:41 +04:00
# ifdef HAVE_SYS_EPOLL_H
2004-10-07 02:23:31 +04:00
static void
2009-01-06 18:12:52 +03:00
print_epoll_event ( struct epoll_event * ev )
2004-10-07 02:23:31 +04:00
{
2011-09-01 12:00:28 +04:00
tprints ( " { " ) ;
2005-05-31 Dmitry V. Levin <ldv@altlinux.org>
* util.c (printxval): Change third argument from "char *" to
"const char *".
(printflags): Add third argument, "const char *", with similar
meaning to the third argument of printxval().
* defs.h (printxval): Change third argument from "char *" to
"const char *".
(printflags): Add third argument.
* bjm.c (sys_query_module) [LINUX]: Pass third argument to
printflags().
* desc.c (sys_fcntl): Likewise.
(sys_flock) [LOCK_SH]: Likewise.
(print_epoll_event) [HAVE_SYS_EPOLL_H]: Likewise.
* file.c (sys_open): Likewise.
(solaris_open) [LINUXSPARC]: Likewise.
(sys_access): Likewise.
(sys_chflags, sys_fchflags) [FREEBSD]: Likewise.
(realprintstat) [HAVE_LONG_LONG_OFF_T &&
HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
(printstat64) [HAVE_STAT64 &&
HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
(sys_setxattr, sys_fsetxattr): Likewise.
* ipc.c (sys_msgget, sys_msgsnd, sys_msgrcv, sys_semget,
sys_shmget, sys_shmat) [LINUX || SUNOS4 || FREEBSD]: Likewise.
(sys_mq_open) [LINUX]: Likewise.
(printmqattr) [HAVE_MQUEUE_H]: Likewise.
* mem.c (print_mmap) [!HAVE_LONG_LONG_OFF_T]: Likewise.
(sys_mmap64) [_LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T]: Likewise.
(sys_mprotect): Likewise.
(sys_mremap, sys_madvise, sys_mlockall) [LINUX]: Likewise.
(sys_msync) [MS_ASYNC]: Likewise.
(sys_mctl) [MC_SYNC]: Likewise.
(sys_remap_file_pages, sys_mbind, sys_get_mempolicy) [LINUX]:
Likewise.
* net.c (printmsghdr) [HAVE_STRUCT_MSGHDR_MSG_CONTROL]: Likewise.
(sys_send, sys_sendto): Likewise.
(sys_sendmsg) [HAVE_SENDMSG]: Likewise.
(sys_recv, sys_recvfrom): Likewise.
(sys_recvmsg) [HAVE_SENDMSG]: Likewise.
(printicmpfilter) [ICMP_FILTER]: Likewise.
* proc.c (proc_ioctl) [SVR4 && !HAVE_MP_PROCFS || FREEBSD]: Likewise.
* process.c (sys_clone) [LINUX]: Likewise.
(printwaitn): Likewise.
(sys_waitid) [SVR4 || LINUX]: Likewise.
* signal.c (sys_sigvec) [SUNOS4 || FREEBSD]: Likewise.
(sys_sigaction): Likewise.
(printcontext) [SVR4]: Likewise.
(print_stack_t) [LINUX) || FREEBSD]: Likewise.
(sys_rt_sigaction) [LINUX]: Likewise.
* sock.c (sock_ioctl) [LINUX]: Likewise.
* stream.c (sys_putmsg, sys_getmsg): Likewise.
(sys_putpmsg) [SYS_putpmsg]: Likewise.
(sys_getpmsg) [SYS_getpmsg]: Likewise.
(sys_poll): Likewise.
(print_transport_message) [TI_BIND]: Likewise.
(stream_ioctl): Likewise.
* system.c (sys_mount, sys_reboot): Likewise.
(sys_cacheflush) [LINUX && M68K]: Likewise.
(sys_capget, sys_capset) [SYS_capget]: Likewise.
* term.c (term_ioctl) [TIOCMGET]: Likewise.
* time.c (sys_clock_nanosleep, sys_timer_settime) [LINUX]:
Likewise.
Fixes RH#159310.
2005-06-01 23:02:36 +04:00
printflags ( epollevents , ev - > events , " EPOLL??? " ) ;
2004-10-07 02:23:31 +04:00
/* We cannot know what format the program uses, so print u32 and u64
which will cover every value . */
tprintf ( " , {u32=% " PRIu32 " , u64=% " PRIu64 " }} " ,
ev - > data . u32 , ev - > data . u64 ) ;
}
2004-10-20 06:17:41 +04:00
# endif
2004-10-07 02:23:31 +04:00
int
2009-01-06 18:12:52 +03:00
sys_epoll_ctl ( struct tcb * tcp )
2004-10-07 02:23:31 +04:00
{
if ( entering ( tcp ) ) {
Fix decoding of file descriptors
* defs.h (printfd): New function prototype.
* util.c (printfd): New function.
* file.c (print_dirfd): Update prototype to use printfd().
(sys_openat, sys_faccessat, sys_newfstatat, sys_mkdirat, sys_linkat,
sys_unlinkat, sys_readlinkat, sys_renameat, sys_fchownat, sys_fchmodat,
sys_futimesat, sys_utimensat, sys_mknodat): Update use of print_dirfd().
(sys_lseek, sys_llseek, sys_readahead, sys_ftruncate, sys_ftruncate64,
sys_fstat, sys_fstat64, sys_oldfstat, sys_fstatfs, sys_fstatfs64,
sys_fchdir, sys_fchroot, sys_linkat, sys_fchown, sys_fchmod, sys_fsync,
sys_readdir, sys_getdents, sys_getdirentries, sys_fsetxattr,
sys_fgetxattr, sys_flistxattr, sys_fremovexattr, sys_fadvise64,
sys_fadvise64_64, sys_inotify_add_watch, sys_inotify_rm_watch,
sys_fallocate): Use printfd() for decoding of file descriptors.
* desc.c (sys_fcntl, sys_flock, sys_close, sys_dup, do_dup2,
decode_select, sys_epoll_ctl, epoll_wait_common): Use printfd() for
decoding of file descriptors.
* io.c (sys_read, sys_write, sys_readv, sys_writev, sys_pread,
sys_pwrite, sys_sendfile, sys_sendfile64, sys_pread64, sys_pwrite64,
sys_ioctl): Likewise.
* mem.c (print_mmap, sys_mmap64): Likewise.
* signal.c (do_signalfd): Likewise.
* stream.c (decode_poll): Likewise.
* time.c (sys_timerfd_settime, sys_timerfd_gettime): Likewise.
Based on patch from Grant Edwards <grant.b.edwards@gmail.com>.
2011-03-04 05:08:02 +03:00
printfd ( tcp , tcp - > u_arg [ 0 ] ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2008-12-30 21:47:55 +03:00
printxval ( epollctls , tcp - > u_arg [ 1 ] , " EPOLL_CTL_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
Fix decoding of file descriptors
* defs.h (printfd): New function prototype.
* util.c (printfd): New function.
* file.c (print_dirfd): Update prototype to use printfd().
(sys_openat, sys_faccessat, sys_newfstatat, sys_mkdirat, sys_linkat,
sys_unlinkat, sys_readlinkat, sys_renameat, sys_fchownat, sys_fchmodat,
sys_futimesat, sys_utimensat, sys_mknodat): Update use of print_dirfd().
(sys_lseek, sys_llseek, sys_readahead, sys_ftruncate, sys_ftruncate64,
sys_fstat, sys_fstat64, sys_oldfstat, sys_fstatfs, sys_fstatfs64,
sys_fchdir, sys_fchroot, sys_linkat, sys_fchown, sys_fchmod, sys_fsync,
sys_readdir, sys_getdents, sys_getdirentries, sys_fsetxattr,
sys_fgetxattr, sys_flistxattr, sys_fremovexattr, sys_fadvise64,
sys_fadvise64_64, sys_inotify_add_watch, sys_inotify_rm_watch,
sys_fallocate): Use printfd() for decoding of file descriptors.
* desc.c (sys_fcntl, sys_flock, sys_close, sys_dup, do_dup2,
decode_select, sys_epoll_ctl, epoll_wait_common): Use printfd() for
decoding of file descriptors.
* io.c (sys_read, sys_write, sys_readv, sys_writev, sys_pread,
sys_pwrite, sys_sendfile, sys_sendfile64, sys_pread64, sys_pwrite64,
sys_ioctl): Likewise.
* mem.c (print_mmap, sys_mmap64): Likewise.
* signal.c (do_signalfd): Likewise.
* stream.c (decode_poll): Likewise.
* time.c (sys_timerfd_settime, sys_timerfd_gettime): Likewise.
Based on patch from Grant Edwards <grant.b.edwards@gmail.com>.
2011-03-04 05:08:02 +03:00
printfd ( tcp , tcp - > u_arg [ 2 ] ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2004-10-07 02:23:31 +04:00
if ( tcp - > u_arg [ 3 ] = = 0 )
2011-09-01 12:00:28 +04:00
tprints ( " NULL " ) ;
2004-10-20 06:17:41 +04:00
else {
# ifdef HAVE_SYS_EPOLL_H
struct epoll_event ev ;
2004-10-20 06:17:41 +04:00
if ( umove ( tcp , tcp - > u_arg [ 3 ] , & ev ) = = 0 )
2004-10-20 06:17:41 +04:00
print_epoll_event ( & ev ) ;
else
# endif
2011-09-01 12:00:28 +04:00
tprints ( " {...} " ) ;
2004-10-20 06:17:41 +04:00
}
2004-10-07 02:23:31 +04:00
}
return 0 ;
}
2007-08-02 05:13:26 +04:00
static void
2009-01-06 18:12:52 +03:00
epoll_wait_common ( struct tcb * tcp )
2004-10-07 02:23:31 +04:00
{
Fix decoding of file descriptors
* defs.h (printfd): New function prototype.
* util.c (printfd): New function.
* file.c (print_dirfd): Update prototype to use printfd().
(sys_openat, sys_faccessat, sys_newfstatat, sys_mkdirat, sys_linkat,
sys_unlinkat, sys_readlinkat, sys_renameat, sys_fchownat, sys_fchmodat,
sys_futimesat, sys_utimensat, sys_mknodat): Update use of print_dirfd().
(sys_lseek, sys_llseek, sys_readahead, sys_ftruncate, sys_ftruncate64,
sys_fstat, sys_fstat64, sys_oldfstat, sys_fstatfs, sys_fstatfs64,
sys_fchdir, sys_fchroot, sys_linkat, sys_fchown, sys_fchmod, sys_fsync,
sys_readdir, sys_getdents, sys_getdirentries, sys_fsetxattr,
sys_fgetxattr, sys_flistxattr, sys_fremovexattr, sys_fadvise64,
sys_fadvise64_64, sys_inotify_add_watch, sys_inotify_rm_watch,
sys_fallocate): Use printfd() for decoding of file descriptors.
* desc.c (sys_fcntl, sys_flock, sys_close, sys_dup, do_dup2,
decode_select, sys_epoll_ctl, epoll_wait_common): Use printfd() for
decoding of file descriptors.
* io.c (sys_read, sys_write, sys_readv, sys_writev, sys_pread,
sys_pwrite, sys_sendfile, sys_sendfile64, sys_pread64, sys_pwrite64,
sys_ioctl): Likewise.
* mem.c (print_mmap, sys_mmap64): Likewise.
* signal.c (do_signalfd): Likewise.
* stream.c (decode_poll): Likewise.
* time.c (sys_timerfd_settime, sys_timerfd_gettime): Likewise.
Based on patch from Grant Edwards <grant.b.edwards@gmail.com>.
2011-03-04 05:08:02 +03:00
if ( entering ( tcp ) ) {
printfd ( tcp , tcp - > u_arg [ 0 ] ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
Fix decoding of file descriptors
* defs.h (printfd): New function prototype.
* util.c (printfd): New function.
* file.c (print_dirfd): Update prototype to use printfd().
(sys_openat, sys_faccessat, sys_newfstatat, sys_mkdirat, sys_linkat,
sys_unlinkat, sys_readlinkat, sys_renameat, sys_fchownat, sys_fchmodat,
sys_futimesat, sys_utimensat, sys_mknodat): Update use of print_dirfd().
(sys_lseek, sys_llseek, sys_readahead, sys_ftruncate, sys_ftruncate64,
sys_fstat, sys_fstat64, sys_oldfstat, sys_fstatfs, sys_fstatfs64,
sys_fchdir, sys_fchroot, sys_linkat, sys_fchown, sys_fchmod, sys_fsync,
sys_readdir, sys_getdents, sys_getdirentries, sys_fsetxattr,
sys_fgetxattr, sys_flistxattr, sys_fremovexattr, sys_fadvise64,
sys_fadvise64_64, sys_inotify_add_watch, sys_inotify_rm_watch,
sys_fallocate): Use printfd() for decoding of file descriptors.
* desc.c (sys_fcntl, sys_flock, sys_close, sys_dup, do_dup2,
decode_select, sys_epoll_ctl, epoll_wait_common): Use printfd() for
decoding of file descriptors.
* io.c (sys_read, sys_write, sys_readv, sys_writev, sys_pread,
sys_pwrite, sys_sendfile, sys_sendfile64, sys_pread64, sys_pwrite64,
sys_ioctl): Likewise.
* mem.c (print_mmap, sys_mmap64): Likewise.
* signal.c (do_signalfd): Likewise.
* stream.c (decode_poll): Likewise.
* time.c (sys_timerfd_settime, sys_timerfd_gettime): Likewise.
Based on patch from Grant Edwards <grant.b.edwards@gmail.com>.
2011-03-04 05:08:02 +03:00
} else {
2004-10-07 02:23:31 +04:00
if ( syserror ( tcp ) )
tprintf ( " %lx " , tcp - > u_arg [ 1 ] ) ;
else if ( tcp - > u_rval = = 0 )
2011-09-01 12:00:28 +04:00
tprints ( " {} " ) ;
2004-10-07 02:23:31 +04:00
else {
2004-10-20 06:17:41 +04:00
# ifdef HAVE_SYS_EPOLL_H
2005-06-01 23:22:06 +04:00
struct epoll_event ev , * start , * cur , * end ;
int failed = 0 ;
2011-09-01 12:00:28 +04:00
tprints ( " { " ) ;
2005-06-01 23:22:06 +04:00
start = ( struct epoll_event * ) tcp - > u_arg [ 1 ] ;
end = start + tcp - > u_rval ;
for ( cur = start ; cur < end ; + + cur ) {
if ( cur > start )
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2005-06-01 23:22:06 +04:00
if ( umove ( tcp , ( long ) cur , & ev ) = = 0 )
print_epoll_event ( & ev ) ;
else {
2011-09-01 12:00:28 +04:00
tprints ( " ? " ) ;
2005-06-01 23:22:06 +04:00
failed = 1 ;
break ;
2004-10-07 02:23:31 +04:00
}
}
2011-09-01 12:00:28 +04:00
tprints ( " } " ) ;
2005-06-01 23:22:06 +04:00
if ( failed )
tprintf ( " %#lx " , ( long ) start ) ;
# else
2011-09-01 12:00:28 +04:00
tprints ( " {...} " ) ;
2004-10-20 06:17:41 +04:00
# endif
2004-10-07 02:23:31 +04:00
}
2011-10-11 20:05:57 +04:00
tprintf ( " , %d, %d " , ( int ) tcp - > u_arg [ 2 ] , ( int ) tcp - > u_arg [ 3 ] ) ;
2004-10-07 02:23:31 +04:00
}
2007-08-02 05:13:26 +04:00
}
int
2009-01-06 18:12:52 +03:00
sys_epoll_wait ( struct tcb * tcp )
2007-08-02 05:13:26 +04:00
{
epoll_wait_common ( tcp ) ;
return 0 ;
}
int
2009-01-06 18:12:52 +03:00
sys_epoll_pwait ( struct tcb * tcp )
2007-08-02 05:13:26 +04:00
{
epoll_wait_common ( tcp ) ;
2010-04-07 03:54:18 +04:00
if ( exiting ( tcp ) ) {
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2007-08-02 05:13:26 +04:00
print_sigset ( tcp , tcp - > u_arg [ 4 ] , 0 ) ;
2010-04-07 03:54:18 +04:00
}
2004-10-07 02:23:31 +04:00
return 0 ;
}
2005-05-09 12:02:00 +04:00
int
2009-01-06 18:12:52 +03:00
sys_io_setup ( struct tcb * tcp )
2005-05-09 12:02:00 +04:00
{
if ( entering ( tcp ) )
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
else {
if ( syserror ( tcp ) )
tprintf ( " 0x%0lx " , tcp - > u_arg [ 1 ] ) ;
else {
unsigned long user_id ;
if ( umove ( tcp , tcp - > u_arg [ 1 ] , & user_id ) = = 0 )
tprintf ( " {%lu} " , user_id ) ;
else
2011-09-01 12:00:28 +04:00
tprints ( " {...} " ) ;
2005-05-09 12:02:00 +04:00
}
}
return 0 ;
}
int
2009-01-06 18:12:52 +03:00
sys_io_destroy ( struct tcb * tcp )
2005-05-09 12:02:00 +04:00
{
if ( entering ( tcp ) )
tprintf ( " %lu " , tcp - > u_arg [ 0 ] ) ;
return 0 ;
}
2011-06-21 19:11:57 +04:00
# ifdef HAVE_LIBAIO_H
2011-06-14 02:05:44 +04:00
enum iocb_sub {
SUB_NONE , SUB_COMMON , SUB_POLL , SUB_VECTOR
} ;
static const char *
iocb_cmd_lookup ( unsigned cmd , enum iocb_sub * sub )
{
2011-08-19 21:44:17 +04:00
static char buf [ sizeof ( " %u /* SUB_??? */ " ) + sizeof ( int ) * 3 ] ;
static const struct {
2011-06-14 02:05:44 +04:00
const char * name ;
enum iocb_sub sub ;
} cmds [ ] = {
{ " pread " , SUB_COMMON } ,
{ " pwrite " , SUB_COMMON } ,
{ " fsync " , SUB_NONE } ,
{ " fdsync " , SUB_NONE } ,
{ " op4 " , SUB_NONE } ,
{ " poll " , SUB_POLL } ,
{ " noop " , SUB_NONE } ,
{ " preadv " , SUB_VECTOR } ,
{ " pwritev " , SUB_VECTOR } ,
} ;
if ( cmd < ARRAY_SIZE ( cmds ) ) {
* sub = cmds [ cmd ] . sub ;
return cmds [ cmd ] . name ;
}
* sub = SUB_NONE ;
2011-08-19 21:44:17 +04:00
sprintf ( buf , " %u /* SUB_??? */ " , cmd ) ;
2011-06-14 02:05:44 +04:00
return buf ;
}
/* Not defined in libaio.h */
# ifndef IOCB_RESFD
# define IOCB_RESFD (1 << 0)
# endif
static void
print_common_flags ( struct iocb * iocb )
{
if ( iocb - > u . c . flags & IOCB_RESFD )
tprintf ( " resfd=%d, " , iocb - > u . c . resfd ) ;
if ( iocb - > u . c . flags & ~ IOCB_RESFD )
tprintf ( " flags=%x, " , iocb - > u . c . flags ) ;
}
2011-06-21 19:11:57 +04:00
# endif /* HAVE_LIBAIO_H */
2005-05-09 12:02:00 +04:00
int
2009-01-06 18:12:52 +03:00
sys_io_submit ( struct tcb * tcp )
2005-05-09 12:02:00 +04:00
{
long nr ;
if ( entering ( tcp ) ) {
tprintf ( " %lu, %ld, " , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
nr = tcp - > u_arg [ 1 ] ;
/* and if nr is negative? */
if ( nr = = 0 )
2011-09-01 12:00:28 +04:00
tprints ( " {} " ) ;
2005-05-09 12:02:00 +04:00
else {
# ifdef HAVE_LIBAIO_H
long i ;
struct iocb * iocbp , * * iocbs = ( void * ) tcp - > u_arg [ 2 ] ;
for ( i = 0 ; i < nr ; i + + , iocbs + + ) {
2011-06-14 02:05:44 +04:00
enum iocb_sub sub ;
2005-05-09 12:02:00 +04:00
struct iocb iocb ;
if ( i = = 0 )
2011-09-01 12:00:28 +04:00
tprints ( " { " ) ;
2005-05-09 12:02:00 +04:00
else
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2005-05-09 12:02:00 +04:00
if ( umove ( tcp , ( unsigned long ) iocbs , & iocbp ) | |
umove ( tcp , ( unsigned long ) iocbp , & iocb ) ) {
2011-09-01 12:00:28 +04:00
tprints ( " {...} " ) ;
2005-05-09 12:02:00 +04:00
continue ;
}
2011-09-01 12:00:28 +04:00
tprints ( " { " ) ;
2011-06-14 02:05:44 +04:00
if ( iocb . data )
tprintf ( " data:%p, " , iocb . data ) ;
if ( iocb . key )
tprintf ( " key:%u, " , iocb . key ) ;
tprintf ( " %s, " , iocb_cmd_lookup ( iocb . aio_lio_opcode , & sub ) ) ;
if ( iocb . aio_reqprio )
tprintf ( " reqprio:%d, " , iocb . aio_reqprio ) ;
tprintf ( " filedes:%d " , iocb . aio_fildes ) ;
switch ( sub ) {
case SUB_COMMON :
if ( iocb . aio_lio_opcode = = IO_CMD_PWRITE ) {
2011-09-01 12:00:28 +04:00
tprints ( " , str: " ) ;
2011-06-14 02:05:44 +04:00
printstr ( tcp , ( unsigned long ) iocb . u . c . buf ,
iocb . u . c . nbytes ) ;
} else {
tprintf ( " , buf:%p " , iocb . u . c . buf ) ;
}
tprintf ( " , nbytes:%lu, offset:%llx " ,
iocb . u . c . nbytes ,
iocb . u . c . offset ) ;
print_common_flags ( & iocb ) ;
break ;
case SUB_VECTOR :
tprintf ( " , %llx, " , iocb . u . v . offset ) ;
print_common_flags ( & iocb ) ;
tprint_iov ( tcp , iocb . u . v . nr ,
( unsigned long ) iocb . u . v . vec ,
iocb . aio_lio_opcode = = IO_CMD_PWRITEV ) ;
break ;
case SUB_POLL :
tprintf ( " , %x " , iocb . u . poll . events ) ;
break ;
case SUB_NONE :
break ;
}
2011-09-01 12:00:28 +04:00
tprints ( " } " ) ;
2005-05-09 12:02:00 +04:00
}
if ( i )
2011-09-01 12:00:28 +04:00
tprints ( " } " ) ;
2005-05-09 12:02:00 +04:00
# else
2011-06-14 02:05:44 +04:00
# warning "libaio-devel is not available => no io_submit decoding"
tprintf ( " %#lx " , tcp - > u_arg [ 2 ] ) ;
2005-05-09 12:02:00 +04:00
# endif
}
}
return 0 ;
}
int
2009-01-06 18:12:52 +03:00
sys_io_cancel ( struct tcb * tcp )
2005-05-09 12:02:00 +04:00
{
if ( entering ( tcp ) ) {
# ifdef HAVE_LIBAIO_H
struct iocb iocb ;
# endif
tprintf ( " %lu, " , tcp - > u_arg [ 0 ] ) ;
# ifdef HAVE_LIBAIO_H
if ( umove ( tcp , tcp - > u_arg [ 1 ] , & iocb ) = = 0 ) {
tprintf ( " {%p, %u, %hu, %hu, %d}, " ,
iocb . data , iocb . key ,
iocb . aio_lio_opcode ,
iocb . aio_reqprio , iocb . aio_fildes ) ;
} else
# endif
2011-09-01 12:00:28 +04:00
tprints ( " {...}, " ) ;
2005-05-09 12:02:00 +04:00
} else {
if ( tcp - > u_rval < 0 )
2011-09-01 12:00:28 +04:00
tprints ( " {...} " ) ;
2005-05-09 12:02:00 +04:00
else {
# ifdef HAVE_LIBAIO_H
struct io_event event ;
if ( umove ( tcp , tcp - > u_arg [ 2 ] , & event ) = = 0 )
tprintf ( " {%p, %p, %ld, %ld} " ,
event . data , event . obj ,
event . res , event . res2 ) ;
2009-07-08 15:21:17 +04:00
else
2005-05-09 12:02:00 +04:00
# endif
2011-09-01 12:00:28 +04:00
tprints ( " {...} " ) ;
2005-05-09 12:02:00 +04:00
}
}
return 0 ;
}
int
2009-01-06 18:12:52 +03:00
sys_io_getevents ( struct tcb * tcp )
2005-05-09 12:02:00 +04:00
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, %ld, %ld, " , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ,
tcp - > u_arg [ 2 ] ) ;
} else {
if ( tcp - > u_rval = = 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " {} " ) ;
2005-05-09 12:02:00 +04:00
} else {
# ifdef HAVE_LIBAIO_H
struct io_event * events = ( void * ) tcp - > u_arg [ 3 ] ;
long i , nr = tcp - > u_rval ;
for ( i = 0 ; i < nr ; i + + , events + + ) {
struct io_event event ;
if ( i = = 0 )
2011-09-01 12:00:28 +04:00
tprints ( " { " ) ;
2005-05-09 12:02:00 +04:00
else
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2005-05-09 12:02:00 +04:00
if ( umove ( tcp , ( unsigned long ) events , & event ) ! = 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " {...} " ) ;
2005-05-09 12:02:00 +04:00
continue ;
}
tprintf ( " {%p, %p, %ld, %ld} " , event . data ,
event . obj , event . res , event . res2 ) ;
}
2011-09-01 12:00:28 +04:00
tprints ( " }, " ) ;
2005-05-09 12:02:00 +04:00
# else
2012-02-27 16:56:59 +04:00
tprints ( " {...} " ) ;
2005-05-09 12:02:00 +04:00
# endif
}
2007-11-02 00:50:54 +03:00
print_timespec ( tcp , tcp - > u_arg [ 4 ] ) ;
2005-05-09 12:02:00 +04:00
}
return 0 ;
}
1999-02-19 03:21:36 +03:00
int
2009-01-06 18:12:52 +03:00
sys_select ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
2006-12-13 20:10:11 +03:00
return decode_select ( tcp , tcp - > u_arg , BITNESS_CURRENT ) ;
2006-10-13 Ulrich Drepper <drepper@redhat.com>
Bernhard Kaindl <bk@suse.de>
Dmitry V. Levin <ldv@altlinux.org>
Michael Holzheu <holzheu@de.ibm.com>
Add hooks for new syscalls. Add decoders for *at, inotify*,
pselect6, ppoll and unshare syscalls.
* defs.h: Declare print_sigset.
* desc.c (sys_pselect6): New function.
* file.c (decode_open, decode_access, decode_mkdir,
decode_readlink, decode_chmod, decode_utimes, decode_mknod):
New functions.
(sys_open, sys_access, sys_mkdir, sys_readlink, sys_chmod,
sys_utimes, sys_mknod): Use them.
[LINUX] (fstatatflags, unlinkatflags, inotify_modes): New
variables.
[LINUX] (print_dirfd, sys_openat, sys_faccessat,
sys_newfstatat, sys_mkdirat, sys_linkat, sys_unlinkat,
sys_symlinkat, sys_readlinkat, sys_renameat, sys_fchownat,
sys_fchmodat, sys_futimesat, sys_mknodat, sys_inotify_add_watch,
sys_inotify_rm_watch): New functions.
* process.c [LINUX] (sys_unshare): New function.
* signal.c (print_sigset): New function.
(sys_sigprocmask): Use it.
* stream.c (decode_poll): New function.
(sys_poll): Use it.
[LINUX] (sys_ppoll): New function.
* linux/syscall.h: Delcare new syscall handlers.
* linux/syscallent.h: Hook up new syscalls.
* linux/alpha/syscallent.h: Likewise.
* linux/hppa/syscallent.h: Likewise.
* linux/ia64/syscallent.h: Likewise.
* linux/mips/syscallent.h: Likewise.
* linux/powerpc/syscallent.h: Likewise.
* linux/s390/syscallent.h: Likewise.
* linux/s390x/syscallent.h: Likewise.
* linux/sparc/syscallent.h: Likewise.
* linux/sparc64/syscallent.h: Likewise.
* linux/x86_64/syscallent.h: Likewise.
Fixes RH#178633.
2006-10-14 00:25:12 +04:00
}
int
sys_pselect6 ( struct tcb * tcp )
{
2006-12-13 20:10:11 +03:00
int rc = decode_select ( tcp , tcp - > u_arg , BITNESS_CURRENT ) ;
2007-11-02 00:52:20 +03:00
if ( entering ( tcp ) ) {
2006-10-13 Ulrich Drepper <drepper@redhat.com>
Bernhard Kaindl <bk@suse.de>
Dmitry V. Levin <ldv@altlinux.org>
Michael Holzheu <holzheu@de.ibm.com>
Add hooks for new syscalls. Add decoders for *at, inotify*,
pselect6, ppoll and unshare syscalls.
* defs.h: Declare print_sigset.
* desc.c (sys_pselect6): New function.
* file.c (decode_open, decode_access, decode_mkdir,
decode_readlink, decode_chmod, decode_utimes, decode_mknod):
New functions.
(sys_open, sys_access, sys_mkdir, sys_readlink, sys_chmod,
sys_utimes, sys_mknod): Use them.
[LINUX] (fstatatflags, unlinkatflags, inotify_modes): New
variables.
[LINUX] (print_dirfd, sys_openat, sys_faccessat,
sys_newfstatat, sys_mkdirat, sys_linkat, sys_unlinkat,
sys_symlinkat, sys_readlinkat, sys_renameat, sys_fchownat,
sys_fchmodat, sys_futimesat, sys_mknodat, sys_inotify_add_watch,
sys_inotify_rm_watch): New functions.
* process.c [LINUX] (sys_unshare): New function.
* signal.c (print_sigset): New function.
(sys_sigprocmask): Use it.
* stream.c (decode_poll): New function.
(sys_poll): Use it.
[LINUX] (sys_ppoll): New function.
* linux/syscall.h: Delcare new syscall handlers.
* linux/syscallent.h: Hook up new syscalls.
* linux/alpha/syscallent.h: Likewise.
* linux/hppa/syscallent.h: Likewise.
* linux/ia64/syscallent.h: Likewise.
* linux/mips/syscallent.h: Likewise.
* linux/powerpc/syscallent.h: Likewise.
* linux/s390/syscallent.h: Likewise.
* linux/s390x/syscallent.h: Likewise.
* linux/sparc/syscallent.h: Likewise.
* linux/sparc64/syscallent.h: Likewise.
* linux/x86_64/syscallent.h: Likewise.
Fixes RH#178633.
2006-10-14 00:25:12 +04:00
struct {
void * ss ;
unsigned long len ;
} data ;
if ( umove ( tcp , tcp - > u_arg [ 5 ] , & data ) < 0 )
tprintf ( " , %#lx " , tcp - > u_arg [ 5 ] ) ;
else {
2011-09-01 12:00:28 +04:00
tprints ( " , { " ) ;
2007-11-02 00:52:20 +03:00
if ( data . len < sizeof ( long ) )
2006-10-13 Ulrich Drepper <drepper@redhat.com>
Bernhard Kaindl <bk@suse.de>
Dmitry V. Levin <ldv@altlinux.org>
Michael Holzheu <holzheu@de.ibm.com>
Add hooks for new syscalls. Add decoders for *at, inotify*,
pselect6, ppoll and unshare syscalls.
* defs.h: Declare print_sigset.
* desc.c (sys_pselect6): New function.
* file.c (decode_open, decode_access, decode_mkdir,
decode_readlink, decode_chmod, decode_utimes, decode_mknod):
New functions.
(sys_open, sys_access, sys_mkdir, sys_readlink, sys_chmod,
sys_utimes, sys_mknod): Use them.
[LINUX] (fstatatflags, unlinkatflags, inotify_modes): New
variables.
[LINUX] (print_dirfd, sys_openat, sys_faccessat,
sys_newfstatat, sys_mkdirat, sys_linkat, sys_unlinkat,
sys_symlinkat, sys_readlinkat, sys_renameat, sys_fchownat,
sys_fchmodat, sys_futimesat, sys_mknodat, sys_inotify_add_watch,
sys_inotify_rm_watch): New functions.
* process.c [LINUX] (sys_unshare): New function.
* signal.c (print_sigset): New function.
(sys_sigprocmask): Use it.
* stream.c (decode_poll): New function.
(sys_poll): Use it.
[LINUX] (sys_ppoll): New function.
* linux/syscall.h: Delcare new syscall handlers.
* linux/syscallent.h: Hook up new syscalls.
* linux/alpha/syscallent.h: Likewise.
* linux/hppa/syscallent.h: Likewise.
* linux/ia64/syscallent.h: Likewise.
* linux/mips/syscallent.h: Likewise.
* linux/powerpc/syscallent.h: Likewise.
* linux/s390/syscallent.h: Likewise.
* linux/s390x/syscallent.h: Likewise.
* linux/sparc/syscallent.h: Likewise.
* linux/sparc64/syscallent.h: Likewise.
* linux/x86_64/syscallent.h: Likewise.
Fixes RH#178633.
2006-10-14 00:25:12 +04:00
tprintf ( " %#lx " , ( long ) data . ss ) ;
else
print_sigset ( tcp , ( long ) data . ss , 0 ) ;
tprintf ( " , %lu} " , data . len ) ;
}
}
return rc ;
1999-02-19 03:21:36 +03:00
}
2007-08-02 05:32:17 +04:00
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
static int
do_eventfd ( struct tcb * tcp , int flags_arg )
2007-08-02 05:32:17 +04:00
{
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
if ( entering ( tcp ) ) {
2007-08-02 05:32:17 +04:00
tprintf ( " %lu " , tcp - > u_arg [ 0 ] ) ;
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
if ( flags_arg > = 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
printflags ( open_mode_flags , tcp - > u_arg [ flags_arg ] , " O_??? " ) ;
}
}
2007-08-02 05:32:17 +04:00
return 0 ;
}
2008-10-23 Dmitry V. Levin <ldv@altlinux.org>
Implement parsers for new linux syscalls.
* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
(sys_dup2): Use do_dup2.
[LINUX] (sys_epoll_create1): New function.
[LINUX] (do_eventfd, sys_eventfd2): New functions.
[LINUX] (sys_eventfd): Use do_eventfd.
* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
(sys_pipe): Use do_pipe.
* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
[LINUX] (sys_signalfd): Use do_signalfd.
* linux/syscall.h: Declare new sys_* functions.
* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
dup3, pipe2, inotify_init1.
* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
epoll_create1, dup3, pipe2, inotify_init1.
2008-11-11 01:53:02 +03:00
int
sys_eventfd ( struct tcb * tcp )
{
return do_eventfd ( tcp , - 1 ) ;
}
int
sys_eventfd2 ( struct tcb * tcp )
{
return do_eventfd ( tcp , 1 ) ;
}