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 >
2003-06-02 23:18:58 +04:00
* Copyright ( c ) 2000 PocketPenguins Inc . Linux for Hitachi SuperH
* port by Greg Banks < gbanks @ pocketpenguins . com >
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 .
*/
# include "defs.h"
2004-03-02 09:16:59 +03:00
# include <asm/mman.h>
1999-05-09 04:29:58 +04:00
# include <sys/mman.h>
2012-02-25 05:38:52 +04:00
# if defined(I386)
2011-08-19 18:01:51 +04:00
# include <asm / ldt.h>
2004-03-02 01:10:52 +03:00
# ifdef HAVE_STRUCT_USER_DESC
# define modify_ldt_ldt_s user_desc
# endif
1999-02-19 03:21:36 +03:00
# endif
Clean up mmap decoding
Previous code merges too many similar, but different ways
of decoding mmap. For example, sys_old_mmap is "params in memory"
API... except SH[64], where it is "params in regs",
i.e. what sys_mmap ("new mmap") function does on other arches!
It's much simpler when every mmap handler has same API regardless
of arch. Where API means whether params are in regs or in memory,
and whether offset is in bytes, pages, or 4k blocks.
Then we just insert correct function pointers into
arch syscall tables.
It turns out there are four common mmap APIs over
all architectures which exist in Linux kernel,
and one outlier for S390.
A number of mmap decoders were plain wrong in arch tables.
For example, BFIN has no old_mmap. It returns ENOSYS.
I checked kernel sources for all arches nad fixed the tables.
There was dead code for x86_64 for old_mmap:
x86_64 has no old_mmap.
* mem.c: Refactor mmap functions so that we have five mmap syscall
handlers, each with the fixed API (not varying by arch).
* pathtrace.c (pathtrace_match): Adjust sys_func == mmap_func checks.
* linux/syscall.h: Declare new mmap syscall handler functions.
* linux/arm/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/avr32/syscallent.h: mmap is sys_mmap_pgoff.
* linux/bfin/syscallent.h: old_mmap is ENOSYS, mmap2 is sys_mmap_pgoff.
* linux/hppa/syscallent.h: mmap2 is sys_mmap_4koff.
* linux/i386/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/ia64/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/m68k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/microblaze/syscallent.h: old_mmap is sys_mmap, mmap2 is sys_mmap_pgoff.
* linux/mips/syscallent.h: mmap is sys_mmap_4kgoff.
* linux/or1k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/powerpc/syscallent.h: mmap2 is sys_mmap_4kgoff.
* linux/s390/syscallent.h: mmap2 is sys_old_mmap_pgoff.
* linux/s390x/syscallent.h: mmap is sys_old_mmap and thus has 1 arg.
* linux/sh/syscallent.h: old_mmap2 is sys_mmap, mmap2 is sys_mmap_4koff.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent1.h: mmap is TD|TM.
* linux/tile/syscallent1.h: mmap2 is sys_mmap_4koff.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2013-02-19 14:28:20 +04:00
# include <sys/user.h> /* for PAGE_SHIFT */
2012-02-25 05:38:52 +04:00
# if defined(SH64)
Clean up mmap decoding
Previous code merges too many similar, but different ways
of decoding mmap. For example, sys_old_mmap is "params in memory"
API... except SH[64], where it is "params in regs",
i.e. what sys_mmap ("new mmap") function does on other arches!
It's much simpler when every mmap handler has same API regardless
of arch. Where API means whether params are in regs or in memory,
and whether offset is in bytes, pages, or 4k blocks.
Then we just insert correct function pointers into
arch syscall tables.
It turns out there are four common mmap APIs over
all architectures which exist in Linux kernel,
and one outlier for S390.
A number of mmap decoders were plain wrong in arch tables.
For example, BFIN has no old_mmap. It returns ENOSYS.
I checked kernel sources for all arches nad fixed the tables.
There was dead code for x86_64 for old_mmap:
x86_64 has no old_mmap.
* mem.c: Refactor mmap functions so that we have five mmap syscall
handlers, each with the fixed API (not varying by arch).
* pathtrace.c (pathtrace_match): Adjust sys_func == mmap_func checks.
* linux/syscall.h: Declare new mmap syscall handler functions.
* linux/arm/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/avr32/syscallent.h: mmap is sys_mmap_pgoff.
* linux/bfin/syscallent.h: old_mmap is ENOSYS, mmap2 is sys_mmap_pgoff.
* linux/hppa/syscallent.h: mmap2 is sys_mmap_4koff.
* linux/i386/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/ia64/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/m68k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/microblaze/syscallent.h: old_mmap is sys_mmap, mmap2 is sys_mmap_pgoff.
* linux/mips/syscallent.h: mmap is sys_mmap_4kgoff.
* linux/or1k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/powerpc/syscallent.h: mmap2 is sys_mmap_4kgoff.
* linux/s390/syscallent.h: mmap2 is sys_old_mmap_pgoff.
* linux/s390x/syscallent.h: mmap is sys_old_mmap and thus has 1 arg.
* linux/sh/syscallent.h: old_mmap2 is sys_mmap, mmap2 is sys_mmap_4koff.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent1.h: mmap is TD|TM.
* linux/tile/syscallent1.h: mmap2 is sys_mmap_4koff.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2013-02-19 14:28:20 +04:00
# include <asm / page.h> /* for PAGE_SHIFT */
# endif
# if !defined(PAGE_SHIFT)
# warning Failed to get PAGE_SHIFT, assuming 12
# define PAGE_SHIFT 12
2003-06-02 23:18:58 +04:00
# endif
1999-02-19 03:21:36 +03:00
int
2011-05-30 16:00:14 +04:00
sys_brk ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %#lx " , tcp - > u_arg [ 0 ] ) ;
}
return RVAL_HEX ;
}
2004-09-04 07:39:20 +04:00
static const struct xlat mmap_prot [ ] = {
1999-02-19 03:21:36 +03:00
{ PROT_NONE , " PROT_NONE " , } ,
{ PROT_READ , " PROT_READ " } ,
{ PROT_WRITE , " PROT_WRITE " } ,
{ PROT_EXEC , " PROT_EXEC " } ,
2003-09-26 03:06:04 +04:00
# ifdef PROT_SEM
{ PROT_SEM , " PROT_SEM " } ,
# endif
# ifdef PROT_GROWSDOWN
{ PROT_GROWSDOWN , " PROT_GROWSDOWN " } ,
# endif
# ifdef PROT_GROWSUP
{ PROT_GROWSUP , " PROT_GROWSUP " } ,
2008-08-25 07:00:47 +04:00
# endif
# ifdef PROT_SAO
{ PROT_SAO , " PROT_SAO " } ,
2003-09-26 03:06:04 +04:00
# endif
1999-02-19 03:21:36 +03:00
{ 0 , NULL } ,
} ;
2004-09-04 07:39:20 +04:00
static const struct xlat mmap_flags [ ] = {
1999-02-19 03:21:36 +03:00
{ MAP_SHARED , " MAP_SHARED " } ,
{ MAP_PRIVATE , " MAP_PRIVATE " } ,
{ MAP_FIXED , " MAP_FIXED " } ,
# ifdef MAP_ANONYMOUS
{ MAP_ANONYMOUS , " MAP_ANONYMOUS " } ,
# endif
2007-03-30 03:30:09 +04:00
# ifdef MAP_32BIT
{ MAP_32BIT , " MAP_32BIT " } ,
# endif
1999-02-19 03:21:36 +03:00
# ifdef MAP_RENAME
{ MAP_RENAME , " MAP_RENAME " } ,
# endif
# ifdef MAP_NORESERVE
{ MAP_NORESERVE , " MAP_NORESERVE " } ,
2003-03-05 07:08:00 +03:00
# endif
# ifdef MAP_POPULATE
{ MAP_POPULATE , " MAP_POPULATE " } ,
# endif
# ifdef MAP_NONBLOCK
{ MAP_NONBLOCK , " MAP_NONBLOCK " } ,
1999-02-19 03:21:36 +03:00
# endif
1999-06-11 17:18:40 +04:00
/*
* XXX - this was introduced in SunOS 4. x to distinguish between
* the old pre - 4. x " mmap() " , which :
*
* only let you map devices with an " mmap " routine ( e . g . ,
* frame buffers ) in ;
*
* required you to specify the mapping address ;
*
* returned 0 on success and - 1 on failure ;
*
* memory and which , and the 4. x " mmap() " which :
*
* can map plain files ;
*
* can be asked to pick where to map the file ;
*
* returns the address where it mapped the file on success
* and - 1 on failure .
*
* It ' s not actually used in source code that calls " mmap() " ; the
* " mmap() " routine adds it for you .
*
* It ' d be nice to come up with some way of eliminating it from
* the flags , e . g . reporting calls * without * it as " old_mmap() "
* and calls with it as " mmap() " .
*/
1999-02-19 03:21:36 +03:00
# ifdef _MAP_NEW
{ _MAP_NEW , " _MAP_NEW " } ,
# endif
# ifdef MAP_GROWSDOWN
{ MAP_GROWSDOWN , " MAP_GROWSDOWN " } ,
# endif
# ifdef MAP_DENYWRITE
{ MAP_DENYWRITE , " MAP_DENYWRITE " } ,
# endif
# ifdef MAP_EXECUTABLE
{ MAP_EXECUTABLE , " MAP_EXECUTABLE " } ,
# endif
1999-11-18 20:09:47 +03:00
# ifdef MAP_INHERIT
2012-03-17 04:27:37 +04:00
{ MAP_INHERIT , " MAP_INHERIT " } ,
1999-11-18 20:09:47 +03:00
# endif
1999-02-19 03:21:36 +03:00
# ifdef MAP_FILE
2012-03-17 04:27:37 +04:00
{ MAP_FILE , " MAP_FILE " } ,
1999-02-19 03:21:36 +03:00
# endif
# ifdef MAP_LOCKED
2012-03-17 04:27:37 +04:00
{ MAP_LOCKED , " MAP_LOCKED " } ,
2000-09-02 01:03:06 +04:00
# endif
/* FreeBSD ones */
2012-03-17 04:29:40 +04:00
# if defined(MAP_ANON) && (!defined(MAP_ANONYMOUS) || MAP_ANON != MAP_ANONYMOUS)
2012-03-17 04:27:37 +04:00
{ MAP_ANON , " MAP_ANON " } ,
2000-09-02 01:03:06 +04:00
# endif
# ifdef MAP_HASSEMAPHORE
2012-03-17 04:27:37 +04:00
{ MAP_HASSEMAPHORE , " MAP_HASSEMAPHORE " } ,
2000-09-02 01:03:06 +04:00
# endif
# ifdef MAP_STACK
2012-03-17 04:27:37 +04:00
{ MAP_STACK , " MAP_STACK " } ,
2000-09-02 01:03:06 +04:00
# endif
2013-02-05 22:31:55 +04:00
# if defined MAP_UNINITIALIZED && MAP_UNINITIALIZED > 0
{ MAP_UNINITIALIZED , " MAP_UNINITIALIZED " } ,
# endif
2000-09-02 01:03:06 +04:00
# ifdef MAP_NOSYNC
2012-03-17 04:27:37 +04:00
{ MAP_NOSYNC , " MAP_NOSYNC " } ,
2000-09-02 01:03:06 +04:00
# endif
# ifdef MAP_NOCORE
2012-03-17 04:27:37 +04:00
{ MAP_NOCORE , " MAP_NOCORE " } ,
2009-12-28 18:00:15 +03:00
# endif
# ifdef TILE
{ MAP_CACHE_NO_LOCAL , " MAP_CACHE_NO_LOCAL " } ,
{ MAP_CACHE_NO_L2 , " MAP_CACHE_NO_L2 " } ,
{ MAP_CACHE_NO_L1 , " MAP_CACHE_NO_L1 " } ,
1999-02-19 03:21:36 +03:00
# endif
{ 0 , NULL } ,
} ;
2009-12-28 18:00:15 +03:00
# ifdef TILE
2011-08-19 18:01:51 +04:00
static int
addtileflags ( long flags )
2009-12-28 18:00:15 +03:00
{
long home = flags & _MAP_CACHE_MKHOME ( _MAP_CACHE_HOME_MASK ) ;
flags & = ~ _MAP_CACHE_MKHOME ( _MAP_CACHE_HOME_MASK ) ;
if ( flags & _MAP_CACHE_INCOHERENT ) {
flags & = ~ _MAP_CACHE_INCOHERENT ;
if ( home = = MAP_CACHE_HOME_NONE ) {
2011-09-01 12:00:28 +04:00
tprints ( " |MAP_CACHE_INCOHERENT " ) ;
2009-12-28 18:00:15 +03:00
return flags ;
}
2011-09-01 12:00:28 +04:00
tprints ( " |_MAP_CACHE_INCOHERENT " ) ;
2009-12-28 18:00:15 +03:00
}
switch ( home ) {
case 0 : break ;
2011-09-01 12:00:28 +04:00
case MAP_CACHE_HOME_HERE : tprints ( " |MAP_CACHE_HOME_HERE " ) ; break ;
case MAP_CACHE_HOME_NONE : tprints ( " |MAP_CACHE_HOME_NONE " ) ; break ;
case MAP_CACHE_HOME_SINGLE : tprints ( " |MAP_CACHE_HOME_SINGLE " ) ; break ;
case MAP_CACHE_HOME_TASK : tprints ( " |MAP_CACHE_HOME_TASK " ) ; break ;
case MAP_CACHE_HOME_HASH : tprints ( " |MAP_CACHE_HOME_HASH " ) ; break ;
2009-12-28 18:00:15 +03:00
default :
Add tilegx support to strace
tilegx support has been in the kernel since 3.0.
In addition, fix some issues with the tilepro support already
present in strace, primarily the decision to use the
<asm/unistd.h> numbering space for system calls.
* defs.h [TILE]: Include <asm/ptrace.h> and provide an extern
struct pt_regs tile_regs for efficiency. Provide compat 32-bit
personality via SUPPORTED_PERSONALITIES, PERSONALITY0_WORDSIZE,
PERSONALITY1_WORDSIZE, and DEFAULT_PERSONALITY.
* linux/tile/errnoent1.h: New file, includes linux/errnoent.h.
* linux/tile/ioctlent1.h: New file, includes linux/ioctlent.h.
* linux/tile/signalent1.h: New file, includes linux/signalent.h.
* linux/tile/syscallent.h: Update with new asm-generic syscalls.
The version previously committed was the from the first tile patch
to LKML, which subsequently was changed to use <asm-generic/unistd.h>.
* linux/tile/syscallent1.h: Copy from linux/tile/syscallent.h.
* mem.c (addtileflags) [TILE]: use %ld properly for a "long" variable.
* process.c [TILE]: Choose clone arguments correctly and properly
suppress all "struct user" related offsets in user_struct_offsets.
* signal.c [TILE]: Use tile_regs not upeek.
* syscall.c (update_personality) [TILE]: Print mode.
(PT_FLAGS_COMPAT) [TILE]: Provide if not in system headers.
(tile_regs) [TILE]: Define 'struct pt_regs' variable to hold state.
(get_regs) [TILE]: use PTRACE_GETREGS to set tile_regs rather than using upeek.
(get_scno) [TILE]: Set personality.
(get_syscall_args) [TILE]: Use tile_regs.
(get_syscall_result) [TILE]: Update tile_regs.
(get_error) [TILE]: Use tile_regs.
(printcall) [TILE]: Print pc.
(arg0_offset, arg1_offset, restore_arg0, restore_arg1) [TILE]:
Properly handle tile call semantics and support tilegx.
Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2013-02-05 20:48:33 +04:00
tprintf ( " |MAP_CACHE_HOME(%ld) " ,
2009-12-28 18:00:15 +03:00
( home > > _MAP_CACHE_HOME_SHIFT ) ) ;
break ;
}
return flags ;
}
# endif
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
static int
2013-02-18 05:36:36 +04:00
print_mmap ( struct tcb * tcp , long * u_arg , unsigned long long offset )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
/* addr */
1999-06-11 17:18:40 +04:00
if ( ! u_arg [ 0 ] )
2011-09-01 12:00:28 +04:00
tprints ( " NULL, " ) ;
1999-06-11 17:18:40 +04:00
else
tprintf ( " %#lx, " , u_arg [ 0 ] ) ;
1999-02-19 03:21:36 +03:00
/* len */
tprintf ( " %lu, " , u_arg [ 1 ] ) ;
/* prot */
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 ( mmap_prot , u_arg [ 2 ] , " PROT_??? " ) ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
1999-02-19 03:21:36 +03:00
/* flags */
2000-09-02 01:03:06 +04:00
# ifdef MAP_TYPE
1999-02-19 03:21:36 +03:00
printxval ( mmap_flags , u_arg [ 3 ] & MAP_TYPE , " MAP_??? " ) ;
2013-02-18 05:36:36 +04:00
# ifdef TILE
2009-12-28 18:00:15 +03:00
addflags ( mmap_flags , addtileflags ( u_arg [ 3 ] & ~ MAP_TYPE ) ) ;
2013-02-18 05:36:36 +04:00
# else
1999-02-19 03:21:36 +03:00
addflags ( mmap_flags , u_arg [ 3 ] & ~ MAP_TYPE ) ;
2013-02-18 05:36:36 +04:00
# endif
2000-09-02 01:03:06 +04:00
# else
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 ( mmap_flags , u_arg [ 3 ] , " MAP_??? " ) ;
2000-09-02 01:03:06 +04:00
# endif
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2013-02-18 05:36:36 +04:00
/* fd */
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 , u_arg [ 4 ] ) ;
1999-02-19 03:21:36 +03:00
/* offset */
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
tprintf ( " , %#llx " , offset ) ;
1999-02-19 03:21:36 +03:00
}
return RVAL_HEX ;
}
Clean up mmap decoding
Previous code merges too many similar, but different ways
of decoding mmap. For example, sys_old_mmap is "params in memory"
API... except SH[64], where it is "params in regs",
i.e. what sys_mmap ("new mmap") function does on other arches!
It's much simpler when every mmap handler has same API regardless
of arch. Where API means whether params are in regs or in memory,
and whether offset is in bytes, pages, or 4k blocks.
Then we just insert correct function pointers into
arch syscall tables.
It turns out there are four common mmap APIs over
all architectures which exist in Linux kernel,
and one outlier for S390.
A number of mmap decoders were plain wrong in arch tables.
For example, BFIN has no old_mmap. It returns ENOSYS.
I checked kernel sources for all arches nad fixed the tables.
There was dead code for x86_64 for old_mmap:
x86_64 has no old_mmap.
* mem.c: Refactor mmap functions so that we have five mmap syscall
handlers, each with the fixed API (not varying by arch).
* pathtrace.c (pathtrace_match): Adjust sys_func == mmap_func checks.
* linux/syscall.h: Declare new mmap syscall handler functions.
* linux/arm/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/avr32/syscallent.h: mmap is sys_mmap_pgoff.
* linux/bfin/syscallent.h: old_mmap is ENOSYS, mmap2 is sys_mmap_pgoff.
* linux/hppa/syscallent.h: mmap2 is sys_mmap_4koff.
* linux/i386/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/ia64/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/m68k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/microblaze/syscallent.h: old_mmap is sys_mmap, mmap2 is sys_mmap_pgoff.
* linux/mips/syscallent.h: mmap is sys_mmap_4kgoff.
* linux/or1k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/powerpc/syscallent.h: mmap2 is sys_mmap_4kgoff.
* linux/s390/syscallent.h: mmap2 is sys_old_mmap_pgoff.
* linux/s390x/syscallent.h: mmap is sys_old_mmap and thus has 1 arg.
* linux/sh/syscallent.h: old_mmap2 is sys_mmap, mmap2 is sys_mmap_4koff.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent1.h: mmap is TD|TM.
* linux/tile/syscallent1.h: mmap2 is sys_mmap_4koff.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2013-02-19 14:28:20 +04:00
/* Syscall name<->function correspondence is messed up on many arches.
* For example :
* i386 has __NR_mmap = = 90 , and it is " old mmap " , and
* also it has __NR_mmap2 = = 192 , which is a " new mmap with page offsets " .
* But x86_64 has just one __NR_mmap = = 9 , a " new mmap with byte offsets " .
* Confused ? Me too !
*/
/* Params are pointed to by u_arg[0], offset is in bytes */
int
sys_old_mmap ( struct tcb * tcp )
1999-12-23 17:20:14 +03:00
{
Clean up mmap decoding
Previous code merges too many similar, but different ways
of decoding mmap. For example, sys_old_mmap is "params in memory"
API... except SH[64], where it is "params in regs",
i.e. what sys_mmap ("new mmap") function does on other arches!
It's much simpler when every mmap handler has same API regardless
of arch. Where API means whether params are in regs or in memory,
and whether offset is in bytes, pages, or 4k blocks.
Then we just insert correct function pointers into
arch syscall tables.
It turns out there are four common mmap APIs over
all architectures which exist in Linux kernel,
and one outlier for S390.
A number of mmap decoders were plain wrong in arch tables.
For example, BFIN has no old_mmap. It returns ENOSYS.
I checked kernel sources for all arches nad fixed the tables.
There was dead code for x86_64 for old_mmap:
x86_64 has no old_mmap.
* mem.c: Refactor mmap functions so that we have five mmap syscall
handlers, each with the fixed API (not varying by arch).
* pathtrace.c (pathtrace_match): Adjust sys_func == mmap_func checks.
* linux/syscall.h: Declare new mmap syscall handler functions.
* linux/arm/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/avr32/syscallent.h: mmap is sys_mmap_pgoff.
* linux/bfin/syscallent.h: old_mmap is ENOSYS, mmap2 is sys_mmap_pgoff.
* linux/hppa/syscallent.h: mmap2 is sys_mmap_4koff.
* linux/i386/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/ia64/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/m68k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/microblaze/syscallent.h: old_mmap is sys_mmap, mmap2 is sys_mmap_pgoff.
* linux/mips/syscallent.h: mmap is sys_mmap_4kgoff.
* linux/or1k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/powerpc/syscallent.h: mmap2 is sys_mmap_4kgoff.
* linux/s390/syscallent.h: mmap2 is sys_old_mmap_pgoff.
* linux/s390x/syscallent.h: mmap is sys_old_mmap and thus has 1 arg.
* linux/sh/syscallent.h: old_mmap2 is sys_mmap, mmap2 is sys_mmap_4koff.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent1.h: mmap is TD|TM.
* linux/tile/syscallent1.h: mmap2 is sys_mmap_4koff.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2013-02-19 14:28:20 +04:00
long u_arg [ 6 ] ;
2011-08-19 18:01:51 +04:00
# if defined(IA64)
2008-12-30 21:47:55 +03:00
/*
2011-08-19 19:07:38 +04:00
* IA64 processes never call this routine , they only use the
Clean up mmap decoding
Previous code merges too many similar, but different ways
of decoding mmap. For example, sys_old_mmap is "params in memory"
API... except SH[64], where it is "params in regs",
i.e. what sys_mmap ("new mmap") function does on other arches!
It's much simpler when every mmap handler has same API regardless
of arch. Where API means whether params are in regs or in memory,
and whether offset is in bytes, pages, or 4k blocks.
Then we just insert correct function pointers into
arch syscall tables.
It turns out there are four common mmap APIs over
all architectures which exist in Linux kernel,
and one outlier for S390.
A number of mmap decoders were plain wrong in arch tables.
For example, BFIN has no old_mmap. It returns ENOSYS.
I checked kernel sources for all arches nad fixed the tables.
There was dead code for x86_64 for old_mmap:
x86_64 has no old_mmap.
* mem.c: Refactor mmap functions so that we have five mmap syscall
handlers, each with the fixed API (not varying by arch).
* pathtrace.c (pathtrace_match): Adjust sys_func == mmap_func checks.
* linux/syscall.h: Declare new mmap syscall handler functions.
* linux/arm/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/avr32/syscallent.h: mmap is sys_mmap_pgoff.
* linux/bfin/syscallent.h: old_mmap is ENOSYS, mmap2 is sys_mmap_pgoff.
* linux/hppa/syscallent.h: mmap2 is sys_mmap_4koff.
* linux/i386/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/ia64/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/m68k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/microblaze/syscallent.h: old_mmap is sys_mmap, mmap2 is sys_mmap_pgoff.
* linux/mips/syscallent.h: mmap is sys_mmap_4kgoff.
* linux/or1k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/powerpc/syscallent.h: mmap2 is sys_mmap_4kgoff.
* linux/s390/syscallent.h: mmap2 is sys_old_mmap_pgoff.
* linux/s390x/syscallent.h: mmap is sys_old_mmap and thus has 1 arg.
* linux/sh/syscallent.h: old_mmap2 is sys_mmap, mmap2 is sys_mmap_4koff.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent1.h: mmap is TD|TM.
* linux/tile/syscallent1.h: mmap2 is sys_mmap_4koff.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2013-02-19 14:28:20 +04:00
* new ' sys_mmap ' interface . Only IA32 processes come here .
2008-12-30 21:47:55 +03:00
*/
2011-08-19 19:07:38 +04:00
int i ;
2013-02-18 05:36:36 +04:00
unsigned narrow_arg [ 6 ] ;
2011-08-19 19:07:38 +04:00
if ( umoven ( tcp , tcp - > u_arg [ 0 ] , sizeof ( narrow_arg ) , ( char * ) narrow_arg ) = = - 1 )
return 0 ;
2008-12-30 21:47:55 +03:00
for ( i = 0 ; i < 6 ; i + + )
Clean up mmap decoding
Previous code merges too many similar, but different ways
of decoding mmap. For example, sys_old_mmap is "params in memory"
API... except SH[64], where it is "params in regs",
i.e. what sys_mmap ("new mmap") function does on other arches!
It's much simpler when every mmap handler has same API regardless
of arch. Where API means whether params are in regs or in memory,
and whether offset is in bytes, pages, or 4k blocks.
Then we just insert correct function pointers into
arch syscall tables.
It turns out there are four common mmap APIs over
all architectures which exist in Linux kernel,
and one outlier for S390.
A number of mmap decoders were plain wrong in arch tables.
For example, BFIN has no old_mmap. It returns ENOSYS.
I checked kernel sources for all arches nad fixed the tables.
There was dead code for x86_64 for old_mmap:
x86_64 has no old_mmap.
* mem.c: Refactor mmap functions so that we have five mmap syscall
handlers, each with the fixed API (not varying by arch).
* pathtrace.c (pathtrace_match): Adjust sys_func == mmap_func checks.
* linux/syscall.h: Declare new mmap syscall handler functions.
* linux/arm/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/avr32/syscallent.h: mmap is sys_mmap_pgoff.
* linux/bfin/syscallent.h: old_mmap is ENOSYS, mmap2 is sys_mmap_pgoff.
* linux/hppa/syscallent.h: mmap2 is sys_mmap_4koff.
* linux/i386/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/ia64/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/m68k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/microblaze/syscallent.h: old_mmap is sys_mmap, mmap2 is sys_mmap_pgoff.
* linux/mips/syscallent.h: mmap is sys_mmap_4kgoff.
* linux/or1k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/powerpc/syscallent.h: mmap2 is sys_mmap_4kgoff.
* linux/s390/syscallent.h: mmap2 is sys_old_mmap_pgoff.
* linux/s390x/syscallent.h: mmap is sys_old_mmap and thus has 1 arg.
* linux/sh/syscallent.h: old_mmap2 is sys_mmap, mmap2 is sys_mmap_4koff.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent1.h: mmap is TD|TM.
* linux/tile/syscallent1.h: mmap2 is sys_mmap_4koff.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2013-02-19 14:28:20 +04:00
u_arg [ i ] = ( unsigned long ) narrow_arg [ i ] ;
2013-02-18 05:36:36 +04:00
# elif defined(X86_64)
Clean up mmap decoding
Previous code merges too many similar, but different ways
of decoding mmap. For example, sys_old_mmap is "params in memory"
API... except SH[64], where it is "params in regs",
i.e. what sys_mmap ("new mmap") function does on other arches!
It's much simpler when every mmap handler has same API regardless
of arch. Where API means whether params are in regs or in memory,
and whether offset is in bytes, pages, or 4k blocks.
Then we just insert correct function pointers into
arch syscall tables.
It turns out there are four common mmap APIs over
all architectures which exist in Linux kernel,
and one outlier for S390.
A number of mmap decoders were plain wrong in arch tables.
For example, BFIN has no old_mmap. It returns ENOSYS.
I checked kernel sources for all arches nad fixed the tables.
There was dead code for x86_64 for old_mmap:
x86_64 has no old_mmap.
* mem.c: Refactor mmap functions so that we have five mmap syscall
handlers, each with the fixed API (not varying by arch).
* pathtrace.c (pathtrace_match): Adjust sys_func == mmap_func checks.
* linux/syscall.h: Declare new mmap syscall handler functions.
* linux/arm/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/avr32/syscallent.h: mmap is sys_mmap_pgoff.
* linux/bfin/syscallent.h: old_mmap is ENOSYS, mmap2 is sys_mmap_pgoff.
* linux/hppa/syscallent.h: mmap2 is sys_mmap_4koff.
* linux/i386/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/ia64/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/m68k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/microblaze/syscallent.h: old_mmap is sys_mmap, mmap2 is sys_mmap_pgoff.
* linux/mips/syscallent.h: mmap is sys_mmap_4kgoff.
* linux/or1k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/powerpc/syscallent.h: mmap2 is sys_mmap_4kgoff.
* linux/s390/syscallent.h: mmap2 is sys_old_mmap_pgoff.
* linux/s390x/syscallent.h: mmap is sys_old_mmap and thus has 1 arg.
* linux/sh/syscallent.h: old_mmap2 is sys_mmap, mmap2 is sys_mmap_4koff.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent1.h: mmap is TD|TM.
* linux/tile/syscallent1.h: mmap2 is sys_mmap_4koff.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2013-02-19 14:28:20 +04:00
/* We are here only in personality 1 (i386) */
int i ;
unsigned narrow_arg [ 6 ] ;
if ( umoven ( tcp , tcp - > u_arg [ 0 ] , sizeof ( narrow_arg ) , ( char * ) narrow_arg ) = = - 1 )
return 0 ;
for ( i = 0 ; i < 6 ; + + i )
u_arg [ i ] = ( unsigned long ) narrow_arg [ i ] ;
2013-02-18 05:36:36 +04:00
# else
2011-08-19 19:07:38 +04:00
if ( umoven ( tcp , tcp - > u_arg [ 0 ] , sizeof ( u_arg ) , ( char * ) u_arg ) = = - 1 )
2008-12-30 21:47:55 +03:00
return 0 ;
2013-02-18 05:36:36 +04:00
# endif
Clean up mmap decoding
Previous code merges too many similar, but different ways
of decoding mmap. For example, sys_old_mmap is "params in memory"
API... except SH[64], where it is "params in regs",
i.e. what sys_mmap ("new mmap") function does on other arches!
It's much simpler when every mmap handler has same API regardless
of arch. Where API means whether params are in regs or in memory,
and whether offset is in bytes, pages, or 4k blocks.
Then we just insert correct function pointers into
arch syscall tables.
It turns out there are four common mmap APIs over
all architectures which exist in Linux kernel,
and one outlier for S390.
A number of mmap decoders were plain wrong in arch tables.
For example, BFIN has no old_mmap. It returns ENOSYS.
I checked kernel sources for all arches nad fixed the tables.
There was dead code for x86_64 for old_mmap:
x86_64 has no old_mmap.
* mem.c: Refactor mmap functions so that we have five mmap syscall
handlers, each with the fixed API (not varying by arch).
* pathtrace.c (pathtrace_match): Adjust sys_func == mmap_func checks.
* linux/syscall.h: Declare new mmap syscall handler functions.
* linux/arm/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/avr32/syscallent.h: mmap is sys_mmap_pgoff.
* linux/bfin/syscallent.h: old_mmap is ENOSYS, mmap2 is sys_mmap_pgoff.
* linux/hppa/syscallent.h: mmap2 is sys_mmap_4koff.
* linux/i386/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/ia64/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/m68k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/microblaze/syscallent.h: old_mmap is sys_mmap, mmap2 is sys_mmap_pgoff.
* linux/mips/syscallent.h: mmap is sys_mmap_4kgoff.
* linux/or1k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/powerpc/syscallent.h: mmap2 is sys_mmap_4kgoff.
* linux/s390/syscallent.h: mmap2 is sys_old_mmap_pgoff.
* linux/s390x/syscallent.h: mmap is sys_old_mmap and thus has 1 arg.
* linux/sh/syscallent.h: old_mmap2 is sys_mmap, mmap2 is sys_mmap_4koff.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent1.h: mmap is TD|TM.
* linux/tile/syscallent1.h: mmap2 is sys_mmap_4koff.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2013-02-19 14:28:20 +04:00
return print_mmap ( tcp , u_arg , ( unsigned long ) u_arg [ 5 ] ) ;
1999-12-23 17:20:14 +03:00
}
Clean up mmap decoding
Previous code merges too many similar, but different ways
of decoding mmap. For example, sys_old_mmap is "params in memory"
API... except SH[64], where it is "params in regs",
i.e. what sys_mmap ("new mmap") function does on other arches!
It's much simpler when every mmap handler has same API regardless
of arch. Where API means whether params are in regs or in memory,
and whether offset is in bytes, pages, or 4k blocks.
Then we just insert correct function pointers into
arch syscall tables.
It turns out there are four common mmap APIs over
all architectures which exist in Linux kernel,
and one outlier for S390.
A number of mmap decoders were plain wrong in arch tables.
For example, BFIN has no old_mmap. It returns ENOSYS.
I checked kernel sources for all arches nad fixed the tables.
There was dead code for x86_64 for old_mmap:
x86_64 has no old_mmap.
* mem.c: Refactor mmap functions so that we have five mmap syscall
handlers, each with the fixed API (not varying by arch).
* pathtrace.c (pathtrace_match): Adjust sys_func == mmap_func checks.
* linux/syscall.h: Declare new mmap syscall handler functions.
* linux/arm/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/avr32/syscallent.h: mmap is sys_mmap_pgoff.
* linux/bfin/syscallent.h: old_mmap is ENOSYS, mmap2 is sys_mmap_pgoff.
* linux/hppa/syscallent.h: mmap2 is sys_mmap_4koff.
* linux/i386/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/ia64/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/m68k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/microblaze/syscallent.h: old_mmap is sys_mmap, mmap2 is sys_mmap_pgoff.
* linux/mips/syscallent.h: mmap is sys_mmap_4kgoff.
* linux/or1k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/powerpc/syscallent.h: mmap2 is sys_mmap_4kgoff.
* linux/s390/syscallent.h: mmap2 is sys_old_mmap_pgoff.
* linux/s390x/syscallent.h: mmap is sys_old_mmap and thus has 1 arg.
* linux/sh/syscallent.h: old_mmap2 is sys_mmap, mmap2 is sys_mmap_4koff.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent1.h: mmap is TD|TM.
* linux/tile/syscallent1.h: mmap2 is sys_mmap_4koff.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2013-02-19 14:28:20 +04:00
# if defined(S390)
/* Params are pointed to by u_arg[0], offset is in pages */
int
sys_old_mmap_pgoff ( struct tcb * tcp )
{
long u_arg [ 5 ] ;
int i ;
unsigned narrow_arg [ 6 ] ;
unsigned long long offset ;
if ( umoven ( tcp , tcp - > u_arg [ 0 ] , sizeof ( narrow_arg ) , ( char * ) narrow_arg ) = = - 1 )
return 0 ;
for ( i = 0 ; i < 5 ; i + + )
u_arg [ i ] = ( unsigned long ) narrow_arg [ i ] ;
offset = narrow_arg [ 5 ] ;
offset < < = PAGE_SHIFT ;
return print_mmap ( tcp , u_arg , offset ) ;
}
# endif
/* Params are passed directly, offset is in bytes */
1999-12-23 17:20:14 +03:00
int
2011-05-30 16:00:14 +04:00
sys_mmap ( struct tcb * tcp )
1999-12-23 17:20:14 +03:00
{
2013-02-18 06:13:07 +04:00
unsigned long long offset = ( unsigned long ) tcp - > u_arg [ 5 ] ;
Clean up mmap decoding
Previous code merges too many similar, but different ways
of decoding mmap. For example, sys_old_mmap is "params in memory"
API... except SH[64], where it is "params in regs",
i.e. what sys_mmap ("new mmap") function does on other arches!
It's much simpler when every mmap handler has same API regardless
of arch. Where API means whether params are in regs or in memory,
and whether offset is in bytes, pages, or 4k blocks.
Then we just insert correct function pointers into
arch syscall tables.
It turns out there are four common mmap APIs over
all architectures which exist in Linux kernel,
and one outlier for S390.
A number of mmap decoders were plain wrong in arch tables.
For example, BFIN has no old_mmap. It returns ENOSYS.
I checked kernel sources for all arches nad fixed the tables.
There was dead code for x86_64 for old_mmap:
x86_64 has no old_mmap.
* mem.c: Refactor mmap functions so that we have five mmap syscall
handlers, each with the fixed API (not varying by arch).
* pathtrace.c (pathtrace_match): Adjust sys_func == mmap_func checks.
* linux/syscall.h: Declare new mmap syscall handler functions.
* linux/arm/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/avr32/syscallent.h: mmap is sys_mmap_pgoff.
* linux/bfin/syscallent.h: old_mmap is ENOSYS, mmap2 is sys_mmap_pgoff.
* linux/hppa/syscallent.h: mmap2 is sys_mmap_4koff.
* linux/i386/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/ia64/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/m68k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/microblaze/syscallent.h: old_mmap is sys_mmap, mmap2 is sys_mmap_pgoff.
* linux/mips/syscallent.h: mmap is sys_mmap_4kgoff.
* linux/or1k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/powerpc/syscallent.h: mmap2 is sys_mmap_4kgoff.
* linux/s390/syscallent.h: mmap2 is sys_old_mmap_pgoff.
* linux/s390x/syscallent.h: mmap is sys_old_mmap and thus has 1 arg.
* linux/sh/syscallent.h: old_mmap2 is sys_mmap, mmap2 is sys_mmap_4koff.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent1.h: mmap is TD|TM.
* linux/tile/syscallent1.h: mmap2 is sys_mmap_4koff.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2013-02-19 14:28:20 +04:00
# if defined(LINUX_MIPSN32) || defined(X32)
2013-02-18 06:13:07 +04:00
/* Try test/x32_mmap.c */
2008-12-30 21:47:55 +03:00
offset = tcp - > ext_arg [ 5 ] ;
2003-06-02 23:18:58 +04:00
# endif
Clean up mmap decoding
Previous code merges too many similar, but different ways
of decoding mmap. For example, sys_old_mmap is "params in memory"
API... except SH[64], where it is "params in regs",
i.e. what sys_mmap ("new mmap") function does on other arches!
It's much simpler when every mmap handler has same API regardless
of arch. Where API means whether params are in regs or in memory,
and whether offset is in bytes, pages, or 4k blocks.
Then we just insert correct function pointers into
arch syscall tables.
It turns out there are four common mmap APIs over
all architectures which exist in Linux kernel,
and one outlier for S390.
A number of mmap decoders were plain wrong in arch tables.
For example, BFIN has no old_mmap. It returns ENOSYS.
I checked kernel sources for all arches nad fixed the tables.
There was dead code for x86_64 for old_mmap:
x86_64 has no old_mmap.
* mem.c: Refactor mmap functions so that we have five mmap syscall
handlers, each with the fixed API (not varying by arch).
* pathtrace.c (pathtrace_match): Adjust sys_func == mmap_func checks.
* linux/syscall.h: Declare new mmap syscall handler functions.
* linux/arm/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/avr32/syscallent.h: mmap is sys_mmap_pgoff.
* linux/bfin/syscallent.h: old_mmap is ENOSYS, mmap2 is sys_mmap_pgoff.
* linux/hppa/syscallent.h: mmap2 is sys_mmap_4koff.
* linux/i386/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/ia64/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/m68k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/microblaze/syscallent.h: old_mmap is sys_mmap, mmap2 is sys_mmap_pgoff.
* linux/mips/syscallent.h: mmap is sys_mmap_4kgoff.
* linux/or1k/syscallent.h: mmap2 is sys_mmap_pgoff.
* linux/powerpc/syscallent.h: mmap2 is sys_mmap_4kgoff.
* linux/s390/syscallent.h: mmap2 is sys_old_mmap_pgoff.
* linux/s390x/syscallent.h: mmap is sys_old_mmap and thus has 1 arg.
* linux/sh/syscallent.h: old_mmap2 is sys_mmap, mmap2 is sys_mmap_4koff.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent1.h: mmap is TD|TM.
* linux/tile/syscallent1.h: mmap2 is sys_mmap_4koff.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2013-02-19 14:28:20 +04:00
/* Example of kernel-side handling of this variety of mmap:
* arch / x86 / kernel / sys_x86_64 . c : : SYSCALL_DEFINE6 ( mmap , . . . ) calls
* sys_mmap_pgoff ( . . . , off > > PAGE_SHIFT ) ; i . e . off is in bytes ,
* since the above code converts off to pages .
*/
return print_mmap ( tcp , tcp - > u_arg , offset ) ;
}
/* Params are passed directly, offset is in pages */
int
sys_mmap_pgoff ( struct tcb * tcp )
{
/* Try test/mmap_offset_decode.c */
unsigned long long offset ;
offset = ( unsigned long ) tcp - > u_arg [ 5 ] ;
offset < < = PAGE_SHIFT ;
return print_mmap ( tcp , tcp - > u_arg , offset ) ;
}
/* Params are passed directly, offset is in 4k units */
int
sys_mmap_4koff ( struct tcb * tcp )
{
unsigned long long offset ;
offset = ( unsigned long ) tcp - > u_arg [ 5 ] ;
offset < < = 12 ;
2008-12-30 21:47:55 +03:00
return print_mmap ( tcp , tcp - > u_arg , offset ) ;
1999-12-23 17:20:14 +03:00
}
1999-02-19 03:21:36 +03:00
int
2011-05-30 16:00:14 +04:00
sys_munmap ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %#lx, %lu " ,
tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
int
2011-05-30 16:00:14 +04:00
sys_mprotect ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %#lx, %lu, " ,
tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
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 ( mmap_prot , tcp - > u_arg [ 2 ] , " PROT_??? " ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
2004-09-04 07:39:20 +04:00
static const struct xlat mremap_flags [ ] = {
2000-05-01 05:53:59 +04:00
{ MREMAP_MAYMOVE , " MREMAP_MAYMOVE " } ,
2009-12-25 02:19:19 +03:00
# ifdef MREMAP_FIXED
{ MREMAP_FIXED , " MREMAP_FIXED " } ,
# endif
2000-05-01 05:53:59 +04:00
{ 0 , NULL }
1999-05-09 04:29:58 +04:00
} ;
int
2009-12-25 02:34:58 +03:00
sys_mremap ( struct tcb * tcp )
1999-05-09 04:29:58 +04:00
{
if ( entering ( tcp ) ) {
tprintf ( " %#lx, %lu, %lu, " , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ,
tcp - > u_arg [ 2 ] ) ;
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 ( mremap_flags , tcp - > u_arg [ 3 ] , " MREMAP_??? " ) ;
2009-12-25 02:34:58 +03:00
# ifdef MREMAP_FIXED
if ( ( tcp - > u_arg [ 3 ] & ( MREMAP_MAYMOVE | MREMAP_FIXED ) ) = =
( MREMAP_MAYMOVE | MREMAP_FIXED ) )
tprintf ( " , %#lx " , tcp - > u_arg [ 4 ] ) ;
# endif
1999-05-09 04:29:58 +04:00
}
return RVAL_HEX ;
}
2008-08-25 06:59:36 +04:00
static const struct xlat madvise_cmds [ ] = {
2000-04-11 02:22:31 +04:00
# ifdef MADV_NORMAL
{ MADV_NORMAL , " MADV_NORMAL " } ,
# endif
2008-08-25 06:59:36 +04:00
# ifdef MADV_RANDOM
2000-04-11 02:22:31 +04:00
{ MADV_RANDOM , " MADV_RANDOM " } ,
# endif
# ifdef MADV_SEQUENTIAL
{ MADV_SEQUENTIAL , " MADV_SEQUENTIAL " } ,
# endif
# ifdef MADV_WILLNEED
{ MADV_WILLNEED , " MADV_WILLNEED " } ,
# endif
2008-08-25 06:59:36 +04:00
# ifdef MADV_DONTNEED
2000-04-11 02:22:31 +04:00
{ MADV_DONTNEED , " MADV_DONTNEED " } ,
# endif
{ 0 , NULL } ,
} ;
int
2011-05-30 16:00:14 +04:00
sys_madvise ( struct tcb * tcp )
2000-04-11 02:22:31 +04:00
{
if ( entering ( tcp ) ) {
tprintf ( " %#lx, %lu, " , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
2008-08-25 06:59:36 +04:00
printxval ( madvise_cmds , tcp - > u_arg [ 2 ] , " MADV_??? " ) ;
2000-04-11 02:22:31 +04:00
}
return 0 ;
}
2004-09-04 07:39:20 +04:00
static const struct xlat mlockall_flags [ ] = {
2000-04-11 02:22:31 +04:00
# ifdef MCL_CURRENT
{ MCL_CURRENT , " MCL_CURRENT " } ,
# endif
# ifdef MCL_FUTURE
{ MCL_FUTURE , " MCL_FUTURE " } ,
# endif
{ 0 , NULL }
} ;
int
2011-05-30 16:00:14 +04:00
sys_mlockall ( struct tcb * tcp )
2000-04-11 02:22:31 +04:00
{
if ( entering ( tcp ) ) {
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 ( mlockall_flags , tcp - > u_arg [ 0 ] , " MCL_??? " ) ;
2000-04-11 02:22:31 +04:00
}
return 0 ;
}
1999-02-19 03:21:36 +03:00
# ifdef MS_ASYNC
2004-09-04 07:39:20 +04:00
static const struct xlat mctl_sync [ ] = {
1999-02-19 03:21:36 +03:00
# ifdef MS_SYNC
{ MS_SYNC , " MS_SYNC " } ,
# endif
2001-10-16 22:12:27 +04:00
{ MS_ASYNC , " MS_ASYNC " } ,
{ MS_INVALIDATE , " MS_INVALIDATE " } ,
1999-02-19 03:21:36 +03:00
{ 0 , NULL } ,
} ;
int
2011-05-30 16:00:14 +04:00
sys_msync ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
/* addr */
tprintf ( " %#lx " , tcp - > u_arg [ 0 ] ) ;
/* len */
tprintf ( " , %lu, " , tcp - > u_arg [ 1 ] ) ;
/* flags */
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 ( mctl_sync , tcp - > u_arg [ 2 ] , " MS_??? " ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
# endif /* MS_ASYNC */
# ifdef MC_SYNC
2004-09-04 07:39:20 +04:00
static const struct xlat mctl_funcs [ ] = {
1999-02-19 03:21:36 +03:00
{ MC_LOCK , " MC_LOCK " } ,
{ MC_LOCKAS , " MC_LOCKAS " } ,
{ MC_SYNC , " MC_SYNC " } ,
{ MC_UNLOCK , " MC_UNLOCK " } ,
{ MC_UNLOCKAS , " MC_UNLOCKAS " } ,
{ 0 , NULL } ,
} ;
2004-09-04 07:39:20 +04:00
static const struct xlat mctl_lockas [ ] = {
1999-02-19 03:21:36 +03:00
{ MCL_CURRENT , " MCL_CURRENT " } ,
{ MCL_FUTURE , " MCL_FUTURE " } ,
{ 0 , NULL } ,
} ;
int
2011-05-30 16:00:14 +04:00
sys_mctl ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
int arg , function ;
if ( entering ( tcp ) ) {
/* addr */
tprintf ( " %#lx " , tcp - > u_arg [ 0 ] ) ;
/* len */
tprintf ( " , %lu, " , tcp - > u_arg [ 1 ] ) ;
/* function */
function = tcp - > u_arg [ 2 ] ;
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 ( mctl_funcs , function , " MC_??? " ) ;
1999-02-19 03:21:36 +03:00
/* arg */
arg = tcp - > u_arg [ 3 ] ;
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
1999-02-19 03:21:36 +03:00
switch ( function ) {
case MC_SYNC :
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 ( mctl_sync , arg , " MS_??? " ) ;
1999-02-19 03:21:36 +03:00
break ;
case MC_LOCKAS :
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 ( mctl_lockas , arg , " MCL_??? " ) ;
1999-02-19 03:21:36 +03:00
break ;
default :
tprintf ( " %#x " , arg ) ;
break ;
}
}
return 0 ;
}
# endif /* MC_SYNC */
int
2011-05-30 16:00:14 +04:00
sys_mincore ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %#lx, %lu, " , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
} else {
2011-08-31 16:00:02 +04:00
unsigned long i , len ;
char * vec = NULL ;
1999-02-19 03:21:36 +03:00
len = tcp - > u_arg [ 1 ] ;
if ( syserror ( tcp ) | | tcp - > u_arg [ 2 ] = = 0 | |
2005-06-01 22:55:42 +04:00
( vec = malloc ( len ) ) = = NULL | |
1999-02-19 03:21:36 +03:00
umoven ( tcp , tcp - > u_arg [ 2 ] , len , vec ) < 0 )
tprintf ( " %#lx " , tcp - > u_arg [ 2 ] ) ;
else {
2011-09-01 12:00:28 +04:00
tprints ( " [ " ) ;
1999-02-19 03:21:36 +03:00
for ( i = 0 ; i < len ; i + + ) {
if ( abbrev ( tcp ) & & i > = max_strlen ) {
2011-09-01 12:00:28 +04:00
tprints ( " ... " ) ;
1999-02-19 03:21:36 +03:00
break ;
}
2011-09-01 12:00:28 +04:00
tprints ( ( vec [ i ] & 1 ) ? " 1 " : " 0 " ) ;
1999-02-19 03:21:36 +03:00
}
2011-09-01 12:00:28 +04:00
tprints ( " ] " ) ;
1999-02-19 03:21:36 +03:00
}
2011-08-31 16:00:02 +04:00
free ( vec ) ;
1999-02-19 03:21:36 +03:00
}
return 0 ;
}
2012-02-25 05:38:52 +04:00
# if defined(ALPHA) || defined(IA64) || defined(SPARC) || defined(SPARC64)
1999-02-19 03:21:36 +03:00
int
2011-05-30 16:00:14 +04:00
sys_getpagesize ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( exiting ( tcp ) )
return RVAL_HEX ;
return 0 ;
}
2012-02-25 05:38:52 +04:00
# endif
1999-02-19 03:21:36 +03:00
2012-02-25 05:47:15 +04:00
# if defined(I386)
2002-12-22 06:34:36 +03:00
void
2009-01-23 19:10:22 +03:00
print_ldt_entry ( struct modify_ldt_ldt_s * ldt_entry )
2002-12-16 02:58:17 +03:00
{
tprintf ( " base_addr:%#08lx, "
" limit:%d, "
" seg_32bit:%d, "
" contents:%d, "
" read_exec_only:%d, "
" limit_in_pages:%d, "
" seg_not_present:%d, "
" useable:%d} " ,
2009-01-23 19:10:22 +03:00
( long ) ldt_entry - > base_addr ,
2002-12-16 02:58:17 +03:00
ldt_entry - > limit ,
ldt_entry - > seg_32bit ,
ldt_entry - > contents ,
ldt_entry - > read_exec_only ,
ldt_entry - > limit_in_pages ,
ldt_entry - > seg_not_present ,
ldt_entry - > useable ) ;
}
1999-02-19 03:21:36 +03:00
int
2011-05-30 16:00:14 +04:00
sys_modify_ldt ( struct tcb * tcp )
1999-02-19 03:21:36 +03:00
{
if ( entering ( tcp ) ) {
struct modify_ldt_ldt_s copy ;
tprintf ( " %ld " , tcp - > u_arg [ 0 ] ) ;
if ( tcp - > u_arg [ 1 ] = = 0
2011-06-07 14:13:24 +04:00
| | tcp - > u_arg [ 2 ] ! = sizeof ( struct modify_ldt_ldt_s )
1999-02-19 03:21:36 +03:00
| | umove ( tcp , tcp - > u_arg [ 1 ] , & copy ) = = - 1 )
tprintf ( " , %lx " , tcp - > u_arg [ 1 ] ) ;
else {
tprintf ( " , {entry_number:%d, " , copy . entry_number ) ;
if ( ! verbose ( tcp ) )
2011-09-01 12:00:28 +04:00
tprints ( " ...} " ) ;
1999-02-19 03:21:36 +03:00
else {
2002-12-16 02:58:17 +03:00
print_ldt_entry ( & copy ) ;
1999-02-19 03:21:36 +03:00
}
}
tprintf ( " , %lu " , tcp - > u_arg [ 2 ] ) ;
}
return 0 ;
}
2002-12-16 02:58:17 +03:00
int
2011-05-30 16:00:14 +04:00
sys_set_thread_area ( struct tcb * tcp )
2002-12-16 02:58:17 +03:00
{
struct modify_ldt_ldt_s copy ;
if ( entering ( tcp ) ) {
if ( umove ( tcp , tcp - > u_arg [ 0 ] , & copy ) ! = - 1 ) {
if ( copy . entry_number = = - 1 )
tprintf ( " {entry_number:%d -> " ,
copy . entry_number ) ;
else
2011-09-01 12:00:28 +04:00
tprints ( " {entry_number: " ) ;
2002-12-16 02:58:17 +03:00
}
} else {
if ( umove ( tcp , tcp - > u_arg [ 0 ] , & copy ) ! = - 1 ) {
tprintf ( " %d, " , copy . entry_number ) ;
if ( ! verbose ( tcp ) )
2011-09-01 12:00:28 +04:00
tprints ( " ...} " ) ;
2002-12-16 02:58:17 +03:00
else {
print_ldt_entry ( & copy ) ;
}
} else {
tprintf ( " %lx " , tcp - > u_arg [ 0 ] ) ;
}
}
return 0 ;
2002-12-22 06:34:36 +03:00
2002-12-16 02:58:17 +03:00
}
int
2011-05-30 16:00:14 +04:00
sys_get_thread_area ( struct tcb * tcp )
2002-12-16 02:58:17 +03:00
{
struct modify_ldt_ldt_s copy ;
if ( exiting ( tcp ) ) {
if ( umove ( tcp , tcp - > u_arg [ 0 ] , & copy ) ! = - 1 ) {
tprintf ( " {entry_number:%d, " , copy . entry_number ) ;
if ( ! verbose ( tcp ) )
2011-09-01 12:00:28 +04:00
tprints ( " ...} " ) ;
2002-12-16 02:58:17 +03:00
else {
print_ldt_entry ( & copy ) ;
}
} else {
tprintf ( " %lx " , tcp - > u_arg [ 0 ] ) ;
}
}
return 0 ;
2002-12-22 06:34:36 +03:00
2002-12-16 02:58:17 +03:00
}
2012-02-25 05:47:15 +04:00
# endif /* I386 */
2010-05-29 00:28:51 +04:00
2012-02-25 05:38:52 +04:00
# if defined(M68K)
2010-05-29 00:28:51 +04:00
int
2011-05-30 16:00:14 +04:00
sys_set_thread_area ( struct tcb * tcp )
2010-05-29 00:28:51 +04:00
{
if ( entering ( tcp ) )
tprintf ( " %#lx " , tcp - > u_arg [ 0 ] ) ;
return 0 ;
}
int
2011-05-30 16:00:14 +04:00
sys_get_thread_area ( struct tcb * tcp )
2010-05-29 00:28:51 +04:00
{
return RVAL_HEX ;
}
# endif
2003-03-05 07:08:00 +03:00
int
2011-05-30 16:00:14 +04:00
sys_remap_file_pages ( struct tcb * tcp )
2003-03-05 07:08:00 +03:00
{
if ( entering ( tcp ) ) {
tprintf ( " %#lx, %lu, " , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
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 ( mmap_prot , tcp - > u_arg [ 2 ] , " PROT_??? " ) ;
2003-03-05 07:08:00 +03:00
tprintf ( " , %lu, " , tcp - > u_arg [ 3 ] ) ;
# ifdef MAP_TYPE
printxval ( mmap_flags , tcp - > u_arg [ 4 ] & MAP_TYPE , " MAP_??? " ) ;
addflags ( mmap_flags , tcp - > u_arg [ 4 ] & ~ MAP_TYPE ) ;
# else
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 ( mmap_flags , tcp - > u_arg [ 4 ] , " MAP_??? " ) ;
2003-03-05 07:08:00 +03:00
# endif
}
return 0 ;
}
2004-10-07 22:53:12 +04:00
# define MPOL_DEFAULT 0
# define MPOL_PREFERRED 1
# define MPOL_BIND 2
# define MPOL_INTERLEAVE 3
# define MPOL_F_NODE (1<<0)
# define MPOL_F_ADDR (1<<1)
# define MPOL_MF_STRICT (1<<0)
2007-07-24 05:52:58 +04:00
# define MPOL_MF_MOVE (1<<1)
# define MPOL_MF_MOVE_ALL (1<<2)
2004-10-07 22:53:12 +04:00
static const struct xlat policies [ ] = {
{ MPOL_DEFAULT , " MPOL_DEFAULT " } ,
{ MPOL_PREFERRED , " MPOL_PREFERRED " } ,
{ MPOL_BIND , " MPOL_BIND " } ,
{ MPOL_INTERLEAVE , " MPOL_INTERLEAVE " } ,
{ 0 , NULL }
} ;
static const struct xlat mbindflags [ ] = {
{ MPOL_MF_STRICT , " MPOL_MF_STRICT " } ,
2007-07-24 05:52:58 +04:00
{ MPOL_MF_MOVE , " MPOL_MF_MOVE " } ,
{ MPOL_MF_MOVE_ALL , " MPOL_MF_MOVE_ALL " } ,
2004-10-07 22:53:12 +04:00
{ 0 , NULL }
} ;
static const struct xlat mempolicyflags [ ] = {
{ MPOL_F_NODE , " MPOL_F_NODE " } ,
{ MPOL_F_ADDR , " MPOL_F_ADDR " } ,
{ 0 , NULL }
} ;
2007-07-24 05:52:58 +04:00
static const struct xlat move_pages_flags [ ] = {
{ MPOL_MF_MOVE , " MPOL_MF_MOVE " } ,
{ MPOL_MF_MOVE_ALL , " MPOL_MF_MOVE_ALL " } ,
{ 0 , NULL }
} ;
2004-10-07 22:53:12 +04:00
static void
2011-05-30 16:00:14 +04:00
get_nodes ( struct tcb * tcp , unsigned long ptr , unsigned long maxnodes , int err )
2004-10-07 22:53:12 +04:00
{
2005-06-01 23:22:06 +04:00
unsigned long nlongs , size , end ;
nlongs = ( maxnodes + 8 * sizeof ( long ) - 1 ) / ( 8 * sizeof ( long ) ) ;
size = nlongs * sizeof ( long ) ;
end = ptr + size ;
if ( nlongs = = 0 | | ( ( err | | verbose ( tcp ) ) & & ( size * 8 = = maxnodes )
& & ( end > ptr ) ) ) {
unsigned long n , cur , abbrev_end ;
int failed = 0 ;
if ( abbrev ( tcp ) ) {
abbrev_end = ptr + max_strlen * sizeof ( long ) ;
if ( abbrev_end < ptr )
abbrev_end = end ;
} else {
abbrev_end = end ;
}
2011-09-01 12:00:28 +04:00
tprints ( " , { " ) ;
2005-06-01 23:22:06 +04:00
for ( cur = ptr ; cur < end ; cur + = sizeof ( long ) ) {
if ( cur > ptr )
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2005-06-01 23:22:06 +04:00
if ( cur > = abbrev_end ) {
2011-09-01 12:00:28 +04:00
tprints ( " ... " ) ;
2005-06-01 23:22:06 +04:00
break ;
}
if ( umoven ( tcp , cur , sizeof ( n ) , ( char * ) & n ) < 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " ? " ) ;
2005-06-01 23:22:06 +04:00
failed = 1 ;
break ;
2004-10-07 22:53:12 +04:00
}
2005-06-01 23:22:06 +04:00
tprintf ( " %#0*lx " , ( int ) sizeof ( long ) * 2 + 2 , n ) ;
2004-10-07 22:53:12 +04:00
}
2011-09-01 12:00:28 +04:00
tprints ( " } " ) ;
2005-06-01 23:22:06 +04:00
if ( failed )
tprintf ( " %#lx " , ptr ) ;
2004-10-07 22:53:12 +04:00
} else
2005-06-01 23:22:06 +04:00
tprintf ( " , %#lx " , ptr ) ;
2004-10-07 22:53:12 +04:00
tprintf ( " , %lu " , maxnodes ) ;
}
int
2011-05-30 16:00:14 +04:00
sys_mbind ( struct tcb * tcp )
2004-10-07 22:53:12 +04:00
{
if ( entering ( tcp ) ) {
2009-12-25 02:19:35 +03:00
tprintf ( " %#lx, %lu, " , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
2004-10-07 22:53:12 +04:00
printxval ( policies , tcp - > u_arg [ 2 ] , " MPOL_??? " ) ;
get_nodes ( tcp , tcp - > u_arg [ 3 ] , tcp - > u_arg [ 4 ] , 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 ( mbindflags , tcp - > u_arg [ 5 ] , " MPOL_??? " ) ;
2004-10-07 22:53:12 +04:00
}
return 0 ;
}
int
2011-05-30 16:00:14 +04:00
sys_set_mempolicy ( struct tcb * tcp )
2004-10-07 22:53:12 +04:00
{
if ( entering ( tcp ) ) {
printxval ( policies , tcp - > u_arg [ 0 ] , " MPOL_??? " ) ;
get_nodes ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] , 0 ) ;
}
return 0 ;
}
int
2011-05-30 16:00:14 +04:00
sys_get_mempolicy ( struct tcb * tcp )
2004-10-07 22:53:12 +04:00
{
if ( exiting ( tcp ) ) {
int pol ;
if ( tcp - > u_arg [ 0 ] = = 0 )
2011-09-01 12:00:28 +04:00
tprints ( " NULL " ) ;
2004-10-07 22:53:12 +04:00
else if ( syserror ( tcp ) | | umove ( tcp , tcp - > u_arg [ 0 ] , & pol ) < 0 )
tprintf ( " %#lx " , tcp - > u_arg [ 0 ] ) ;
else
printxval ( policies , pol , " MPOL_??? " ) ;
get_nodes ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] , syserror ( tcp ) ) ;
tprintf ( " , %#lx, " , tcp - > u_arg [ 3 ] ) ;
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 ( mempolicyflags , tcp - > u_arg [ 4 ] , " MPOL_??? " ) ;
2004-10-07 22:53:12 +04:00
}
return 0 ;
}
2007-07-24 05:52:58 +04:00
2012-03-12 02:44:14 +04:00
int
sys_migrate_pages ( struct tcb * tcp )
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , ( long ) ( pid_t ) tcp - > u_arg [ 0 ] ) ;
get_nodes ( tcp , tcp - > u_arg [ 2 ] , tcp - > u_arg [ 1 ] , 0 ) ;
tprints ( " , " ) ;
get_nodes ( tcp , tcp - > u_arg [ 3 ] , tcp - > u_arg [ 1 ] , 0 ) ;
}
return 0 ;
}
2007-07-24 05:52:58 +04:00
int
2011-05-30 16:00:14 +04:00
sys_move_pages ( struct tcb * tcp )
2007-07-24 05:52:58 +04:00
{
if ( entering ( tcp ) ) {
unsigned long npages = tcp - > u_arg [ 1 ] ;
tprintf ( " %ld, %lu, " , tcp - > u_arg [ 0 ] , npages ) ;
if ( tcp - > u_arg [ 2 ] = = 0 )
2011-09-01 12:00:28 +04:00
tprints ( " NULL, " ) ;
2007-07-24 05:52:58 +04:00
else {
int i ;
long puser = tcp - > u_arg [ 2 ] ;
2011-09-01 12:00:28 +04:00
tprints ( " { " ) ;
2007-07-24 05:52:58 +04:00
for ( i = 0 ; i < npages ; + + i ) {
void * p ;
if ( i > 0 )
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2007-07-24 05:52:58 +04:00
if ( umove ( tcp , puser , & p ) < 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " ??? " ) ;
2007-07-24 05:52:58 +04:00
break ;
}
tprintf ( " %p " , p ) ;
2011-06-07 14:13:24 +04:00
puser + = sizeof ( void * ) ;
2007-07-24 05:52:58 +04:00
}
2011-09-01 12:00:28 +04:00
tprints ( " }, " ) ;
2007-07-24 05:52:58 +04:00
}
if ( tcp - > u_arg [ 3 ] = = 0 )
2011-09-01 12:00:28 +04:00
tprints ( " NULL, " ) ;
2007-07-24 05:52:58 +04:00
else {
int i ;
long nodeuser = tcp - > u_arg [ 3 ] ;
2011-09-01 12:00:28 +04:00
tprints ( " { " ) ;
2007-07-24 05:52:58 +04:00
for ( i = 0 ; i < npages ; + + i ) {
int node ;
if ( i > 0 )
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2007-07-24 05:52:58 +04:00
if ( umove ( tcp , nodeuser , & node ) < 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " ??? " ) ;
2007-07-24 05:52:58 +04:00
break ;
}
tprintf ( " %#x " , node ) ;
2011-06-07 14:13:24 +04:00
nodeuser + = sizeof ( int ) ;
2007-07-24 05:52:58 +04:00
}
2011-09-01 12:00:28 +04:00
tprints ( " }, " ) ;
2007-07-24 05:52:58 +04:00
}
}
if ( exiting ( tcp ) ) {
unsigned long npages = tcp - > u_arg [ 1 ] ;
if ( tcp - > u_arg [ 4 ] = = 0 )
2011-09-01 12:00:28 +04:00
tprints ( " NULL, " ) ;
2007-07-24 05:52:58 +04:00
else {
int i ;
long statususer = tcp - > u_arg [ 4 ] ;
2011-09-01 12:00:28 +04:00
tprints ( " { " ) ;
2007-07-24 05:52:58 +04:00
for ( i = 0 ; i < npages ; + + i ) {
int status ;
if ( i > 0 )
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2007-07-24 05:52:58 +04:00
if ( umove ( tcp , statususer , & status ) < 0 ) {
2011-09-01 12:00:28 +04:00
tprints ( " ??? " ) ;
2007-07-24 05:52:58 +04:00
break ;
}
tprintf ( " %#x " , status ) ;
2011-06-07 14:13:24 +04:00
statususer + = sizeof ( int ) ;
2007-07-24 05:52:58 +04:00
}
2011-09-01 12:00:28 +04:00
tprints ( " }, " ) ;
2007-07-24 05:52:58 +04:00
}
printflags ( move_pages_flags , tcp - > u_arg [ 5 ] , " MPOL_??? " ) ;
}
return 0 ;
}
2008-08-25 07:09:16 +04:00
2012-02-25 05:38:52 +04:00
# if defined(POWERPC)
2008-08-25 07:09:16 +04:00
int
2011-05-30 16:00:14 +04:00
sys_subpage_prot ( struct tcb * tcp )
2008-08-25 07:09:16 +04:00
{
if ( entering ( tcp ) ) {
unsigned long cur , end , abbrev_end , entries ;
unsigned int entry ;
tprintf ( " %#lx, %#lx, " , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
entries = tcp - > u_arg [ 1 ] > > 16 ;
if ( ! entries | | ! tcp - > u_arg [ 2 ] ) {
2011-09-01 12:00:28 +04:00
tprints ( " {} " ) ;
2008-08-25 07:09:16 +04:00
return 0 ;
}
cur = tcp - > u_arg [ 2 ] ;
end = cur + ( sizeof ( int ) * entries ) ;
if ( ! verbose ( tcp ) | | end < tcp - > u_arg [ 2 ] ) {
tprintf ( " %#lx " , tcp - > u_arg [ 2 ] ) ;
return 0 ;
}
if ( abbrev ( tcp ) ) {
abbrev_end = cur + ( sizeof ( int ) * max_strlen ) ;
if ( abbrev_end > end )
abbrev_end = end ;
}
else
abbrev_end = end ;
2011-09-01 12:00:28 +04:00
tprints ( " { " ) ;
2008-08-25 07:09:16 +04:00
for ( ; cur < end ; cur + = sizeof ( int ) ) {
if ( cur > tcp - > u_arg [ 2 ] )
2011-09-01 12:00:28 +04:00
tprints ( " , " ) ;
2008-08-25 07:09:16 +04:00
if ( cur > = abbrev_end ) {
2011-09-01 12:00:28 +04:00
tprints ( " ... " ) ;
2008-08-25 07:09:16 +04:00
break ;
}
if ( umove ( tcp , cur , & entry ) < 0 ) {
tprintf ( " ??? [%#lx] " , cur ) ;
break ;
}
else
tprintf ( " %#08x " , entry ) ;
}
2011-09-01 12:00:28 +04:00
tprints ( " } " ) ;
2008-08-25 07:09:16 +04:00
}
return 0 ;
}
# endif