1999-02-19 00:21:36 +00: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 14:20:14 +00:00
* Copyright ( c ) 1996 - 1999 Wichert Akkerman < wichert @ cistron . nl >
1999-02-19 00:21:36 +00: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 .
*/
# include "defs.h"
# include <fcntl.h>
# include <sys/file.h>
2004-10-20 02:17:41 +00:00
# ifdef HAVE_SYS_EPOLL_H
2012-03-16 12:02:22 +01:00
# include <sys / epoll.h>
2004-10-06 22:23:31 +00:00
# endif
2013-02-04 00:04:57 +01:00
# ifdef HAVE_LINUX_PERF_EVENT_H
# include <linux / perf_event.h>
# endif
1999-02-19 00:21:36 +00:00
2014-04-25 23:30:54 +00:00
# include "xlat/fcntlcmds.h"
# include "xlat/fdflags.h"
# include "xlat/flockcmds.h"
# include "xlat/lockfcmds.h"
# include "xlat/notifyflags.h"
# include "xlat/perf_event_open_flags.h"
2013-02-04 00:04:57 +01:00
2014-03-03 23:09:47 +00:00
/*
* Assume that F_SETLK64 , F_SETLKW64 , and F_GETLK64 are either defined
* or not defined altogether .
*/
2013-11-12 21:49:03 +00:00
# if defined(F_SETLK64) && F_SETLK64 + 0 != F_SETLK
2014-03-03 23:09:47 +00:00
# define USE_PRINTFLOCK64 1
2013-11-12 21:49:03 +00:00
# else
2014-03-03 23:09:47 +00:00
# define USE_PRINTFLOCK64 0
2013-11-12 21:49:03 +00:00
# endif
2014-03-03 23:09:47 +00:00
# if USE_PRINTFLOCK64
2013-11-12 21:49:03 +00:00
2014-03-03 23:09:47 +00:00
# ifndef HAVE_STRUCT_FLOCK64
2013-11-12 21:49:03 +00:00
struct flock64 {
short int l_type , l_whence ;
int64_t l_start , l_len ;
int l_pid ;
} ;
2014-03-03 23:09:47 +00:00
# endif
2013-11-12 21:49:03 +00:00
2013-05-01 16:37:08 +00:00
static void
printflock64 ( struct tcb * tcp , long addr , int getlk )
{
struct flock64 fl ;
if ( umove ( tcp , addr , & fl ) < 0 ) {
tprints ( " {...} " ) ;
return ;
}
tprints ( " {type= " ) ;
printxval ( lockfcmds , fl . l_type , " F_??? " ) ;
tprints ( " , whence= " ) ;
printxval ( whence_codes , fl . l_whence , " SEEK_??? " ) ;
tprintf ( " , start=%lld, len=%lld " , ( long long ) fl . l_start , ( long long ) fl . l_len ) ;
if ( getlk )
tprintf ( " , pid=%lu} " , ( unsigned long ) fl . l_pid ) ;
else
tprints ( " } " ) ;
}
2014-03-03 23:09:47 +00:00
# endif /* USE_PRINTFLOCK64 */
2013-05-01 16:37:08 +00:00
1999-02-19 00:21:36 +00:00
static void
2009-01-06 15:12:52 +00:00
printflock ( struct tcb * tcp , long addr , int getlk )
1999-02-19 00:21:36 +00:00
{
struct flock fl ;
2014-03-03 23:09:47 +00:00
int r ;
1999-02-19 00:21:36 +00:00
2009-04-15 13:22:59 +00:00
# if SUPPORTED_PERSONALITIES > 1
2014-03-03 23:09:47 +00:00
if (
# if SIZEOF_OFF_T > SIZEOF_LONG
current_personality > 0 & &
# endif
current_wordsize ! = sizeof ( fl . l_start ) ) {
2012-03-19 09:36:42 +01:00
if ( current_wordsize = = 4 ) {
2009-04-15 13:22:59 +00:00
/* 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 ;
2014-03-03 23:09:47 +00:00
r = umove ( tcp , addr , & fl32 ) ;
if ( r > = 0 ) {
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 ;
2009-04-15 13:22:59 +00:00
}
} else {
/* let people know we have a problem here */
2013-02-08 15:34:46 +01:00
tprintf ( " <decode error: unsupported wordsize %d> " ,
2012-03-19 09:36:42 +01:00
current_wordsize ) ;
2009-01-06 15:12:52 +00:00
return ;
}
2009-04-15 13:22:59 +00:00
} else
# endif
{
2014-03-03 23:09:47 +00:00
r = umove ( tcp , addr , & fl ) ;
}
if ( r < 0 ) {
tprints ( " {...} " ) ;
return ;
1999-02-19 00:21:36 +00:00
}
2011-09-01 10:00:28 +02:00
tprints ( " {type= " ) ;
1999-02-19 00:21:36 +00:00
printxval ( lockfcmds , fl . l_type , " F_??? " ) ;
2011-09-01 10:00:28 +02:00
tprints ( " , whence= " ) ;
2013-02-17 14:31:55 +01:00
printxval ( whence_codes , fl . l_whence , " SEEK_??? " ) ;
2014-03-03 23:09:47 +00:00
# if SIZEOF_OFF_T > SIZEOF_LONG
2013-05-01 16:37:08 +00:00
tprintf ( " , start=%lld, len=%lld " , fl . l_start , fl . l_len ) ;
# else
1999-02-19 00:21:36 +00:00
tprintf ( " , start=%ld, len=%ld " , fl . l_start , fl . l_len ) ;
2013-05-01 16:37:08 +00:00
# endif
1999-02-19 00:21:36 +00:00
if ( getlk )
tprintf ( " , pid=%lu} " , ( unsigned long ) fl . l_pid ) ;
else
2011-09-01 10:00:28 +02:00
tprints ( " } " ) ;
1999-02-19 00:21:36 +00:00
}
2015-04-07 01:36:50 +00:00
SYS_FUNC ( fcntl )
2007-01-11 23:19:55 +00:00
{
1999-02-19 00:21:36 +00: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 10:00:28 +02:00
tprints ( " , " ) ;
1999-02-19 00:21:36 +00:00
printxval ( fcntlcmds , tcp - > u_arg [ 1 ] , " F_??? " ) ;
switch ( tcp - > u_arg [ 1 ] ) {
case F_SETFD :
2011-09-01 10:00:28 +02: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 19:02:36 +00:00
printflags ( fdflags , tcp - > u_arg [ 2 ] , " FD_??? " ) ;
1999-02-19 00:21:36 +00:00
break ;
case F_SETOWN : case F_DUPFD :
2009-03-10 20:41:58 +00:00
# ifdef F_DUPFD_CLOEXEC
case F_DUPFD_CLOEXEC :
# endif
1999-02-19 00:21:36 +00:00
tprintf ( " , %ld " , tcp - > u_arg [ 2 ] ) ;
break ;
case F_SETFL :
2011-09-01 10:00:28 +02:00
tprints ( " , " ) ;
2009-03-10 20:41:58 +00:00
tprint_open_modes ( tcp - > u_arg [ 2 ] ) ;
1999-02-19 00:21:36 +00:00
break ;
case F_SETLK : case F_SETLKW :
2011-09-01 10:00:28 +02:00
tprints ( " , " ) ;
1999-02-19 00:21:36 +00:00
printflock ( tcp , tcp - > u_arg [ 2 ] , 0 ) ;
break ;
2014-03-03 23:09:47 +00:00
# if USE_PRINTFLOCK64
case F_SETLK64 : case F_SETLKW64 :
2011-09-01 10:00:28 +02:00
tprints ( " , " ) ;
2001-03-06 15:08:09 +00:00
printflock64 ( tcp , tcp - > u_arg [ 2 ] , 0 ) ;
break ;
2014-03-03 23:09:47 +00:00
# endif /* USE_PRINTFLOCK64 */
2009-03-10 20:41:58 +00:00
# ifdef F_NOTIFY
case F_NOTIFY :
2011-09-01 10:00:28 +02:00
tprints ( " , " ) ;
2009-03-10 20:41:58 +00:00
printflags ( notifyflags , tcp - > u_arg [ 2 ] , " DN_??? " ) ;
break ;
# endif
# ifdef F_SETLEASE
case F_SETLEASE :
2011-09-01 10:00:28 +02:00
tprints ( " , " ) ;
2009-03-10 20:41:58 +00:00
printxval ( lockfcmds , tcp - > u_arg [ 2 ] , " F_??? " ) ;
break ;
2001-03-06 15:08:09 +00:00
# endif
2009-02-27 20:32:52 +00:00
}
1999-02-19 00:21:36 +00:00
}
else {
switch ( tcp - > u_arg [ 1 ] ) {
case F_DUPFD :
2009-03-10 20:41:58 +00:00
# ifdef F_DUPFD_CLOEXEC
case F_DUPFD_CLOEXEC :
# endif
1999-02-19 00:21:36 +00:00
case F_SETFD : case F_SETFL :
case F_SETLK : case F_SETLKW :
case F_SETOWN : case F_GETOWN :
2009-03-10 20:41:58 +00:00
# ifdef F_NOTIFY
case F_NOTIFY :
# endif
# ifdef F_SETLEASE
case F_SETLEASE :
# endif
1999-02-19 00:21:36 +00:00
break ;
case F_GETFD :
2008-09-03 01:22:18 +00:00
if ( syserror ( tcp ) | | tcp - > u_rval = = 0 )
1999-02-19 00:21:36 +00:00
return 0 ;
2009-03-10 20:41:58 +00:00
tcp - > auxstr = sprintflags ( " flags " , fdflags , tcp - > u_rval ) ;
1999-02-19 00:21:36 +00:00
return RVAL_HEX | RVAL_STR ;
case F_GETFL :
2008-09-03 01:22:18 +00:00
if ( syserror ( tcp ) )
return 0 ;
2007-01-11 23:19:55 +00:00
tcp - > auxstr = sprint_open_modes ( tcp - > u_rval ) ;
1999-02-19 00:21:36 +00:00
return RVAL_HEX | RVAL_STR ;
case F_GETLK :
2011-09-01 10:00:28 +02:00
tprints ( " , " ) ;
1999-02-19 00:21:36 +00:00
printflock ( tcp , tcp - > u_arg [ 2 ] , 1 ) ;
break ;
2014-03-03 23:09:47 +00:00
# if USE_PRINTFLOCK64
2001-03-06 15:08:09 +00:00
case F_GETLK64 :
2011-09-01 10:00:28 +02:00
tprints ( " , " ) ;
2001-03-06 15:08:09 +00:00
printflock64 ( tcp , tcp - > u_arg [ 2 ] , 1 ) ;
break ;
2009-03-10 20:41:58 +00: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 15:08:09 +00:00
# endif
2009-02-27 20:32:52 +00:00
default :
1999-02-19 00:21:36 +00:00
tprintf ( " , %#lx " , tcp - > u_arg [ 2 ] ) ;
break ;
}
}
return 0 ;
}
# ifdef LOCK_SH
2015-04-07 01:36:50 +00:00
SYS_FUNC ( flock )
1999-02-19 00:21:36 +00: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 10:00:28 +02: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 19:02:36 +00:00
printflags ( flockcmds , tcp - > u_arg [ 1 ] , " LOCK_??? " ) ;
1999-02-19 00:21:36 +00:00
}
return 0 ;
}
# endif /* LOCK_SH */
2015-04-07 01:36:50 +00:00
SYS_FUNC ( close )
1999-02-19 00:21:36 +00: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 00:21:36 +00:00
}
return 0 ;
}
2015-04-07 01:36:50 +00:00
SYS_FUNC ( dup )
2014-06-04 08:30:41 +05:30
{
if ( entering ( tcp ) ) {
printfd ( tcp , tcp - > u_arg [ 0 ] ) ;
}
return RVAL_FD ;
}
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-10 22:53:02 +00:00
static int
do_dup2 ( struct tcb * tcp , int flags_arg )
1999-02-19 00:21:36 +00: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 10:00:28 +02: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-10 22:53:02 +00:00
if ( flags_arg > = 0 ) {
2011-09-01 10:00:28 +02: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-10 22:53:02 +00:00
printflags ( open_mode_flags , tcp - > u_arg [ flags_arg ] , " O_??? " ) ;
}
1999-02-19 00:21:36 +00:00
}
2014-06-04 08:30:41 +05:30
return RVAL_FD ;
1999-02-19 00:21:36 +00:00
}
2015-04-07 01:36:50 +00:00
SYS_FUNC ( dup2 )
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-10 22:53:02 +00:00
{
return do_dup2 ( tcp , - 1 ) ;
}
2015-04-07 01:36:50 +00:00
SYS_FUNC ( dup3 )
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-10 22:53:02 +00:00
{
return do_dup2 ( tcp , 2 ) ;
}
2012-02-25 02:38:52 +01:00
# if defined(ALPHA)
2015-04-07 01:36:50 +00:00
SYS_FUNC ( getdtablesize )
1999-02-19 00:21:36 +00:00
{
return 0 ;
}
2012-02-25 02:38:52 +01:00
# endif
1999-02-19 00:21:36 +00:00
static int
2006-12-13 17:10:11 +00:00
decode_select ( struct tcb * tcp , long * args , enum bitness_t bitness )
1999-02-19 00:21:36 +00:00
{
2011-09-01 18:18:04 +02:00
int i , j ;
2013-11-05 16:20:16 +01:00
int nfds , fdsize ;
2014-09-09 22:42:12 +00:00
fd_set * fds = NULL ;
2010-09-06 22:08:24 +00:00
const char * sep ;
1999-02-19 00:21:36 +00:00
long arg ;
2013-11-05 22:46:43 +00:00
/* Kernel truncates arg[0] to int, we do the same. */
nfds = ( int ) args [ 0 ] ;
/* Kernel rejects negative nfds, so we don't parse it either. */
2014-09-09 22:42:12 +00:00
if ( nfds < 0 )
2013-11-05 22:46:43 +00:00
nfds = 0 ;
2014-09-09 22:42:12 +00:00
2011-09-01 16:35:44 +02:00
/* Beware of select(2^31-1, NULL, NULL, NULL) and similar... */
2013-11-05 22:46:43 +00:00
if ( nfds > 1024 * 1024 )
nfds = 1024 * 1024 ;
/*
* We had bugs a - la " while (j < args[0]) " and " umoven(args[0]) " below .
2013-11-05 11:54:51 +01:00
* Instead of args [ 0 ] , use nfds for fd count , fdsize for array lengths .
*/
2013-11-09 20:40:31 +01:00
fdsize = ( ( ( nfds + 7 ) / 8 ) + current_wordsize - 1 ) & - current_wordsize ;
2011-09-01 16:35:44 +02:00
1999-02-19 00:21:36 +00:00
if ( entering ( tcp ) ) {
2013-11-05 22:46:43 +00:00
tprintf ( " %d " , ( int ) args [ 0 ] ) ;
Introduce memory allocation wrappers
Introduce wrappers to the following functions that do memory allocation:
malloc, calloc, realloc, strdup.
This commit is a follow-up to the related discussions in strace-devel ML:
http://sourceforge.net/p/strace/mailman/message/33618180/
http://sourceforge.net/p/strace/mailman/message/33733470/
* defs.h (xmalloc, xcalloc, xreallocarray, xstrdup): New prototypes.
* xmalloc.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* count.c (count_syscall, call_summary_pers): Use xcalloc.
* desc.c (decode_select): Use xmalloc.
* dirent.c (sys_getdents, sys_getdents64): Likewise.
* net.c (sys_recvmmsg): Use xstrdup.
* pathtrace.c (storepath): Use xreallocarray.
(pathtrace_match): Use xmalloc.
* strace.c (die_out_of_memory): Move to xmalloc.c.
(expand_tcbtab): Use xcalloc and xreallocarray.
(startup_child): Use xstrdup.
(init): Use xmalloc, xcalloc, and xstrdup.
* syscall.c (reallocate_qual): Use xreallocarray.
(qualify): Use xstrdup.
* unwind.c (unwind_tcb_init): Use xmalloc.
(build_mmap_cache): Use xcalloc, xreallocarray, and xstrdup.
(get_symbol_name): Use xreallocarray.
(stacktrace_walk, queue_put): Use xmalloc.
* util.c (printstr): Use xmalloc.
* vsprintf.c (strace_vfprintf): Likewise.
2015-05-25 20:41:02 +00:00
if ( verbose ( tcp ) & & fdsize > 0 )
fds = xmalloc ( fdsize ) ;
1999-02-19 00:21:36 +00:00
for ( i = 0 ; i < 3 ; i + + ) {
arg = args [ i + 1 ] ;
if ( arg = = 0 ) {
2011-09-01 10:00:28 +02:00
tprints ( " , NULL " ) ;
1999-02-19 00:21:36 +00:00
continue ;
}
2015-01-28 01:26:04 +00:00
if ( ! fds ) {
1999-02-19 00:21:36 +00:00
tprintf ( " , %#lx " , arg ) ;
continue ;
}
2015-03-21 19:50:53 +01:00
if ( umoven ( tcp , arg , fdsize , fds ) < 0 ) {
2011-09-01 10:00:28 +02:00
tprints ( " , [?] " ) ;
1999-02-19 00:21:36 +00:00
continue ;
}
2011-09-01 10:00:28 +02:00
tprints ( " , [ " ) ;
2013-11-09 20:40:31 +01:00
for ( j = 0 , sep = " " ; ; j + + ) {
j = next_set_bit ( fds , j , nfds ) ;
if ( j < 0 )
break ;
tprints ( sep ) ;
printfd ( tcp , j ) ;
sep = " " ;
1999-02-19 00:21:36 +00:00
}
2011-09-01 10:00:28 +02:00
tprints ( " ] " ) ;
1999-02-19 00:21:36 +00:00
}
2005-02-06 01:55:12 +00:00
free ( fds ) ;
2011-09-01 10:00:28 +02:00
tprints ( " , " ) ;
2007-07-24 01:57:11 +00:00
printtv_bitness ( tcp , args [ 4 ] , bitness , 0 ) ;
1999-02-19 00:21:36 +00:00
}
2011-06-22 14:32:43 +02:00
else {
2011-08-31 12:26:03 +02:00
static char outstr [ 1024 ] ;
char * outptr ;
# define end_outstr (outstr + sizeof(outstr))
2013-11-05 22:46:43 +00:00
int ready_fds ;
1999-02-19 00:21:36 +00:00
if ( syserror ( tcp ) )
return 0 ;
2013-11-05 11:54:51 +01:00
ready_fds = tcp - > u_rval ;
if ( ready_fds = = 0 ) {
1999-02-19 00:21:36 +00:00
tcp - > auxstr = " Timeout " ;
return RVAL_STR ;
}
2005-02-06 01:55:12 +00:00
Introduce memory allocation wrappers
Introduce wrappers to the following functions that do memory allocation:
malloc, calloc, realloc, strdup.
This commit is a follow-up to the related discussions in strace-devel ML:
http://sourceforge.net/p/strace/mailman/message/33618180/
http://sourceforge.net/p/strace/mailman/message/33733470/
* defs.h (xmalloc, xcalloc, xreallocarray, xstrdup): New prototypes.
* xmalloc.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* count.c (count_syscall, call_summary_pers): Use xcalloc.
* desc.c (decode_select): Use xmalloc.
* dirent.c (sys_getdents, sys_getdents64): Likewise.
* net.c (sys_recvmmsg): Use xstrdup.
* pathtrace.c (storepath): Use xreallocarray.
(pathtrace_match): Use xmalloc.
* strace.c (die_out_of_memory): Move to xmalloc.c.
(expand_tcbtab): Use xcalloc and xreallocarray.
(startup_child): Use xstrdup.
(init): Use xmalloc, xcalloc, and xstrdup.
* syscall.c (reallocate_qual): Use xreallocarray.
(qualify): Use xstrdup.
* unwind.c (unwind_tcb_init): Use xmalloc.
(build_mmap_cache): Use xcalloc, xreallocarray, and xstrdup.
(get_symbol_name): Use xreallocarray.
(stacktrace_walk, queue_put): Use xmalloc.
* util.c (printstr): Use xmalloc.
* vsprintf.c (strace_vfprintf): Likewise.
2015-05-25 20:41:02 +00:00
fds = xmalloc ( fdsize ) ;
2005-02-06 01:55:12 +00:00
2011-08-31 12:26:03 +02:00
outptr = outstr ;
sep = " " ;
2013-11-05 22:46:43 +00:00
for ( i = 0 ; i < 3 & & ready_fds > 0 ; i + + ) {
1999-02-19 00:21:36 +00:00
int first = 1 ;
arg = args [ i + 1 ] ;
2015-03-21 19:50:53 +01:00
if ( ! arg | | umoven ( tcp , arg , fdsize , fds ) < 0 )
1999-02-19 00:21:36 +00:00
continue ;
2013-11-09 20:40:31 +01:00
for ( j = 0 ; ; j + + ) {
j = next_set_bit ( fds , j , nfds ) ;
if ( j < 0 )
break ;
/* +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 00:21:36 +00:00
}
}
2013-11-09 20:40:31 +01:00
if ( - - ready_fds = = 0 )
break ;
1999-02-19 00:21:36 +00:00
}
2011-08-31 12:26:03 +02:00
if ( outptr ! = outstr )
* outptr + + = ' ] ' ;
1999-02-19 00:21:36 +00:00
}
2005-02-06 01:55:12 +00:00
free ( fds ) ;
1999-02-19 00:21:36 +00:00
/* This contains no useful information on SunOS. */
if ( args [ 4 ] ) {
2012-01-20 11:04:04 +01:00
if ( outptr < end_outstr - ( 10 + TIMEVAL_TEXT_BUFSIZE ) ) {
2011-08-31 12:26:03 +02:00
outptr + = sprintf ( outptr , " %sleft " , sep ) ;
2012-01-20 11:04:04 +01:00
outptr = sprinttv ( outptr , tcp , args [ 4 ] , bitness , /*special:*/ 0 ) ;
2011-08-31 12:26:03 +02:00
}
1999-02-19 00:21:36 +00:00
}
2011-08-31 12:26:03 +02:00
* outptr = ' \0 ' ;
2011-09-01 11:27:37 +02:00
tcp - > auxstr = outstr ;
1999-02-19 00:21:36 +00:00
return RVAL_STR ;
2011-08-31 12:26:03 +02:00
# undef end_outstr
1999-02-19 00:21:36 +00:00
}
return 0 ;
}
2015-04-07 01:36:50 +00:00
SYS_FUNC ( oldselect )
1999-02-19 00:21:36 +00:00
{
long args [ 5 ] ;
2015-03-21 19:50:53 +01:00
if ( umoven ( tcp , tcp - > u_arg [ 0 ] , sizeof args , args ) < 0 ) {
2011-09-01 10:00:28 +02:00
tprints ( " [...] " ) ;
1999-02-19 00:21:36 +00:00
return 0 ;
}
2006-12-13 17:10:11 +00:00
return decode_select ( tcp , args , BITNESS_CURRENT ) ;
1999-02-19 00:21:36 +00:00
}
1999-11-18 17:09:47 +00:00
# ifdef ALPHA
2015-04-07 01:36:50 +00:00
SYS_FUNC ( osf_select )
1999-11-18 17:09:47 +00:00
{
long * args = tcp - > u_arg ;
2006-12-13 17:10:11 +00:00
return decode_select ( tcp , args , BITNESS_32 ) ;
1999-11-18 17:09:47 +00:00
}
# endif
2014-04-25 23:30:54 +00:00
# include "xlat/epollctls.h"
# include "xlat/epollevents.h"
2014-04-26 18:10:19 +00:00
# include "xlat/epollflags.h"
2004-10-06 22:23:31 +00:00
2012-02-27 14:18:02 +01:00
/* Not aliased to printargs_ld: we want it to have a distinct address */
2015-04-07 01:36:50 +00:00
SYS_FUNC ( epoll_create )
2004-10-06 22:23:31 +00:00
{
2012-02-27 14:18:02 +01:00
return printargs_ld ( tcp ) ;
2004-10-06 22:23:31 +00:00
}
2015-04-07 01:36:50 +00:00
SYS_FUNC ( epoll_create1 )
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-10 22:53:02 +00:00
{
if ( entering ( tcp ) )
2011-10-13 22: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-10 22:53:02 +00:00
return 0 ;
}
2004-10-20 02:17:41 +00:00
# ifdef HAVE_SYS_EPOLL_H
2004-10-06 22:23:31 +00:00
static void
2009-01-06 15:12:52 +00:00
print_epoll_event ( struct epoll_event * ev )
2004-10-06 22:23:31 +00:00
{
2011-09-01 10:00:28 +02: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 19:02:36 +00:00
printflags ( epollevents , ev - > events , " EPOLL??? " ) ;
2004-10-06 22:23:31 +00: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 02:17:41 +00:00
# endif
2004-10-06 22:23:31 +00:00
2015-04-07 01:36:50 +00:00
SYS_FUNC ( epoll_ctl )
2004-10-06 22:23:31 +00: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 10:00:28 +02:00
tprints ( " , " ) ;
2008-12-30 18:47:55 +00:00
printxval ( epollctls , tcp - > u_arg [ 1 ] , " EPOLL_CTL_??? " ) ;
2011-09-01 10:00:28 +02: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 10:00:28 +02:00
tprints ( " , " ) ;
2004-10-06 22:23:31 +00:00
if ( tcp - > u_arg [ 3 ] = = 0 )
2011-09-01 10:00:28 +02:00
tprints ( " NULL " ) ;
2004-10-20 02:17:41 +00:00
else {
# ifdef HAVE_SYS_EPOLL_H
struct epoll_event ev ;
2014-04-17 14:33:59 +00:00
if (
# ifdef EPOLL_CTL_DEL
( tcp - > u_arg [ 1 ] ! = EPOLL_CTL_DEL ) & &
# endif
umove ( tcp , tcp - > u_arg [ 3 ] , & ev ) = = 0 )
2004-10-20 02:17:41 +00:00
print_epoll_event ( & ev ) ;
else
# endif
2014-04-17 14:33:59 +00:00
tprintf ( " %lx " , tcp - > u_arg [ 3 ] ) ;
2004-10-20 02:17:41 +00:00
}
2004-10-06 22:23:31 +00:00
}
return 0 ;
}
2007-08-02 01:13:26 +00:00
static void
2009-01-06 15:12:52 +00:00
epoll_wait_common ( struct tcb * tcp )
2004-10-06 22:23:31 +00: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 10:00:28 +02: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-06 22:23:31 +00:00
if ( syserror ( tcp ) )
tprintf ( " %lx " , tcp - > u_arg [ 1 ] ) ;
else if ( tcp - > u_rval = = 0 )
2011-09-01 10:00:28 +02:00
tprints ( " {} " ) ;
2004-10-06 22:23:31 +00:00
else {
2004-10-20 02:17:41 +00:00
# ifdef HAVE_SYS_EPOLL_H
2005-06-01 19:22:06 +00:00
struct epoll_event ev , * start , * cur , * end ;
int failed = 0 ;
2011-09-01 10:00:28 +02:00
tprints ( " { " ) ;
2005-06-01 19:22:06 +00: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 10:00:28 +02:00
tprints ( " , " ) ;
2005-06-01 19:22:06 +00:00
if ( umove ( tcp , ( long ) cur , & ev ) = = 0 )
print_epoll_event ( & ev ) ;
else {
2011-09-01 10:00:28 +02:00
tprints ( " ? " ) ;
2005-06-01 19:22:06 +00:00
failed = 1 ;
break ;
2004-10-06 22:23:31 +00:00
}
}
2011-09-01 10:00:28 +02:00
tprints ( " } " ) ;
2005-06-01 19:22:06 +00:00
if ( failed )
tprintf ( " %#lx " , ( long ) start ) ;
# else
2011-09-01 10:00:28 +02:00
tprints ( " {...} " ) ;
2004-10-20 02:17:41 +00:00
# endif
2004-10-06 22:23:31 +00:00
}
2011-10-11 16:05:57 +00:00
tprintf ( " , %d, %d " , ( int ) tcp - > u_arg [ 2 ] , ( int ) tcp - > u_arg [ 3 ] ) ;
2004-10-06 22:23:31 +00:00
}
2007-08-02 01:13:26 +00:00
}
2015-04-07 01:36:50 +00:00
SYS_FUNC ( epoll_wait )
2007-08-02 01:13:26 +00:00
{
epoll_wait_common ( tcp ) ;
return 0 ;
}
2015-04-07 01:36:50 +00:00
SYS_FUNC ( epoll_pwait )
2007-08-02 01:13:26 +00:00
{
epoll_wait_common ( tcp ) ;
2010-04-06 23:54:18 +00:00
if ( exiting ( tcp ) ) {
2011-09-01 10:00:28 +02:00
tprints ( " , " ) ;
2013-07-18 17:02:21 +02:00
/* NB: kernel requires arg[5] == NSIG / 8 */
print_sigset_addr_len ( tcp , tcp - > u_arg [ 4 ] , tcp - > u_arg [ 5 ] ) ;
tprintf ( " , %lu " , tcp - > u_arg [ 5 ] ) ;
2010-04-06 23:54:18 +00:00
}
2004-10-06 22:23:31 +00:00
return 0 ;
}
2005-05-09 08:02:00 +00:00
2015-04-07 01:36:50 +00:00
SYS_FUNC ( select )
1999-02-19 00:21:36 +00:00
{
2006-12-13 17:10:11 +00: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-13 20:25:12 +00:00
}
2015-04-07 01:36:50 +00:00
SYS_FUNC ( pselect6 )
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-13 20:25:12 +00:00
{
2006-12-13 17:10:11 +00:00
int rc = decode_select ( tcp , tcp - > u_arg , BITNESS_CURRENT ) ;
2007-11-01 21:52:20 +00:00
if ( entering ( tcp ) ) {
2013-07-18 18:10:13 +02:00
long r ;
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-13 20:25:12 +00:00
struct {
2013-07-18 18:10:13 +02:00
unsigned long ptr ;
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-13 20:25:12 +00:00
unsigned long len ;
} data ;
2013-07-18 18:10:13 +02:00
# if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
if ( current_wordsize = = 4 ) {
struct {
uint32_t ptr ;
uint32_t len ;
} data32 ;
r = umove ( tcp , tcp - > u_arg [ 5 ] , & data32 ) ;
data . ptr = data32 . ptr ;
data . len = data32 . len ;
} else
# endif
r = umove ( tcp , tcp - > u_arg [ 5 ] , & data ) ;
if ( r < 0 )
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-13 20:25:12 +00:00
tprintf ( " , %#lx " , tcp - > u_arg [ 5 ] ) ;
else {
2011-09-01 10:00:28 +02:00
tprints ( " , { " ) ;
2013-07-18 17:02:21 +02:00
/* NB: kernel requires data.len == NSIG / 8 */
2013-07-18 18:10:13 +02:00
print_sigset_addr_len ( tcp , data . ptr , data . len ) ;
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-13 20:25:12 +00:00
tprintf ( " , %lu} " , data . len ) ;
}
}
return rc ;
1999-02-19 00:21:36 +00:00
}
2007-08-02 01:32:17 +00: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-10 22:53:02 +00:00
static int
do_eventfd ( struct tcb * tcp , int flags_arg )
2007-08-02 01:32:17 +00: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-10 22:53:02 +00:00
if ( entering ( tcp ) ) {
2007-08-02 01:32:17 +00: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-10 22:53:02 +00:00
if ( flags_arg > = 0 ) {
2011-09-01 10:00:28 +02: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-10 22:53:02 +00:00
printflags ( open_mode_flags , tcp - > u_arg [ flags_arg ] , " O_??? " ) ;
}
}
2007-08-02 01:32:17 +00: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-10 22:53:02 +00:00
2015-04-07 01:36:50 +00:00
SYS_FUNC ( eventfd )
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-10 22:53:02 +00:00
{
return do_eventfd ( tcp , - 1 ) ;
}
2015-04-07 01:36:50 +00:00
SYS_FUNC ( eventfd2 )
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-10 22:53:02 +00:00
{
return do_eventfd ( tcp , 1 ) ;
}
2013-02-04 00:04:57 +01:00
2015-04-07 01:36:50 +00:00
SYS_FUNC ( perf_event_open )
2013-02-04 00:04:57 +01:00
{
if ( entering ( tcp ) ) {
tprintf ( " %#lx, %d, %d, %d, " ,
tcp - > u_arg [ 0 ] ,
( int ) tcp - > u_arg [ 1 ] ,
( int ) tcp - > u_arg [ 2 ] ,
( int ) tcp - > u_arg [ 3 ] ) ;
printflags ( perf_event_open_flags , tcp - > u_arg [ 4 ] ,
" PERF_FLAG_??? " ) ;
}
return 0 ;
}