1999-02-19 00:21:36 +00:00
/*
2002-09-23 13:30:09 +00:00
# ifdef LINUX
1999-02-19 00:21:36 +00:00
* Copyright ( c ) 1991 , 1992 Paul Kranenburg < pk @ cs . few . eur . nl >
* Copyright ( c ) 1993 Branko Lankester < branko @ hacktic . nl >
* Copyright ( c ) 1993 , 1994 , 1995 , 1996 Rick Sladkey < jrs @ world . std . com >
1999-12-23 14:20:14 +00:00
* Copyright ( c ) 1996 - 1999 Wichert Akkerman < wichert @ cistron . nl >
1999-02-19 00:21:36 +00:00
* All rights reserved .
*
* Redistribution and use in source and binary forms , with or without
* modification , are permitted provided that the following conditions
* are met :
* 1. Redistributions of source code must retain the above copyright
* notice , this list of conditions and the following disclaimer .
* 2. Redistributions in binary form must reproduce the above copyright
* notice , this list of conditions and the following disclaimer in the
* documentation and / or other materials provided with the distribution .
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission .
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ` ` AS IS ' ' AND ANY EXPRESS OR
* IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED .
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT , INDIRECT ,
* INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT
* NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE ,
* DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*
* $ Id $
*/
# include "defs.h"
# include <dirent.h>
2002-09-23 13:30:09 +00:00
# ifdef LINUX
1999-05-25 23:11:18 +00:00
# define dirent kernel_dirent
2000-09-03 21:56:29 +00:00
# define dirent64 kernel_dirent64
1999-05-25 23:11:18 +00:00
# include <linux/types.h>
# include <linux/dirent.h>
# undef dirent
2002-10-07 14:31:00 +00:00
# undef dirent64
1999-05-25 23:11:18 +00:00
# else
# define kernel_dirent dirent
# endif
1999-02-19 00:21:36 +00:00
2002-09-23 13:30:09 +00:00
# ifdef LINUX
1999-06-03 14:21:07 +00:00
# ifdef LINUXSPARC
struct stat {
unsigned short st_dev ;
unsigned int st_ino ;
unsigned short st_mode ;
short st_nlink ;
unsigned short st_uid ;
unsigned short st_gid ;
unsigned short st_rdev ;
unsigned int st_size ;
int st_atime ;
unsigned int __unused1 ;
int st_mtime ;
unsigned int __unused2 ;
int st_ctime ;
unsigned int __unused3 ;
int st_blksize ;
int st_blocks ;
unsigned int __unused4 [ 2 ] ;
} ;
2004-07-07 David S. Miller <davem@nuts.davemloft.net>
* linux/sparc/syscallent.h: Sync with reality.
* linux/sparc/syscall.h (sys_sendfile64, sys_futex, sys_gettid,
sys_sched_setaffinity, sys_sched_getaffinity, sys_setxattr,
sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr,
sys_fgetxattr, sys_listxattr, sys_llistxattr, sys_flistxattr,
sys_removexattr, sys_lremovexattr, sys_fremovexattr,
sys_remap_file_pages, sys_readahead, sys_tgkill, sys_statfs64,
sys_fstatfs64, sys_clock_settime, sys_clock_gettime,
sys_clock_getres, sys_clock_nanosleep, sys_timer_create,
sys_timer_settime, sys_timer_gettime): New declarations.
* linux/sparc64/dummy2.h, linux/sparc64/syscallent2.h,
linux/sparc64/syscall.h, linux/sparc64/errnoent.h,
linux/sparc64/errnoent1.h, linux/sparc64/errnoent2.h,
linux/sparc64/ioctlent.h, linux/sparc64/ioctlent1.h,
linux/sparc64/ioctlent2.h, linux/sparc64/signalent.h,
linux/sparc64/signalent.h, linux/sparc64/signalent.h,
linux/sparc64/signalent1.h, linux/sparc64/signalent2.h,
linux/sparc64/syscall1.h, linux/sparc64/syscallent.h,
linux/sparc64/syscallent1.h: New files.
* defs.h (LINUXSPARC): Define also when SPARC64.
(LINUX && SPARC64): Set SUPPORTED_PERSONALITIES to 3.
Ignore SIGTRAP after execve by defining TCB_WAITEXECVE.
Define possibly missing __NR_exit_group. Declare getrval2.
* configure.ac (sparc64): New architecture case.
* config.h.in (SPARC64): New define.
* file.c (stat_sparc64): New structure.
(printstat_sparc64): New output routine for that.
(printstat): Call it, if personality is 2.
(printstat64): Likewise.
* util.c: Conditionalize ptrace defines on LINUXSPARC
not LINUX && SPARC.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(_hack_syscall5): Correct trap number when SPARC64.
(PTRACE_WRITE{TEXT,DATA}): Add SPARC64 to ifdef guard.
(getpc): Handle SPARC64 && LINUX.
(printcall): Likewise.
(arg fetching/setting): Use same code for SPARC64 LINUX
as for SPARC.
(setbpt): Handle SPARC64 && LINUX.
(clearbpt): Likewise.
* signal.c: Conditionalize ptrace defines on SPARC and
SPARC64.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(m_siginfo): Use same definition on SPARC64 as SPARC.
(sys_sigreturn): Handle LINUX && SPARC64.
* syscall.c: Conditionalize ptrace defines on SPARC and
SPARC64.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(getscno): Use same static state on SPARC64 as SPARC,
and add SPARC64 handling.
(get_error): Handle LINUX && SPARC64.
(force_result): Likewise.
(syscall_enter): Likewise.
(trace_syscall): Handle sys_socketcall and sys_ipc on SPARC64
just like SPARC.
(getrval2): Handle LINUX && SPARC64.
* process.c: Conditionalize ptrace defines on SPARC and
SPARC64.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(change_syscall): Handle LINUX && SPARC64.
(struct_user_offsets): Ifdef out those which do not exist
on SPARC64.
* net.c (sys_pipe): Handle LINUX && SPARC64.
* ioctl.c: Fix initializer typo for nioctlents2, was
nioctlents1 by accident.
2004-07-12 07:44:08 +00:00
# if defined(SPARC64)
struct stat_sparc64 {
unsigned int st_dev ;
unsigned long st_ino ;
unsigned int st_mode ;
unsigned int st_nlink ;
unsigned int st_uid ;
unsigned int st_gid ;
unsigned int st_rdev ;
long st_size ;
long st_atime ;
long st_mtime ;
long st_ctime ;
long st_blksize ;
long st_blocks ;
unsigned long __unused4 [ 2 ] ;
} ;
# endif /* SPARC64 */
1999-06-03 14:21:07 +00:00
# define stat kernel_stat
# include <asm / stat.h>
# undef stat
# else
1999-07-09 00:32:54 +00:00
# undef dev_t
# undef ino_t
# undef mode_t
# undef nlink_t
# undef uid_t
# undef gid_t
# undef off_t
# undef loff_t
1999-07-08 14:00:58 +00:00
# define dev_t __kernel_dev_t
# define ino_t __kernel_ino_t
# define mode_t __kernel_mode_t
# define nlink_t __kernel_nlink_t
# define uid_t __kernel_uid_t
# define gid_t __kernel_gid_t
# define off_t __kernel_off_t
# define loff_t __kernel_loff_t
1999-06-03 14:21:07 +00:00
# include <asm / stat.h>
1999-07-08 14:00:58 +00:00
# undef dev_t
# undef ino_t
# undef mode_t
# undef nlink_t
# undef uid_t
# undef gid_t
# undef off_t
# undef loff_t
1999-07-09 00:32:54 +00:00
# define dev_t dev_t
# define ino_t ino_t
# define mode_t mode_t
# define nlink_t nlink_t
# define uid_t uid_t
# define gid_t gid_t
# define off_t off_t
# define loff_t loff_t
1999-06-03 14:21:07 +00:00
# endif
2001-03-27 12:17:16 +00:00
# ifdef HPPA /* asm-parisc/stat.h defines stat64 */
# undef stat64
# endif
1999-04-18 23:30:29 +00:00
# define stat libc_stat
1999-12-24 07:18:28 +00:00
# define stat64 libc_stat64
1999-04-18 23:30:29 +00:00
# include <sys / stat.h>
# undef stat
1999-12-24 07:18:28 +00:00
# undef stat64
2003-01-09 06:53:22 +00:00
/* These might be macros. */
# undef st_atime
# undef st_mtime
# undef st_ctime
2001-03-27 12:17:16 +00:00
# ifdef HPPA
# define stat64 hpux_stat64
# endif
1999-04-18 23:30:29 +00:00
# else
# include <sys / stat.h>
1999-04-16 00:21:26 +00:00
# endif
1999-04-18 23:30:29 +00:00
1999-02-19 00:21:36 +00:00
# include <fcntl.h>
# ifdef SVR4
# include <sys / cred.h>
# endif /* SVR4 */
2000-09-01 21:03:06 +00:00
# ifdef HAVE_SYS_VFS_H
1999-02-19 00:21:36 +00:00
# include <sys/vfs.h>
2000-09-01 21:03:06 +00:00
# endif
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
# ifdef HAVE_LINUX_XATTR_H
# include <linux/xattr.h>
# elif defined linux
# define XATTR_CREATE 1
# define XATTR_REPLACE 2
# endif
2000-09-01 21:03:06 +00:00
# ifdef FREEBSD
# include <sys/param.h>
# include <sys/mount.h>
# include <sys/stat.h>
2001-03-08 13:59:00 +00:00
# endif
# if HAVE_LONG_LONG_OFF_T
/*
* Ugly hacks for systems that have typedef long long off_t
*/
2001-03-07 16:53:07 +00:00
# define stat64 stat
# define HAVE_STAT64 1 /* Ugly hack */
2001-03-08 13:59:00 +00:00
# define sys_stat64 sys_stat
# define sys_fstat64 sys_fstat
# define sys_lstat64 sys_lstat
# define sys_lseek64 sys_lseek
# define sys_truncate64 sys_truncate
# define sys_ftruncate64 sys_ftruncate
2000-09-01 21:03:06 +00:00
# endif
1999-02-19 00:21:36 +00:00
# ifdef MAJOR_IN_SYSMACROS
# include <sys/sysmacros.h>
# endif
# ifdef MAJOR_IN_MKDEV
# include <sys/mkdev.h>
# endif
# ifdef HAVE_SYS_ASYNCH_H
# include <sys/asynch.h>
# endif
# ifdef SUNOS4
# include <ustat.h>
# endif
/*
* This is a really dirty trick but it should always work . Traditional
* Unix says r / w / rw are 0 / 1 / 2 , so we make them true flags 1 / 2 / 3 by
* adding 1. Just remember to add 1 to any arg decoded with openmodes .
*/
2004-09-04 03:39:20 +00:00
const struct xlat openmodes [ ] = {
1999-02-19 00:21:36 +00:00
{ O_RDWR + 1 , " O_RDWR " } ,
{ O_RDONLY + 1 , " O_RDONLY " } ,
{ O_WRONLY + 1 , " O_WRONLY " } ,
{ O_NONBLOCK , " O_NONBLOCK " } ,
{ O_APPEND , " O_APPEND " } ,
{ O_CREAT , " O_CREAT " } ,
{ O_TRUNC , " O_TRUNC " } ,
{ O_EXCL , " O_EXCL " } ,
{ O_NOCTTY , " O_NOCTTY " } ,
# ifdef O_SYNC
{ O_SYNC , " O_SYNC " } ,
# endif
# ifdef O_ASYNC
{ O_ASYNC , " O_ASYNC " } ,
# endif
# ifdef O_DSYNC
{ O_DSYNC , " O_DSYNC " } ,
# endif
# ifdef O_RSYNC
{ O_RSYNC , " O_RSYNC " } ,
# endif
# ifdef O_NDELAY
{ O_NDELAY , " O_NDELAY " } ,
# endif
# ifdef O_PRIV
{ O_PRIV , " O_PRIV " } ,
# endif
# ifdef O_DIRECT
2000-05-01 01:53:59 +00:00
{ O_DIRECT , " O_DIRECT " } ,
1999-02-19 00:21:36 +00:00
# endif
# ifdef O_LARGEFILE
2000-05-01 01:53:59 +00:00
{ O_LARGEFILE , " O_LARGEFILE " } ,
1999-02-19 00:21:36 +00:00
# endif
# ifdef O_DIRECTORY
2000-05-01 01:53:59 +00:00
{ O_DIRECTORY , " O_DIRECTORY " } ,
# endif
# ifdef O_NOFOLLOW
{ O_NOFOLLOW , " O_NOFOLLOW " } ,
1999-02-19 00:21:36 +00:00
# endif
# ifdef FNDELAY
{ FNDELAY , " FNDELAY " } ,
# endif
# ifdef FAPPEND
{ FAPPEND , " FAPPEND " } ,
# endif
# ifdef FMARK
{ FMARK , " FMARK " } ,
# endif
# ifdef FDEFER
{ FDEFER , " FDEFER " } ,
# endif
# ifdef FASYNC
{ FASYNC , " FASYNC " } ,
# endif
# ifdef FSHLOCK
{ FSHLOCK , " FSHLOCK " } ,
# endif
# ifdef FEXLOCK
{ FEXLOCK , " FEXLOCK " } ,
# endif
# ifdef FCREAT
{ FCREAT , " FCREAT " } ,
# endif
# ifdef FTRUNC
{ FTRUNC , " FTRUNC " } ,
# endif
# ifdef FEXCL
{ FEXCL , " FEXCL " } ,
# endif
# ifdef FNBIO
{ FNBIO , " FNBIO " } ,
# endif
# ifdef FSYNC
{ FSYNC , " FSYNC " } ,
# endif
# ifdef FNOCTTY
{ FNOCTTY , " FNOCTTY " } ,
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
# endif
2000-09-01 21:03:06 +00:00
# ifdef O_SHLOCK
{ O_SHLOCK , " O_SHLOCK " } ,
# endif
# ifdef O_EXLOCK
{ O_EXLOCK , " O_EXLOCK " } ,
1999-02-19 00:21:36 +00:00
# endif
{ 0 , NULL } ,
} ;
int
sys_open ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
/* flags */
printflags ( openmodes , tcp - > u_arg [ 1 ] + 1 ) ;
if ( tcp - > u_arg [ 1 ] & O_CREAT ) {
/* mode */
tprintf ( " , %#lo " , tcp - > u_arg [ 2 ] ) ;
}
}
return 0 ;
}
# ifdef LINUXSPARC
2004-09-04 03:39:20 +00:00
const struct xlat openmodessol [ ] = {
1999-02-19 00:21:36 +00:00
{ 0 , " O_RDWR " } ,
{ 1 , " O_RDONLY " } ,
{ 2 , " O_WRONLY " } ,
{ 0x80 , " O_NONBLOCK " } ,
{ 8 , " O_APPEND " } ,
{ 0x100 , " O_CREAT " } ,
{ 0x200 , " O_TRUNC " } ,
{ 0x400 , " O_EXCL " } ,
{ 0x800 , " O_NOCTTY " } ,
{ 0x10 , " O_SYNC " } ,
{ 0x40 , " O_DSYNC " } ,
{ 0x8000 , " O_RSYNC " } ,
{ 4 , " O_NDELAY " } ,
{ 0x1000 , " O_PRIV " } ,
{ 0 , NULL } ,
} ;
int
solaris_open ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
/* flags */
printflags ( openmodessol , tcp - > u_arg [ 1 ] + 1 ) ;
if ( tcp - > u_arg [ 1 ] & 0x100 ) {
/* mode */
tprintf ( " , %#lo " , tcp - > u_arg [ 2 ] ) ;
}
}
return 0 ;
}
# endif
int
sys_creat ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , %#lo " , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
2004-09-04 03:39:20 +00:00
static const struct xlat access_flags [ ] = {
1999-02-19 00:21:36 +00:00
{ F_OK , " F_OK " , } ,
{ R_OK , " R_OK " } ,
{ W_OK , " W_OK " } ,
{ X_OK , " X_OK " } ,
# ifdef EFF_ONLY_OK
{ EFF_ONLY_OK , " EFF_ONLY_OK " } ,
# endif
# ifdef EX_OK
{ EX_OK , " EX_OK " } ,
# endif
{ 0 , NULL } ,
} ;
int
sys_access ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
printflags ( access_flags , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
int
sys_umask ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %#lo " , tcp - > u_arg [ 0 ] ) ;
}
return RVAL_OCTAL ;
}
2004-09-04 03:39:20 +00:00
static const struct xlat whence [ ] = {
1999-02-19 00:21:36 +00:00
{ SEEK_SET , " SEEK_SET " } ,
{ SEEK_CUR , " SEEK_CUR " } ,
{ SEEK_END , " SEEK_END " } ,
{ 0 , NULL } ,
} ;
2001-03-08 13:59:00 +00:00
# ifndef HAVE_LONG_LONG_OFF_T
1999-02-19 00:21:36 +00:00
int
sys_lseek ( tcp )
struct tcb * tcp ;
{
2000-09-01 21:03:06 +00:00
off_t offset ;
int _whence ;
1999-02-19 00:21:36 +00:00
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
2000-09-01 21:03:06 +00:00
offset = tcp - > u_arg [ 1 ] ;
_whence = tcp - > u_arg [ 2 ] ;
if ( _whence = = SEEK_SET )
tprintf ( " %lu, " , offset ) ;
1999-02-19 00:21:36 +00:00
else
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
tprintf ( " %ld, " , offset ) ;
2000-09-01 21:03:06 +00:00
printxval ( whence , _whence , " SEEK_??? " ) ;
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
}
1999-02-19 00:21:36 +00:00
return RVAL_UDECIMAL ;
}
2001-03-07 13:21:24 +00:00
# endif
1999-02-19 00:21:36 +00:00
2002-09-23 13:30:09 +00:00
# ifdef LINUX
1999-02-19 00:21:36 +00:00
int
sys_llseek ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
2004-10-19 22:59:55 +00:00
/*
* This one call takes explicitly two 32 - bit arguments hi , lo ,
* rather than one 64 - bit argument for which LONG_LONG works
* appropriate for the native byte order .
*/
1999-02-19 00:21:36 +00:00
if ( tcp - > u_arg [ 4 ] = = SEEK_SET )
tprintf ( " %ld, %llu, " , tcp - > u_arg [ 0 ] ,
2004-10-19 22:59:55 +00:00
( ( ( long long int ) tcp - > u_arg [ 1 ] ) < < 32
| ( unsigned long long ) ( unsigned ) tcp - > u_arg [ 2 ] ) ) ;
1999-02-19 00:21:36 +00:00
else
tprintf ( " %ld, %lld, " , tcp - > u_arg [ 0 ] ,
2004-10-19 22:59:55 +00:00
( ( ( long long int ) tcp - > u_arg [ 1 ] ) < < 32
| ( unsigned long long ) ( unsigned ) tcp - > u_arg [ 2 ] ) ) ;
1999-02-19 00:21:36 +00:00
}
else {
1999-05-09 00:29:58 +00:00
long long int off ;
if ( syserror ( tcp ) | | umove ( tcp , tcp - > u_arg [ 3 ] , & off ) < 0 )
1999-02-19 00:21:36 +00:00
tprintf ( " %#lx, " , tcp - > u_arg [ 3 ] ) ;
1999-05-09 00:29:58 +00:00
else
tprintf ( " [%llu], " , off ) ;
1999-02-19 00:21:36 +00:00
printxval ( whence , tcp - > u_arg [ 4 ] , " SEEK_??? " ) ;
}
return 0 ;
}
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
int
sys_readahead ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, %lld, %ld " , tcp - > u_arg [ 0 ] ,
# if defined IA64 || defined X86_64 || defined ALPHA
( long long int ) tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ]
# else
2004-10-07 19:09:16 +00:00
LONG_LONG ( tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) , tcp - > u_arg [ 3 ]
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
# endif
) ;
}
return 0 ;
}
1999-02-19 00:21:36 +00:00
# endif
2001-03-08 13:59:00 +00:00
# if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
2001-03-06 15:08:09 +00:00
int
sys_lseek64 ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
2001-03-07 13:21:24 +00:00
long long offset ;
ALIGN64 ( tcp , 1 ) ; /* FreeBSD aligns off_t args */
2001-03-08 14:40:06 +00:00
offset = LONG_LONG ( tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
2001-03-06 15:08:09 +00:00
if ( tcp - > u_arg [ 3 ] = = SEEK_SET )
tprintf ( " %ld, %llu, " , tcp - > u_arg [ 0 ] , offset ) ;
else
tprintf ( " %ld, %lld, " , tcp - > u_arg [ 0 ] , offset ) ;
printxval ( whence , tcp - > u_arg [ 3 ] , " SEEK_??? " ) ;
}
return RVAL_LUDECIMAL ;
}
# endif
2001-03-08 13:59:00 +00:00
# ifndef HAVE_LONG_LONG_OFF_T
1999-02-19 00:21:36 +00:00
int
sys_truncate ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , %lu " , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
2001-03-07 13:21:24 +00:00
# endif
1999-02-19 00:21:36 +00:00
2001-03-08 13:59:00 +00:00
# if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
2001-03-06 16:50:41 +00:00
int
sys_truncate64 ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
2001-03-07 13:21:24 +00:00
ALIGN64 ( tcp , 1 ) ;
2001-03-06 16:50:41 +00:00
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
2001-03-08 14:40:06 +00:00
tprintf ( " , %llu " , LONG_LONG ( tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ) ;
2001-03-06 16:50:41 +00:00
}
return 0 ;
}
# endif
2001-03-08 13:59:00 +00:00
# ifndef HAVE_LONG_LONG_OFF_T
1999-02-19 00:21:36 +00:00
int
sys_ftruncate ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, %lu " , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
2001-03-07 13:21:24 +00:00
# endif
1999-02-19 00:21:36 +00:00
2001-03-08 13:59:00 +00:00
# if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
2001-03-06 16:50:41 +00:00
int
sys_ftruncate64 ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
2001-03-07 13:21:24 +00:00
ALIGN64 ( tcp , 1 ) ;
2001-03-06 16:50:41 +00:00
tprintf ( " %ld, %llu " , tcp - > u_arg [ 0 ] ,
2001-03-08 14:40:06 +00:00
LONG_LONG ( tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ) ;
2001-03-06 16:50:41 +00:00
}
return 0 ;
}
# endif
1999-02-19 00:21:36 +00:00
/* several stats */
2004-09-04 03:39:20 +00:00
static const struct xlat modetypes [ ] = {
1999-02-19 00:21:36 +00:00
{ S_IFREG , " S_IFREG " } ,
{ S_IFSOCK , " S_IFSOCK " } ,
{ S_IFIFO , " S_IFIFO " } ,
{ S_IFLNK , " S_IFLNK " } ,
{ S_IFDIR , " S_IFDIR " } ,
{ S_IFBLK , " S_IFBLK " } ,
{ S_IFCHR , " S_IFCHR " } ,
{ 0 , NULL } ,
} ;
2004-10-06 22:11:54 +00:00
static const char *
1999-02-19 00:21:36 +00:00
sprintmode ( mode )
int mode ;
{
static char buf [ 64 ] ;
2004-10-06 22:11:54 +00:00
const char * s ;
1999-02-19 00:21:36 +00:00
if ( ( mode & S_IFMT ) = = 0 )
s = " " ;
else if ( ( s = xlookup ( modetypes , mode & S_IFMT ) ) = = NULL ) {
sprintf ( buf , " %#o " , mode ) ;
return buf ;
}
sprintf ( buf , " %s%s%s%s " , s ,
( mode & S_ISUID ) ? " |S_ISUID " : " " ,
( mode & S_ISGID ) ? " |S_ISGID " : " " ,
( mode & S_ISVTX ) ? " |S_ISVTX " : " " ) ;
mode & = ~ ( S_IFMT | S_ISUID | S_ISGID | S_ISVTX ) ;
if ( mode )
sprintf ( buf + strlen ( buf ) , " |%#o " , mode ) ;
s = ( * buf = = ' | ' ) ? buf + 1 : buf ;
return * s ? s : " 0 " ;
}
static char *
sprinttime ( t )
time_t t ;
{
struct tm * tmp ;
static char buf [ 32 ] ;
if ( t = = 0 ) {
sprintf ( buf , " 0 " ) ;
return buf ;
}
tmp = localtime ( & t ) ;
sprintf ( buf , " %02d/%02d/%02d-%02d:%02d:%02d " ,
2000-01-11 14:41:09 +00:00
tmp - > tm_year + 1900 , tmp - > tm_mon + 1 , tmp - > tm_mday ,
1999-02-19 00:21:36 +00:00
tmp - > tm_hour , tmp - > tm_min , tmp - > tm_sec ) ;
return buf ;
}
# ifdef LINUXSPARC
typedef struct {
int tv_sec ;
int tv_nsec ;
} timestruct_t ;
struct solstat {
unsigned st_dev ;
int st_pad1 [ 3 ] ; /* network id */
unsigned st_ino ;
unsigned st_mode ;
unsigned st_nlink ;
unsigned st_uid ;
unsigned st_gid ;
unsigned st_rdev ;
int st_pad2 [ 2 ] ;
int st_size ;
int st_pad3 ; /* st_size, off_t expansion */
timestruct_t st_atime ;
timestruct_t st_mtime ;
timestruct_t st_ctime ;
int st_blksize ;
int st_blocks ;
char st_fstype [ 16 ] ;
int st_pad4 [ 8 ] ; /* expansion area */
} ;
static void
printstatsol ( tcp , addr )
struct tcb * tcp ;
2000-02-03 21:58:30 +00:00
long addr ;
1999-02-19 00:21:36 +00:00
{
struct solstat statbuf ;
if ( ! addr ) {
tprintf ( " NULL " ) ;
return ;
}
if ( syserror ( tcp ) | | ! verbose ( tcp ) ) {
2000-02-03 21:58:30 +00:00
tprintf ( " %#lx " , addr ) ;
1999-02-19 00:21:36 +00:00
return ;
}
if ( umove ( tcp , addr , & statbuf ) < 0 ) {
tprintf ( " {...} " ) ;
return ;
}
if ( ! abbrev ( tcp ) ) {
tprintf ( " {st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, " ,
( unsigned long ) ( ( statbuf . st_dev > > 18 ) & 0x3fff ) ,
( unsigned long ) ( statbuf . st_dev & 0x3ffff ) ,
( unsigned long ) statbuf . st_ino ,
sprintmode ( statbuf . st_mode ) ) ;
tprintf ( " st_nlink=%lu, st_uid=%lu, st_gid=%lu, " ,
( unsigned long ) statbuf . st_nlink ,
( unsigned long ) statbuf . st_uid ,
( unsigned long ) statbuf . st_gid ) ;
tprintf ( " st_blksize=%lu, " , ( unsigned long ) statbuf . st_blksize ) ;
tprintf ( " st_blocks=%lu, " , ( unsigned long ) statbuf . st_blocks ) ;
}
else
tprintf ( " {st_mode=%s, " , sprintmode ( statbuf . st_mode ) ) ;
switch ( statbuf . st_mode & S_IFMT ) {
case S_IFCHR : case S_IFBLK :
tprintf ( " st_rdev=makedev(%lu, %lu), " ,
( unsigned long ) ( ( statbuf . st_rdev > > 18 ) & 0x3fff ) ,
( unsigned long ) ( statbuf . st_rdev & 0x3ffff ) ) ;
break ;
default :
tprintf ( " st_size=%u, " , statbuf . st_size ) ;
break ;
}
if ( ! abbrev ( tcp ) ) {
tprintf ( " st_atime=%s, " , sprinttime ( statbuf . st_atime ) ) ;
tprintf ( " st_mtime=%s, " , sprinttime ( statbuf . st_mtime ) ) ;
tprintf ( " st_ctime=%s} " , sprinttime ( statbuf . st_ctime ) ) ;
}
else
tprintf ( " ...} " ) ;
}
2004-07-07 David S. Miller <davem@nuts.davemloft.net>
* linux/sparc/syscallent.h: Sync with reality.
* linux/sparc/syscall.h (sys_sendfile64, sys_futex, sys_gettid,
sys_sched_setaffinity, sys_sched_getaffinity, sys_setxattr,
sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr,
sys_fgetxattr, sys_listxattr, sys_llistxattr, sys_flistxattr,
sys_removexattr, sys_lremovexattr, sys_fremovexattr,
sys_remap_file_pages, sys_readahead, sys_tgkill, sys_statfs64,
sys_fstatfs64, sys_clock_settime, sys_clock_gettime,
sys_clock_getres, sys_clock_nanosleep, sys_timer_create,
sys_timer_settime, sys_timer_gettime): New declarations.
* linux/sparc64/dummy2.h, linux/sparc64/syscallent2.h,
linux/sparc64/syscall.h, linux/sparc64/errnoent.h,
linux/sparc64/errnoent1.h, linux/sparc64/errnoent2.h,
linux/sparc64/ioctlent.h, linux/sparc64/ioctlent1.h,
linux/sparc64/ioctlent2.h, linux/sparc64/signalent.h,
linux/sparc64/signalent.h, linux/sparc64/signalent.h,
linux/sparc64/signalent1.h, linux/sparc64/signalent2.h,
linux/sparc64/syscall1.h, linux/sparc64/syscallent.h,
linux/sparc64/syscallent1.h: New files.
* defs.h (LINUXSPARC): Define also when SPARC64.
(LINUX && SPARC64): Set SUPPORTED_PERSONALITIES to 3.
Ignore SIGTRAP after execve by defining TCB_WAITEXECVE.
Define possibly missing __NR_exit_group. Declare getrval2.
* configure.ac (sparc64): New architecture case.
* config.h.in (SPARC64): New define.
* file.c (stat_sparc64): New structure.
(printstat_sparc64): New output routine for that.
(printstat): Call it, if personality is 2.
(printstat64): Likewise.
* util.c: Conditionalize ptrace defines on LINUXSPARC
not LINUX && SPARC.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(_hack_syscall5): Correct trap number when SPARC64.
(PTRACE_WRITE{TEXT,DATA}): Add SPARC64 to ifdef guard.
(getpc): Handle SPARC64 && LINUX.
(printcall): Likewise.
(arg fetching/setting): Use same code for SPARC64 LINUX
as for SPARC.
(setbpt): Handle SPARC64 && LINUX.
(clearbpt): Likewise.
* signal.c: Conditionalize ptrace defines on SPARC and
SPARC64.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(m_siginfo): Use same definition on SPARC64 as SPARC.
(sys_sigreturn): Handle LINUX && SPARC64.
* syscall.c: Conditionalize ptrace defines on SPARC and
SPARC64.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(getscno): Use same static state on SPARC64 as SPARC,
and add SPARC64 handling.
(get_error): Handle LINUX && SPARC64.
(force_result): Likewise.
(syscall_enter): Likewise.
(trace_syscall): Handle sys_socketcall and sys_ipc on SPARC64
just like SPARC.
(getrval2): Handle LINUX && SPARC64.
* process.c: Conditionalize ptrace defines on SPARC and
SPARC64.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(change_syscall): Handle LINUX && SPARC64.
(struct_user_offsets): Ifdef out those which do not exist
on SPARC64.
* net.c (sys_pipe): Handle LINUX && SPARC64.
* ioctl.c: Fix initializer typo for nioctlents2, was
nioctlents1 by accident.
2004-07-12 07:44:08 +00:00
# if defined (SPARC64)
static void
printstat_sparc64 ( tcp , addr )
struct tcb * tcp ;
long addr ;
{
struct stat_sparc64 statbuf ;
if ( ! addr ) {
tprintf ( " NULL " ) ;
return ;
}
if ( syserror ( tcp ) | | ! verbose ( tcp ) ) {
tprintf ( " %#lx " , addr ) ;
return ;
}
if ( umove ( tcp , addr , & statbuf ) < 0 ) {
tprintf ( " {...} " ) ;
return ;
}
if ( ! abbrev ( tcp ) ) {
tprintf ( " {st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, " ,
( unsigned long ) major ( statbuf . st_dev ) ,
( unsigned long ) minor ( statbuf . st_dev ) ,
( unsigned long ) statbuf . st_ino ,
sprintmode ( statbuf . st_mode ) ) ;
tprintf ( " st_nlink=%lu, st_uid=%lu, st_gid=%lu, " ,
( unsigned long ) statbuf . st_nlink ,
( unsigned long ) statbuf . st_uid ,
( unsigned long ) statbuf . st_gid ) ;
tprintf ( " st_blksize=%lu, " ,
( unsigned long ) statbuf . st_blksize ) ;
tprintf ( " st_blocks=%lu, " ,
( unsigned long ) statbuf . st_blocks ) ;
}
else
tprintf ( " {st_mode=%s, " , sprintmode ( statbuf . st_mode ) ) ;
switch ( statbuf . st_mode & S_IFMT ) {
case S_IFCHR : case S_IFBLK :
tprintf ( " st_rdev=makedev(%lu, %lu), " ,
( unsigned long ) major ( statbuf . st_rdev ) ,
( unsigned long ) minor ( statbuf . st_rdev ) ) ;
break ;
default :
tprintf ( " st_size=%lu, " , statbuf . st_size ) ;
break ;
}
if ( ! abbrev ( tcp ) ) {
tprintf ( " st_atime=%s, " , sprinttime ( statbuf . st_atime ) ) ;
tprintf ( " st_mtime=%s, " , sprinttime ( statbuf . st_mtime ) ) ;
tprintf ( " st_ctime=%s " , sprinttime ( statbuf . st_ctime ) ) ;
tprintf ( " } " ) ;
}
else
tprintf ( " ...} " ) ;
}
# endif /* SPARC64 */
1999-04-18 22:50:50 +00:00
# endif /* LINUXSPARC */
1999-02-19 00:21:36 +00:00
2004-09-04 03:39:20 +00:00
const struct xlat fileflags [ ] = {
2001-03-08 16:10:40 +00:00
# ifdef FREEBSD
2000-09-01 21:03:06 +00:00
{ UF_NODUMP , " UF_NODUMP " } ,
{ UF_IMMUTABLE , " UF_IMMUTABLE " } ,
{ UF_APPEND , " UF_APPEND " } ,
{ UF_OPAQUE , " UF_OPAQUE " } ,
{ UF_NOUNLINK , " UF_NOUNLINK " } ,
{ SF_ARCHIVED , " SF_ARCHIVED " } ,
{ SF_IMMUTABLE , " SF_IMMUTABLE " } ,
{ SF_APPEND , " SF_APPEND " } ,
{ SF_NOUNLINK , " SF_NOUNLINK " } ,
2001-03-08 16:10:40 +00:00
# elif UNIXWARE >= 2
# ifdef _S_ISMLD
{ _S_ISMLD , " _S_ISMLD " } ,
# endif
# ifdef _S_ISMOUNTED
{ _S_ISMOUNTED , " _S_ISMOUNTED " } ,
# endif
# endif
2000-09-01 21:03:06 +00:00
{ 0 , NULL } ,
} ;
2001-03-08 16:10:40 +00:00
# ifdef FREEBSD
2000-09-01 21:03:06 +00:00
int
sys_chflags ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
if ( tcp - > u_arg [ 1 ] )
printflags ( fileflags , tcp - > u_arg [ 1 ] ) ;
else
tprintf ( " 0 " ) ;
}
return 0 ;
}
int
sys_fchflags ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
if ( tcp - > u_arg [ 1 ] )
printflags ( fileflags , tcp - > u_arg [ 1 ] ) ;
else
tprintf ( " 0 " ) ;
}
return 0 ;
}
# endif
2001-03-08 13:59:00 +00:00
# ifndef HAVE_LONG_LONG_OFF_T
1999-04-16 00:21:26 +00:00
static void
realprintstat ( tcp , statbuf )
struct tcb * tcp ;
struct stat * statbuf ;
{
if ( ! abbrev ( tcp ) ) {
tprintf ( " {st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, " ,
( unsigned long ) major ( statbuf - > st_dev ) ,
( unsigned long ) minor ( statbuf - > st_dev ) ,
( unsigned long ) statbuf - > st_ino ,
sprintmode ( statbuf - > st_mode ) ) ;
tprintf ( " st_nlink=%lu, st_uid=%lu, st_gid=%lu, " ,
( unsigned long ) statbuf - > st_nlink ,
( unsigned long ) statbuf - > st_uid ,
( unsigned long ) statbuf - > st_gid ) ;
2002-12-30 00:51:30 +00:00
# ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
1999-04-16 00:21:26 +00:00
tprintf ( " st_blksize=%lu, " , ( unsigned long ) statbuf - > st_blksize ) ;
2002-12-30 00:51:30 +00:00
# endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */
# ifdef HAVE_STRUCT_STAT_ST_BLOCKS
1999-04-16 00:21:26 +00:00
tprintf ( " st_blocks=%lu, " , ( unsigned long ) statbuf - > st_blocks ) ;
2002-12-30 00:51:30 +00:00
# endif /* HAVE_STRUCT_STAT_ST_BLOCKS */
1999-04-16 00:21:26 +00:00
}
else
tprintf ( " {st_mode=%s, " , sprintmode ( statbuf - > st_mode ) ) ;
switch ( statbuf - > st_mode & S_IFMT ) {
case S_IFCHR : case S_IFBLK :
2002-12-30 00:51:30 +00:00
# ifdef HAVE_STRUCT_STAT_ST_RDEV
1999-04-16 00:21:26 +00:00
tprintf ( " st_rdev=makedev(%lu, %lu), " ,
( unsigned long ) major ( statbuf - > st_rdev ) ,
( unsigned long ) minor ( statbuf - > st_rdev ) ) ;
2002-12-30 00:51:30 +00:00
# else /* !HAVE_STRUCT_STAT_ST_RDEV */
1999-04-16 00:21:26 +00:00
tprintf ( " st_size=makedev(%lu, %lu), " ,
( unsigned long ) major ( statbuf - > st_size ) ,
( unsigned long ) minor ( statbuf - > st_size ) ) ;
2002-12-30 00:51:30 +00:00
# endif /* !HAVE_STRUCT_STAT_ST_RDEV */
1999-04-16 00:21:26 +00:00
break ;
default :
tprintf ( " st_size=%lu, " , statbuf - > st_size ) ;
break ;
}
if ( ! abbrev ( tcp ) ) {
tprintf ( " st_atime=%s, " , sprinttime ( statbuf - > st_atime ) ) ;
tprintf ( " st_mtime=%s, " , sprinttime ( statbuf - > st_mtime ) ) ;
2001-03-08 16:10:40 +00:00
tprintf ( " st_ctime=%s " , sprinttime ( statbuf - > st_ctime ) ) ;
2002-12-30 00:51:30 +00:00
# if HAVE_STRUCT_STAT_ST_FLAGS
2001-03-08 16:10:40 +00:00
tprintf ( " , st_flags= " ) ;
if ( statbuf - > st_flags ) {
printflags ( fileflags , statbuf - > st_flags ) ;
} else
tprintf ( " 0 " ) ;
# endif
2002-12-30 00:51:30 +00:00
# if HAVE_STRUCT_STAT_ST_ACLCNT
2001-03-08 16:10:40 +00:00
tprintf ( " , st_aclcnt=%d " , statbuf - > st_aclcnt ) ;
# endif
2002-12-30 00:51:30 +00:00
# if HAVE_STRUCT_STAT_ST_LEVEL
2001-03-08 16:10:40 +00:00
tprintf ( " , st_level=%ld " , statbuf - > st_level ) ;
# endif
2002-12-30 00:51:30 +00:00
# if HAVE_STRUCT_STAT_ST_FSTYPE
2001-03-08 16:10:40 +00:00
tprintf ( " , st_fstype=%.*s " ,
( int ) sizeof statbuf - > st_fstype , statbuf - > st_fstype ) ;
# endif
2002-12-30 00:51:30 +00:00
# if HAVE_STRUCT_STAT_ST_GEN
2001-03-08 16:10:40 +00:00
tprintf ( " , st_gen=%u " , statbuf - > st_gen ) ;
# endif
tprintf ( " } " ) ;
1999-04-16 00:21:26 +00:00
}
else
tprintf ( " ...} " ) ;
}
1999-04-05 22:39:31 +00:00
1999-02-19 00:21:36 +00:00
static void
printstat ( tcp , addr )
struct tcb * tcp ;
2000-02-03 21:58:30 +00:00
long addr ;
1999-02-19 00:21:36 +00:00
{
1999-04-16 00:21:26 +00:00
struct stat statbuf ;
1999-02-19 00:21:36 +00:00
# ifdef LINUXSPARC
if ( current_personality = = 1 ) {
printstatsol ( tcp , addr ) ;
return ;
}
2004-07-07 David S. Miller <davem@nuts.davemloft.net>
* linux/sparc/syscallent.h: Sync with reality.
* linux/sparc/syscall.h (sys_sendfile64, sys_futex, sys_gettid,
sys_sched_setaffinity, sys_sched_getaffinity, sys_setxattr,
sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr,
sys_fgetxattr, sys_listxattr, sys_llistxattr, sys_flistxattr,
sys_removexattr, sys_lremovexattr, sys_fremovexattr,
sys_remap_file_pages, sys_readahead, sys_tgkill, sys_statfs64,
sys_fstatfs64, sys_clock_settime, sys_clock_gettime,
sys_clock_getres, sys_clock_nanosleep, sys_timer_create,
sys_timer_settime, sys_timer_gettime): New declarations.
* linux/sparc64/dummy2.h, linux/sparc64/syscallent2.h,
linux/sparc64/syscall.h, linux/sparc64/errnoent.h,
linux/sparc64/errnoent1.h, linux/sparc64/errnoent2.h,
linux/sparc64/ioctlent.h, linux/sparc64/ioctlent1.h,
linux/sparc64/ioctlent2.h, linux/sparc64/signalent.h,
linux/sparc64/signalent.h, linux/sparc64/signalent.h,
linux/sparc64/signalent1.h, linux/sparc64/signalent2.h,
linux/sparc64/syscall1.h, linux/sparc64/syscallent.h,
linux/sparc64/syscallent1.h: New files.
* defs.h (LINUXSPARC): Define also when SPARC64.
(LINUX && SPARC64): Set SUPPORTED_PERSONALITIES to 3.
Ignore SIGTRAP after execve by defining TCB_WAITEXECVE.
Define possibly missing __NR_exit_group. Declare getrval2.
* configure.ac (sparc64): New architecture case.
* config.h.in (SPARC64): New define.
* file.c (stat_sparc64): New structure.
(printstat_sparc64): New output routine for that.
(printstat): Call it, if personality is 2.
(printstat64): Likewise.
* util.c: Conditionalize ptrace defines on LINUXSPARC
not LINUX && SPARC.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(_hack_syscall5): Correct trap number when SPARC64.
(PTRACE_WRITE{TEXT,DATA}): Add SPARC64 to ifdef guard.
(getpc): Handle SPARC64 && LINUX.
(printcall): Likewise.
(arg fetching/setting): Use same code for SPARC64 LINUX
as for SPARC.
(setbpt): Handle SPARC64 && LINUX.
(clearbpt): Likewise.
* signal.c: Conditionalize ptrace defines on SPARC and
SPARC64.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(m_siginfo): Use same definition on SPARC64 as SPARC.
(sys_sigreturn): Handle LINUX && SPARC64.
* syscall.c: Conditionalize ptrace defines on SPARC and
SPARC64.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(getscno): Use same static state on SPARC64 as SPARC,
and add SPARC64 handling.
(get_error): Handle LINUX && SPARC64.
(force_result): Likewise.
(syscall_enter): Likewise.
(trace_syscall): Handle sys_socketcall and sys_ipc on SPARC64
just like SPARC.
(getrval2): Handle LINUX && SPARC64.
* process.c: Conditionalize ptrace defines on SPARC and
SPARC64.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(change_syscall): Handle LINUX && SPARC64.
(struct_user_offsets): Ifdef out those which do not exist
on SPARC64.
* net.c (sys_pipe): Handle LINUX && SPARC64.
* ioctl.c: Fix initializer typo for nioctlents2, was
nioctlents1 by accident.
2004-07-12 07:44:08 +00:00
# ifdef SPARC64
else if ( current_personality = = 2 ) {
printstat_sparc64 ( tcp , addr ) ;
return ;
}
# endif
1999-02-19 00:21:36 +00:00
# endif /* LINUXSPARC */
if ( ! addr ) {
tprintf ( " NULL " ) ;
return ;
}
if ( syserror ( tcp ) | | ! verbose ( tcp ) ) {
2000-02-03 21:58:30 +00:00
tprintf ( " %#lx " , addr ) ;
1999-02-19 00:21:36 +00:00
return ;
}
if ( umove ( tcp , addr , & statbuf ) < 0 ) {
tprintf ( " {...} " ) ;
return ;
}
1999-04-16 00:21:26 +00:00
realprintstat ( tcp , & statbuf ) ;
}
2001-03-08 13:59:00 +00:00
# endif /* !HAVE_LONG_LONG_OFF_T */
1999-04-16 00:21:26 +00:00
2000-04-10 22:22:31 +00:00
# ifdef HAVE_STAT64
1999-12-24 08:01:34 +00:00
static void
printstat64 ( tcp , addr )
struct tcb * tcp ;
2000-02-03 21:58:30 +00:00
long addr ;
1999-12-24 08:01:34 +00:00
{
struct stat64 statbuf ;
# ifdef LINUXSPARC
if ( current_personality = = 1 ) {
printstatsol ( tcp , addr ) ;
return ;
}
2004-07-07 David S. Miller <davem@nuts.davemloft.net>
* linux/sparc/syscallent.h: Sync with reality.
* linux/sparc/syscall.h (sys_sendfile64, sys_futex, sys_gettid,
sys_sched_setaffinity, sys_sched_getaffinity, sys_setxattr,
sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr,
sys_fgetxattr, sys_listxattr, sys_llistxattr, sys_flistxattr,
sys_removexattr, sys_lremovexattr, sys_fremovexattr,
sys_remap_file_pages, sys_readahead, sys_tgkill, sys_statfs64,
sys_fstatfs64, sys_clock_settime, sys_clock_gettime,
sys_clock_getres, sys_clock_nanosleep, sys_timer_create,
sys_timer_settime, sys_timer_gettime): New declarations.
* linux/sparc64/dummy2.h, linux/sparc64/syscallent2.h,
linux/sparc64/syscall.h, linux/sparc64/errnoent.h,
linux/sparc64/errnoent1.h, linux/sparc64/errnoent2.h,
linux/sparc64/ioctlent.h, linux/sparc64/ioctlent1.h,
linux/sparc64/ioctlent2.h, linux/sparc64/signalent.h,
linux/sparc64/signalent.h, linux/sparc64/signalent.h,
linux/sparc64/signalent1.h, linux/sparc64/signalent2.h,
linux/sparc64/syscall1.h, linux/sparc64/syscallent.h,
linux/sparc64/syscallent1.h: New files.
* defs.h (LINUXSPARC): Define also when SPARC64.
(LINUX && SPARC64): Set SUPPORTED_PERSONALITIES to 3.
Ignore SIGTRAP after execve by defining TCB_WAITEXECVE.
Define possibly missing __NR_exit_group. Declare getrval2.
* configure.ac (sparc64): New architecture case.
* config.h.in (SPARC64): New define.
* file.c (stat_sparc64): New structure.
(printstat_sparc64): New output routine for that.
(printstat): Call it, if personality is 2.
(printstat64): Likewise.
* util.c: Conditionalize ptrace defines on LINUXSPARC
not LINUX && SPARC.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(_hack_syscall5): Correct trap number when SPARC64.
(PTRACE_WRITE{TEXT,DATA}): Add SPARC64 to ifdef guard.
(getpc): Handle SPARC64 && LINUX.
(printcall): Likewise.
(arg fetching/setting): Use same code for SPARC64 LINUX
as for SPARC.
(setbpt): Handle SPARC64 && LINUX.
(clearbpt): Likewise.
* signal.c: Conditionalize ptrace defines on SPARC and
SPARC64.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(m_siginfo): Use same definition on SPARC64 as SPARC.
(sys_sigreturn): Handle LINUX && SPARC64.
* syscall.c: Conditionalize ptrace defines on SPARC and
SPARC64.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(getscno): Use same static state on SPARC64 as SPARC,
and add SPARC64 handling.
(get_error): Handle LINUX && SPARC64.
(force_result): Likewise.
(syscall_enter): Likewise.
(trace_syscall): Handle sys_socketcall and sys_ipc on SPARC64
just like SPARC.
(getrval2): Handle LINUX && SPARC64.
* process.c: Conditionalize ptrace defines on SPARC and
SPARC64.
(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
to PTRACE_FOOREGS64 so that more sparc code can be shared
between 64-bit and 32-bit.
(change_syscall): Handle LINUX && SPARC64.
(struct_user_offsets): Ifdef out those which do not exist
on SPARC64.
* net.c (sys_pipe): Handle LINUX && SPARC64.
* ioctl.c: Fix initializer typo for nioctlents2, was
nioctlents1 by accident.
2004-07-12 07:44:08 +00:00
# ifdef SPARC64
else if ( current_personality = = 2 ) {
printstat_sparc64 ( tcp , addr ) ;
return ;
}
# endif
1999-12-24 08:01:34 +00:00
# endif /* LINUXSPARC */
if ( ! addr ) {
tprintf ( " NULL " ) ;
return ;
}
if ( syserror ( tcp ) | | ! verbose ( tcp ) ) {
2000-02-03 21:58:30 +00:00
tprintf ( " %#lx " , addr ) ;
1999-12-24 08:01:34 +00:00
return ;
}
if ( umove ( tcp , addr , & statbuf ) < 0 ) {
tprintf ( " {...} " ) ;
return ;
}
if ( ! abbrev ( tcp ) ) {
2000-08-10 18:16:15 +00:00
# ifdef HAVE_LONG_LONG
tprintf ( " {st_dev=makedev(%lu, %lu), st_ino=%llu, st_mode=%s, " ,
# else
1999-12-24 08:01:34 +00:00
tprintf ( " {st_dev=makedev(%lu, %lu), st_ino=%lu, st_mode=%s, " ,
2000-08-10 18:16:15 +00:00
# endif
1999-12-24 08:01:34 +00:00
( unsigned long ) major ( statbuf . st_dev ) ,
( unsigned long ) minor ( statbuf . st_dev ) ,
2000-08-10 18:16:15 +00:00
# ifdef HAVE_LONG_LONG
( unsigned long long ) statbuf . st_ino ,
# else
1999-12-24 08:01:34 +00:00
( unsigned long ) statbuf . st_ino ,
2000-08-10 18:16:15 +00:00
# endif
1999-12-24 08:01:34 +00:00
sprintmode ( statbuf . st_mode ) ) ;
tprintf ( " st_nlink=%lu, st_uid=%lu, st_gid=%lu, " ,
( unsigned long ) statbuf . st_nlink ,
( unsigned long ) statbuf . st_uid ,
( unsigned long ) statbuf . st_gid ) ;
2002-12-30 00:51:30 +00:00
# ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
1999-12-24 08:01:34 +00:00
tprintf ( " st_blksize=%lu, " ,
( unsigned long ) statbuf . st_blksize ) ;
2002-12-30 00:51:30 +00:00
# endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */
# ifdef HAVE_STRUCT_STAT_ST_BLOCKS
1999-12-24 08:01:34 +00:00
tprintf ( " st_blocks=%lu, " , ( unsigned long ) statbuf . st_blocks ) ;
2002-12-30 00:51:30 +00:00
# endif /* HAVE_STRUCT_STAT_ST_BLOCKS */
1999-12-24 08:01:34 +00:00
}
else
tprintf ( " {st_mode=%s, " , sprintmode ( statbuf . st_mode ) ) ;
switch ( statbuf . st_mode & S_IFMT ) {
case S_IFCHR : case S_IFBLK :
2002-12-30 00:51:30 +00:00
# ifdef HAVE_STRUCT_STAT_ST_RDEV
1999-12-24 08:01:34 +00:00
tprintf ( " st_rdev=makedev(%lu, %lu), " ,
( unsigned long ) major ( statbuf . st_rdev ) ,
( unsigned long ) minor ( statbuf . st_rdev ) ) ;
2002-12-30 00:51:30 +00:00
# else /* !HAVE_STRUCT_STAT_ST_RDEV */
1999-12-24 08:01:34 +00:00
tprintf ( " st_size=makedev(%lu, %lu), " ,
( unsigned long ) major ( statbuf . st_size ) ,
( unsigned long ) minor ( statbuf . st_size ) ) ;
2002-12-30 00:51:30 +00:00
# endif /* !HAVE_STRUCT_STAT_ST_RDEV */
1999-12-24 08:01:34 +00:00
break ;
default :
tprintf ( " st_size=%llu, " , statbuf . st_size ) ;
break ;
}
if ( ! abbrev ( tcp ) ) {
tprintf ( " st_atime=%s, " , sprinttime ( statbuf . st_atime ) ) ;
tprintf ( " st_mtime=%s, " , sprinttime ( statbuf . st_mtime ) ) ;
2001-03-08 16:10:40 +00:00
tprintf ( " st_ctime=%s " , sprinttime ( statbuf . st_ctime ) ) ;
2002-12-30 00:51:30 +00:00
# if HAVE_STRUCT_STAT_ST_FLAGS
2001-03-08 16:10:40 +00:00
tprintf ( " , st_flags= " ) ;
2001-03-07 16:53:07 +00:00
if ( statbuf . st_flags ) {
printflags ( fileflags , statbuf . st_flags ) ;
} else
tprintf ( " 0 " ) ;
2001-03-08 16:10:40 +00:00
# endif
2002-12-30 00:51:30 +00:00
# if HAVE_STRUCT_STAT_ST_ACLCNT
2001-03-08 16:10:40 +00:00
tprintf ( " , st_aclcnt=%d " , statbuf . st_aclcnt ) ;
# endif
2002-12-30 00:51:30 +00:00
# if HAVE_STRUCT_STAT_ST_LEVEL
2001-03-08 16:10:40 +00:00
tprintf ( " , st_level=%ld " , statbuf . st_level ) ;
# endif
2002-12-30 00:51:30 +00:00
# if HAVE_STRUCT_STAT_ST_FSTYPE
2001-03-08 16:10:40 +00:00
tprintf ( " , st_fstype=%.*s " ,
( int ) sizeof statbuf . st_fstype , statbuf . st_fstype ) ;
# endif
2002-12-30 00:51:30 +00:00
# if HAVE_STRUCT_STAT_ST_GEN
2001-03-08 16:10:40 +00:00
tprintf ( " , st_gen=%u " , statbuf . st_gen ) ;
# endif
tprintf ( " } " ) ;
1999-12-24 08:01:34 +00:00
}
else
tprintf ( " ...} " ) ;
}
2000-04-10 22:22:31 +00:00
# endif /* HAVE_STAT64 */
1999-12-24 08:01:34 +00:00
2003-06-27 21:20:09 +00:00
# if defined(LINUX) && defined(HAVE_STRUCT___OLD_KERNEL_STAT)
1999-04-16 00:21:26 +00:00
static void
convertoldstat ( oldbuf , newbuf )
1999-04-18 19:35:42 +00:00
const struct __old_kernel_stat * oldbuf ;
struct stat * newbuf ;
1999-04-16 00:21:26 +00:00
{
newbuf - > st_dev = oldbuf - > st_dev ;
newbuf - > st_ino = oldbuf - > st_ino ;
newbuf - > st_mode = oldbuf - > st_mode ;
newbuf - > st_nlink = oldbuf - > st_nlink ;
newbuf - > st_uid = oldbuf - > st_uid ;
newbuf - > st_gid = oldbuf - > st_gid ;
newbuf - > st_rdev = oldbuf - > st_rdev ;
newbuf - > st_size = oldbuf - > st_size ;
newbuf - > st_atime = oldbuf - > st_atime ;
newbuf - > st_mtime = oldbuf - > st_mtime ;
newbuf - > st_ctime = oldbuf - > st_ctime ;
newbuf - > st_blksize = 0 ; /* not supported in old_stat */
newbuf - > st_blocks = 0 ; /* not supported in old_stat */
}
static void
printoldstat ( tcp , addr )
struct tcb * tcp ;
2000-02-03 21:58:30 +00:00
long addr ;
1999-04-16 00:21:26 +00:00
{
1999-04-18 19:35:42 +00:00
struct __old_kernel_stat statbuf ;
struct stat newstatbuf ;
1999-04-16 00:21:26 +00:00
# ifdef LINUXSPARC
if ( current_personality = = 1 ) {
printstatsol ( tcp , addr ) ;
return ;
}
# endif /* LINUXSPARC */
if ( ! addr ) {
tprintf ( " NULL " ) ;
return ;
1999-02-19 00:21:36 +00:00
}
1999-04-16 00:21:26 +00:00
if ( syserror ( tcp ) | | ! verbose ( tcp ) ) {
2000-02-03 21:58:30 +00:00
tprintf ( " %#lx " , addr ) ;
1999-04-16 00:21:26 +00:00
return ;
1999-02-19 00:21:36 +00:00
}
1999-04-16 00:21:26 +00:00
if ( umove ( tcp , addr , & statbuf ) < 0 ) {
tprintf ( " {...} " ) ;
return ;
1999-02-19 00:21:36 +00:00
}
1999-04-16 00:21:26 +00:00
convertoldstat ( & statbuf , & newstatbuf ) ;
realprintstat ( tcp , & newstatbuf ) ;
1999-02-19 00:21:36 +00:00
}
2002-10-07 14:31:00 +00:00
# endif /* LINUX && !IA64 && !HPPA && !X86_64 && !S390 && !S390X */
1999-04-16 00:21:26 +00:00
2001-03-08 13:59:00 +00:00
# ifndef HAVE_LONG_LONG_OFF_T
1999-02-19 00:21:36 +00:00
int
sys_stat ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
} else {
printstat ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
2001-03-07 16:53:07 +00:00
# endif
1999-02-19 00:21:36 +00:00
1999-12-24 08:01:34 +00:00
int
sys_stat64 ( tcp )
struct tcb * tcp ;
{
# ifdef HAVE_STAT64
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
} else {
printstat64 ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
# else
return printargs ( tcp ) ;
# endif
}
2003-06-27 21:20:09 +00:00
# if defined(LINUX) && defined(HAVE_STRUCT___OLD_KERNEL_STAT)
1999-04-16 00:21:26 +00:00
int
sys_oldstat ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
} else {
printoldstat ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
2003-06-27 21:20:09 +00:00
# endif /* LINUX && HAVE_STRUCT___OLD_KERNEL_STAT */
1999-04-16 00:21:26 +00:00
2001-03-08 13:59:00 +00:00
# ifndef HAVE_LONG_LONG_OFF_T
1999-02-19 00:21:36 +00:00
int
sys_fstat ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) )
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
else {
printstat ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
2001-03-07 16:53:07 +00:00
# endif
1999-02-19 00:21:36 +00:00
1999-12-24 08:01:34 +00:00
int
sys_fstat64 ( tcp )
struct tcb * tcp ;
{
# ifdef HAVE_STAT64
if ( entering ( tcp ) )
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
else {
printstat64 ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
# else
return printargs ( tcp ) ;
# endif
}
2003-06-27 21:20:09 +00:00
# if defined(LINUX) && defined(HAVE_STRUCT___OLD_KERNEL_STAT)
1999-04-16 00:21:26 +00:00
int
sys_oldfstat ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) )
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
else {
printoldstat ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
2003-06-27 21:20:09 +00:00
# endif /* LINUX && HAVE_STRUCT___OLD_KERNEL_STAT */
1999-04-16 00:21:26 +00:00
2001-03-08 13:59:00 +00:00
# ifndef HAVE_LONG_LONG_OFF_T
1999-02-19 00:21:36 +00:00
int
sys_lstat ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
} else {
printstat ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
2001-03-07 16:53:07 +00:00
# endif
1999-02-19 00:21:36 +00:00
1999-12-24 08:01:34 +00:00
int
sys_lstat64 ( tcp )
struct tcb * tcp ;
{
# ifdef HAVE_STAT64
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
} else {
printstat64 ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
# else
return printargs ( tcp ) ;
# endif
}
2003-06-27 21:20:09 +00:00
# if defined(LINUX) && defined(HAVE_STRUCT___OLD_KERNEL_STAT)
1999-04-16 00:21:26 +00:00
int
sys_oldlstat ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
} else {
printoldstat ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
2003-06-27 21:20:09 +00:00
# endif /* LINUX && HAVE_STRUCT___OLD_KERNEL_STAT */
1999-04-16 00:21:26 +00:00
1999-02-19 00:21:36 +00:00
# if defined(SVR4) || defined(LINUXSPARC)
int
sys_xstat ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
printpath ( tcp , tcp - > u_arg [ 1 ] ) ;
tprintf ( " , " ) ;
} else {
2001-03-06 09:45:18 +00:00
# ifdef _STAT64_VER
if ( tcp - > u_arg [ 0 ] = = _STAT64_VER )
printstat64 ( tcp , tcp - > u_arg [ 2 ] ) ;
else
# endif
1999-02-19 00:21:36 +00:00
printstat ( tcp , tcp - > u_arg [ 2 ] ) ;
}
return 0 ;
}
int
sys_fxstat ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) )
tprintf ( " %ld, %ld, " , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
else {
2001-03-06 09:45:18 +00:00
# ifdef _STAT64_VER
if ( tcp - > u_arg [ 0 ] = = _STAT64_VER )
printstat64 ( tcp , tcp - > u_arg [ 2 ] ) ;
else
# endif
1999-02-19 00:21:36 +00:00
printstat ( tcp , tcp - > u_arg [ 2 ] ) ;
}
return 0 ;
}
int
sys_lxstat ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
printpath ( tcp , tcp - > u_arg [ 1 ] ) ;
tprintf ( " , " ) ;
} else {
2001-03-06 09:45:18 +00:00
# ifdef _STAT64_VER
if ( tcp - > u_arg [ 0 ] = = _STAT64_VER )
printstat64 ( tcp , tcp - > u_arg [ 2 ] ) ;
else
# endif
1999-02-19 00:21:36 +00:00
printstat ( tcp , tcp - > u_arg [ 2 ] ) ;
}
return 0 ;
}
int
sys_xmknod ( tcp )
struct tcb * tcp ;
{
int mode = tcp - > u_arg [ 2 ] ;
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
printpath ( tcp , tcp - > u_arg [ 1 ] ) ;
tprintf ( " , %s " , sprintmode ( mode ) ) ;
switch ( mode & S_IFMT ) {
case S_IFCHR : case S_IFBLK :
# ifdef LINUXSPARC
tprintf ( " , makedev(%lu, %lu) " ,
( unsigned long ) ( ( tcp - > u_arg [ 3 ] > > 18 ) & 0x3fff ) ,
( unsigned long ) ( tcp - > u_arg [ 3 ] & 0x3ffff ) ) ;
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
# else
1999-02-19 00:21:36 +00:00
tprintf ( " , makedev(%lu, %lu) " ,
( unsigned long ) major ( tcp - > u_arg [ 3 ] ) ,
( unsigned long ) minor ( tcp - > u_arg [ 3 ] ) ) ;
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
# endif
1999-02-19 00:21:36 +00:00
break ;
default :
break ;
}
}
return 0 ;
}
1999-06-11 13:18:40 +00:00
# ifdef HAVE_SYS_ACL_H
# include <sys/acl.h>
2004-09-04 03:39:20 +00:00
const struct xlat aclcmds [ ] = {
1999-11-26 09:54:08 +00:00
# ifdef SETACL
1999-06-11 13:18:40 +00:00
{ SETACL , " SETACL " } ,
1999-11-26 09:54:08 +00:00
# endif
# ifdef GETACL
1999-06-11 13:18:40 +00:00
{ GETACL , " GETACL " } ,
1999-11-26 09:54:08 +00:00
# endif
# ifdef GETACLCNT
1999-06-11 13:18:40 +00:00
{ GETACLCNT , " GETACLCNT " } ,
1999-11-26 09:54:08 +00:00
# endif
# ifdef ACL_GET
{ ACL_GET , " ACL_GET " } ,
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
# endif
1999-11-26 09:54:08 +00:00
# ifdef ACL_SET
{ ACL_SET , " ACL_SET " } ,
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
# endif
1999-11-26 09:54:08 +00:00
# ifdef ACL_CNT
{ ACL_CNT , " ACL_CNT " } ,
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
# endif
1999-06-11 13:18:40 +00:00
{ 0 , NULL } ,
} ;
int
sys_acl ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
printxval ( aclcmds , tcp - > u_arg [ 1 ] , " ???ACL??? " ) ;
tprintf ( " , %ld " , tcp - > u_arg [ 2 ] ) ;
/*
* FIXME - dump out the list of aclent_t ' s pointed to
* by " tcp->u_arg[3] " if it ' s not NULL .
*/
if ( tcp - > u_arg [ 3 ] )
tprintf ( " , %#lx " , tcp - > u_arg [ 3 ] ) ;
else
tprintf ( " , NULL " ) ;
}
return 0 ;
}
int
sys_facl ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
printxval ( aclcmds , tcp - > u_arg [ 1 ] , " ???ACL??? " ) ;
tprintf ( " , %ld " , tcp - > u_arg [ 2 ] ) ;
/*
* FIXME - dump out the list of aclent_t ' s pointed to
* by " tcp->u_arg[3] " if it ' s not NULL .
*/
if ( tcp - > u_arg [ 3 ] )
tprintf ( " , %#lx " , tcp - > u_arg [ 3 ] ) ;
else
tprintf ( " , NULL " ) ;
}
return 0 ;
}
1999-11-26 09:54:08 +00:00
2004-09-04 03:39:20 +00:00
const struct xlat aclipc [ ] = {
1999-11-26 09:54:08 +00:00
# ifdef IPC_SHM
{ IPC_SHM , " IPC_SHM " } ,
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
# endif
1999-11-26 09:54:08 +00:00
# ifdef IPC_SEM
{ IPC_SEM , " IPC_SEM " } ,
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
# endif
1999-11-26 09:54:08 +00:00
# ifdef IPC_MSG
{ IPC_MSG , " IPC_MSG " } ,
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
# endif
1999-11-26 09:54:08 +00:00
{ 0 , NULL } ,
} ;
int
sys_aclipc ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printxval ( aclipc , tcp - > u_arg [ 0 ] , " ???IPC??? " ) ;
tprintf ( " , %#lx, " , tcp - > u_arg [ 1 ] ) ;
printxval ( aclcmds , tcp - > u_arg [ 2 ] , " ???ACL??? " ) ;
tprintf ( " , %ld " , tcp - > u_arg [ 3 ] ) ;
/*
* FIXME - dump out the list of aclent_t ' s pointed to
* by " tcp->u_arg[4] " if it ' s not NULL .
*/
if ( tcp - > u_arg [ 4 ] )
tprintf ( " , %#lx " , tcp - > u_arg [ 4 ] ) ;
else
tprintf ( " , NULL " ) ;
}
return 0 ;
}
1999-06-11 13:18:40 +00:00
# endif /* HAVE_SYS_ACL_H */
1999-02-19 00:21:36 +00:00
# endif /* SVR4 || LINUXSPARC */
2002-09-23 13:30:09 +00:00
# ifdef LINUX
1999-02-19 00:21:36 +00:00
2004-09-04 03:39:20 +00:00
static const struct xlat fsmagic [ ] = {
2000-06-27 17:33:32 +00:00
{ 0x73757245 , " CODA_SUPER_MAGIC " } ,
{ 0x012ff7b7 , " COH_SUPER_MAGIC " } ,
{ 0x1373 , " DEVFS_SUPER_MAGIC " } ,
{ 0x1cd1 , " DEVPTS_SUPER_MAGIC " } ,
{ 0x414A53 , " EFS_SUPER_MAGIC " } ,
1999-02-19 00:21:36 +00:00
{ 0xef51 , " EXT2_OLD_SUPER_MAGIC " } ,
{ 0xef53 , " EXT2_SUPER_MAGIC " } ,
{ 0x137d , " EXT_SUPER_MAGIC " } ,
2000-06-27 17:33:32 +00:00
{ 0xf995e849 , " HPFS_SUPER_MAGIC " } ,
1999-02-19 00:21:36 +00:00
{ 0x9660 , " ISOFS_SUPER_MAGIC " } ,
{ 0x137f , " MINIX_SUPER_MAGIC " } ,
{ 0x138f , " MINIX_SUPER_MAGIC2 " } ,
1999-05-09 00:29:58 +00:00
{ 0x2468 , " MINIX2_SUPER_MAGIC " } ,
{ 0x2478 , " MINIX2_SUPER_MAGIC2 " } ,
1999-02-19 00:21:36 +00:00
{ 0x4d44 , " MSDOS_SUPER_MAGIC " } ,
2000-06-27 17:33:32 +00:00
{ 0x564c , " NCP_SUPER_MAGIC " } ,
1999-02-19 00:21:36 +00:00
{ 0x6969 , " NFS_SUPER_MAGIC " } ,
{ 0x9fa0 , " PROC_SUPER_MAGIC " } ,
2000-06-27 17:33:32 +00:00
{ 0x002f , " QNX4_SUPER_MAGIC " } ,
{ 0x52654973 , " REISERFS_SUPER_MAGIC " } ,
{ 0x02011994 , " SHMFS_SUPER_MAGIC " } ,
{ 0x517b , " SMB_SUPER_MAGIC " } ,
{ 0x012ff7b6 , " SYSV2_SUPER_MAGIC " } ,
{ 0x012ff7b5 , " SYSV4_SUPER_MAGIC " } ,
{ 0x00011954 , " UFS_MAGIC " } ,
{ 0x54190100 , " UFS_CIGAM " } ,
{ 0x012ff7b4 , " XENIX_SUPER_MAGIC " } ,
1999-02-19 00:21:36 +00:00
{ 0x012fd16d , " XIAFS_SUPER_MAGIC " } ,
2004-01-13 10:13:45 +00:00
{ 0x62656572 , " SYSFS_MAGIC " } ,
1999-02-19 00:21:36 +00:00
{ 0 , NULL } ,
} ;
2002-09-23 13:30:09 +00:00
# endif /* LINUX */
1999-02-19 00:21:36 +00:00
# ifndef SVR4
2004-10-06 22:11:54 +00:00
static const char *
1999-02-19 00:21:36 +00:00
sprintfstype ( magic )
int magic ;
{
static char buf [ 32 ] ;
2002-09-23 13:30:09 +00:00
# ifdef LINUX
2004-10-06 22:11:54 +00:00
const char * s ;
1999-02-19 00:21:36 +00:00
s = xlookup ( fsmagic , magic ) ;
if ( s ) {
sprintf ( buf , " \" %s \" " , s ) ;
return buf ;
}
2002-09-23 13:30:09 +00:00
# endif /* LINUX */
1999-02-19 00:21:36 +00:00
sprintf ( buf , " %#x " , magic ) ;
return buf ;
}
static void
printstatfs ( tcp , addr )
struct tcb * tcp ;
long addr ;
{
struct statfs statbuf ;
if ( syserror ( tcp ) | | ! verbose ( tcp ) ) {
tprintf ( " %#lx " , addr ) ;
return ;
}
if ( umove ( tcp , addr , & statbuf ) < 0 ) {
tprintf ( " {...} " ) ;
return ;
}
# ifdef ALPHA
tprintf ( " {f_type=%s, f_fbsize=%u, f_blocks=%u, f_bfree=%u, " ,
sprintfstype ( statbuf . f_type ) ,
statbuf . f_bsize , statbuf . f_blocks , statbuf . f_bfree ) ;
2003-07-17 09:03:02 +00:00
tprintf ( " f_bavail=%u, f_files=%u, f_ffree=%u, f_fsid={%d, %d}, f_namelen=%u " ,
statbuf . f_bavail , statbuf . f_files , statbuf . f_ffree ,
statbuf . f_fsid . __val [ 0 ] , statbuf . f_fsid . __val [ 1 ] ,
statbuf . f_namelen ) ;
1999-02-19 00:21:36 +00:00
# else /* !ALPHA */
tprintf ( " {f_type=%s, f_bsize=%lu, f_blocks=%lu, f_bfree=%lu, " ,
sprintfstype ( statbuf . f_type ) ,
1999-04-06 01:37:51 +00:00
( unsigned long ) statbuf . f_bsize ,
( unsigned long ) statbuf . f_blocks ,
( unsigned long ) statbuf . f_bfree ) ;
2003-07-17 09:03:02 +00:00
tprintf ( " f_bavail=%lu, f_files=%lu, f_ffree=%lu, f_fsid={%d, %d} " ,
( unsigned long ) statbuf . f_bavail ,
1999-04-06 01:37:51 +00:00
( unsigned long ) statbuf . f_files ,
2003-07-17 09:03:02 +00:00
( unsigned long ) statbuf . f_ffree ,
statbuf . f_fsid . __val [ 0 ] , statbuf . f_fsid . __val [ 1 ] ) ;
2002-09-23 13:30:09 +00:00
# ifdef LINUX
1999-05-09 00:29:58 +00:00
tprintf ( " , f_namelen=%lu " , ( unsigned long ) statbuf . f_namelen ) ;
2002-09-23 13:30:09 +00:00
# endif /* LINUX */
1999-02-19 00:21:36 +00:00
# endif /* !ALPHA */
2003-07-17 09:03:02 +00:00
# ifdef _STATFS_F_FRSIZE
tprintf ( " , f_frsize=%lu " , ( unsigned long ) statbuf . f_frsize ) ;
# endif
1999-02-19 00:21:36 +00:00
tprintf ( " } " ) ;
}
int
sys_statfs ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
} else {
printstatfs ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
int
sys_fstatfs ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %lu, " , tcp - > u_arg [ 0 ] ) ;
} else {
printstatfs ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
2003-07-17 09:03:02 +00:00
# ifdef LINUX
static void
printstatfs64 ( tcp , addr )
struct tcb * tcp ;
long addr ;
{
struct statfs64 statbuf ;
if ( syserror ( tcp ) | | ! verbose ( tcp ) ) {
tprintf ( " %#lx " , addr ) ;
return ;
}
if ( umove ( tcp , addr , & statbuf ) < 0 ) {
tprintf ( " {...} " ) ;
return ;
}
# ifdef ALPHA
tprintf ( " {f_type=%s, f_fbsize=%u, f_blocks=%u, f_bfree=%u, " ,
sprintfstype ( statbuf . f_type ) ,
statbuf . f_bsize , statbuf . f_blocks , statbuf . f_bfree ) ;
tprintf ( " f_bavail=%u, f_files=%u, f_ffree=%u, f_fsid={%d, %d}, f_namelen=%u " ,
statbuf . f_bavail , statbuf . f_files , statbuf . f_ffree ,
statbuf . f_fsid . __val [ 0 ] , statbuf . f_fsid . __val [ 1 ] ,
statbuf . f_namelen ) ;
# else /* !ALPHA */
tprintf ( " {f_type=%s, f_bsize=%lu, f_blocks=%lu, f_bfree=%lu, " ,
sprintfstype ( statbuf . f_type ) ,
( unsigned long ) statbuf . f_bsize ,
( unsigned long ) statbuf . f_blocks ,
( unsigned long ) statbuf . f_bfree ) ;
tprintf ( " f_bavail=%lu, f_files=%lu, f_ffree=%lu, f_fsid={%d, %d} " ,
( unsigned long ) statbuf . f_bavail ,
( unsigned long ) statbuf . f_files ,
( unsigned long ) statbuf . f_ffree ,
statbuf . f_fsid . __val [ 0 ] , statbuf . f_fsid . __val [ 1 ] ) ;
tprintf ( " , f_namelen=%lu " , ( unsigned long ) statbuf . f_namelen ) ;
# endif /* !ALPHA */
# ifdef _STATFS_F_FRSIZE
tprintf ( " , f_frsize=%lu " , ( unsigned long ) statbuf . f_frsize ) ;
# endif
tprintf ( " } " ) ;
}
int
sys_statfs64 ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , %lu, " , tcp - > u_arg [ 1 ] ) ;
} else {
if ( tcp - > u_arg [ 1 ] = = sizeof ( struct statfs64 ) )
printstatfs64 ( tcp , tcp - > u_arg [ 2 ] ) ;
else
tprintf ( " {???} " ) ;
}
return 0 ;
}
int
sys_fstatfs64 ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %lu, %lu, " , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
} else {
if ( tcp - > u_arg [ 1 ] = = sizeof ( struct statfs64 ) )
printstatfs64 ( tcp , tcp - > u_arg [ 2 ] ) ;
else
tprintf ( " {???} " ) ;
}
return 0 ;
}
# endif
2002-09-23 13:30:09 +00:00
# if defined(LINUX) && defined(__alpha)
1999-02-19 00:21:36 +00:00
int
osf_statfs ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
} else {
printstatfs ( tcp , tcp - > u_arg [ 1 ] ) ;
tprintf ( " , %lu " , tcp - > u_arg [ 2 ] ) ;
}
return 0 ;
}
int
osf_fstatfs ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %lu, " , tcp - > u_arg [ 0 ] ) ;
} else {
printstatfs ( tcp , tcp - > u_arg [ 1 ] ) ;
tprintf ( " , %lu " , tcp - > u_arg [ 2 ] ) ;
}
return 0 ;
}
2002-09-23 13:30:09 +00:00
# endif /* LINUX && __alpha */
1999-02-19 00:21:36 +00:00
# endif /* !SVR4 */
# ifdef SUNOS4
int
sys_ustat ( tcp )
struct tcb * tcp ;
{
struct ustat statbuf ;
if ( entering ( tcp ) ) {
tprintf ( " makedev(%lu, %lu), " ,
( long ) major ( tcp - > u_arg [ 0 ] ) ,
( long ) minor ( tcp - > u_arg [ 0 ] ) ) ;
}
else {
if ( syserror ( tcp ) | | ! verbose ( tcp ) )
tprintf ( " %#lx " , tcp - > u_arg [ 1 ] ) ;
else if ( umove ( tcp , tcp - > u_arg [ 1 ] , & statbuf ) < 0 )
tprintf ( " {...} " ) ;
else {
tprintf ( " {f_tfree=%lu, f_tinode=%lu, " ,
statbuf . f_tfree , statbuf . f_tinode ) ;
tprintf ( " f_fname= \" %.*s \" , " ,
( int ) sizeof ( statbuf . f_fname ) ,
statbuf . f_fname ) ;
tprintf ( " f_fpack= \" %.*s \" } " ,
( int ) sizeof ( statbuf . f_fpack ) ,
statbuf . f_fpack ) ;
}
}
return 0 ;
}
# endif /* SUNOS4 */
2000-04-10 22:22:31 +00:00
int
sys_pivotroot ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
printpath ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
1999-02-19 00:21:36 +00:00
/* directory */
int
sys_chdir ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
}
return 0 ;
}
int
sys_mkdir ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , %#lo " , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
int
sys_rmdir ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
}
return 0 ;
}
int
sys_fchdir ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld " , tcp - > u_arg [ 0 ] ) ;
}
return 0 ;
}
int
sys_chroot ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
}
return 0 ;
}
int
sys_fchroot ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld " , tcp - > u_arg [ 0 ] ) ;
}
return 0 ;
}
int
sys_link ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
printpath ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
int
sys_unlink ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
}
return 0 ;
}
int
sys_symlink ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
printpath ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
int
sys_readlink ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
} else {
if ( syserror ( tcp ) )
tprintf ( " %#lx " , tcp - > u_arg [ 1 ] ) ;
else
printpathn ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_rval ) ;
tprintf ( " , %lu " , tcp - > u_arg [ 2 ] ) ;
}
return 0 ;
}
int
sys_rename ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
printpath ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
int
sys_chown ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
2003-11-13 22:32:27 +00:00
printuid ( " , " , tcp - > u_arg [ 1 ] ) ;
printuid ( " , " , tcp - > u_arg [ 2 ] ) ;
1999-02-19 00:21:36 +00:00
}
return 0 ;
}
int
sys_fchown ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
2003-11-13 22:32:27 +00:00
tprintf ( " %ld " , tcp - > u_arg [ 0 ] ) ;
printuid ( " , " , tcp - > u_arg [ 1 ] ) ;
printuid ( " , " , tcp - > u_arg [ 2 ] ) ;
1999-02-19 00:21:36 +00:00
}
return 0 ;
}
int
sys_chmod ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , %#lo " , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
int
sys_fchmod ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, %#lo " , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
1999-11-18 17:09:47 +00:00
# ifdef ALPHA
int
sys_osf_utimes ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
printtv32 ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
# endif
1999-02-19 00:21:36 +00:00
int
sys_utimes ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
printtv ( tcp , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
int
sys_utime ( tcp )
struct tcb * tcp ;
{
long ut [ 2 ] ;
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
if ( ! tcp - > u_arg [ 1 ] )
tprintf ( " NULL " ) ;
else if ( ! verbose ( tcp ) )
tprintf ( " %#lx " , tcp - > u_arg [ 1 ] ) ;
else if ( umoven ( tcp , tcp - > u_arg [ 1 ] , sizeof ut ,
( char * ) ut ) < 0 )
tprintf ( " [?, ?] " ) ;
else {
tprintf ( " [%s, " , sprinttime ( ut [ 0 ] ) ) ;
tprintf ( " %s] " , sprinttime ( ut [ 1 ] ) ) ;
}
}
return 0 ;
}
int
sys_mknod ( tcp )
struct tcb * tcp ;
{
int mode = tcp - > u_arg [ 1 ] ;
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , %s " , sprintmode ( mode ) ) ;
switch ( mode & S_IFMT ) {
case S_IFCHR : case S_IFBLK :
# ifdef LINUXSPARC
if ( current_personality = = 1 )
tprintf ( " , makedev(%lu, %lu) " ,
( unsigned long ) ( ( tcp - > u_arg [ 2 ] > > 18 ) & 0x3fff ) ,
( unsigned long ) ( tcp - > u_arg [ 2 ] & 0x3ffff ) ) ;
else
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
# endif
1999-02-19 00:21:36 +00:00
tprintf ( " , makedev(%lu, %lu) " ,
( unsigned long ) major ( tcp - > u_arg [ 2 ] ) ,
( unsigned long ) minor ( tcp - > u_arg [ 2 ] ) ) ;
break ;
default :
break ;
}
}
return 0 ;
}
int
sys_mkfifo ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , %#lo " , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
int
sys_fsync ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld " , tcp - > u_arg [ 0 ] ) ;
}
return 0 ;
}
2002-09-23 13:30:09 +00:00
# ifdef LINUX
1999-02-19 00:21:36 +00:00
static void
printdir ( tcp , addr )
struct tcb * tcp ;
long addr ;
{
struct dirent d ;
if ( ! verbose ( tcp ) ) {
tprintf ( " %#lx " , addr ) ;
return ;
}
if ( umove ( tcp , addr , & d ) < 0 ) {
tprintf ( " {...} " ) ;
return ;
}
tprintf ( " {d_ino=%ld, " , ( unsigned long ) d . d_ino ) ;
tprintf ( " d_name= " ) ;
printpathn ( tcp , ( long ) ( ( struct dirent * ) addr ) - > d_name , d . d_reclen ) ;
tprintf ( " } " ) ;
}
int
sys_readdir ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %lu, " , tcp - > u_arg [ 0 ] ) ;
} else {
if ( syserror ( tcp ) | | tcp - > u_rval = = 0 | | ! verbose ( tcp ) )
tprintf ( " %#lx " , tcp - > u_arg [ 1 ] ) ;
else
printdir ( tcp , tcp - > u_arg [ 1 ] ) ;
/* Not much point in printing this out, it is always 1. */
if ( tcp - > u_arg [ 2 ] ! = 1 )
tprintf ( " , %lu " , tcp - > u_arg [ 2 ] ) ;
}
return 0 ;
}
2002-09-23 13:30:09 +00:00
# endif /* LINUX */
1999-02-19 00:21:36 +00:00
2004-01-13 09:47:49 +00:00
# if defined FREEBSD || defined LINUX
2004-09-04 03:39:20 +00:00
const struct xlat direnttypes [ ] = {
2004-01-13 09:47:49 +00:00
{ DT_UNKNOWN , " DT_UNKNOWN " } ,
2000-09-01 21:03:06 +00:00
{ DT_FIFO , " DT_FIFO " } ,
{ DT_CHR , " DT_CHR " } ,
{ DT_DIR , " DT_DIR " } ,
{ DT_BLK , " DT_BLK " } ,
{ DT_REG , " DT_REG " } ,
{ DT_LNK , " DT_LNK " } ,
{ DT_SOCK , " DT_SOCK " } ,
{ DT_WHT , " DT_WHT " } ,
{ 0 , NULL } ,
} ;
# endif
1999-02-19 00:21:36 +00:00
int
sys_getdents ( tcp )
struct tcb * tcp ;
{
int i , len , dents = 0 ;
char * buf ;
if ( entering ( tcp ) ) {
tprintf ( " %lu, " , tcp - > u_arg [ 0 ] ) ;
return 0 ;
}
if ( syserror ( tcp ) | | ! verbose ( tcp ) ) {
tprintf ( " %#lx, %lu " , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
return 0 ;
}
len = tcp - > u_rval ;
if ( ( buf = malloc ( len ) ) = = NULL ) {
tprintf ( " out of memory \n " ) ;
return 0 ;
}
if ( umoven ( tcp , tcp - > u_arg [ 1 ] , len , buf ) < 0 ) {
tprintf ( " {...}, %lu " , tcp - > u_arg [ 2 ] ) ;
free ( buf ) ;
return 0 ;
}
if ( ! abbrev ( tcp ) )
tprintf ( " { " ) ;
for ( i = 0 ; i < len ; ) {
1999-05-25 23:11:18 +00:00
struct kernel_dirent * d = ( struct kernel_dirent * ) & buf [ i ] ;
2002-09-23 13:30:09 +00:00
# ifdef LINUX
1999-02-19 00:21:36 +00:00
if ( ! abbrev ( tcp ) ) {
tprintf ( " %s{d_ino=%lu, d_off=%lu, " ,
i ? " " : " " , d - > d_ino , d - > d_off ) ;
tprintf ( " d_reclen=%u, d_name= \" %s \" } " ,
d - > d_reclen , d - > d_name ) ;
}
2002-09-23 13:30:09 +00:00
# endif /* LINUX */
1999-02-19 00:21:36 +00:00
# ifdef SVR4
if ( ! abbrev ( tcp ) ) {
tprintf ( " %s{d_ino=%lu, d_off=%lu, " ,
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
i ? " " : " " ,
( unsigned long ) d - > d_ino ,
( unsigned long ) d - > d_off ) ;
1999-02-19 00:21:36 +00:00
tprintf ( " d_reclen=%u, d_name= \" %s \" } " ,
d - > d_reclen , d - > d_name ) ;
}
# endif /* SVR4 */
# ifdef SUNOS4
if ( ! abbrev ( tcp ) ) {
tprintf ( " %s{d_off=%lu, d_fileno=%lu, d_reclen=%u, " ,
i ? " " : " " , d - > d_off , d - > d_fileno ,
d - > d_reclen ) ;
tprintf ( " d_namlen=%u, d_name= \" %.*s \" } " ,
d - > d_namlen , d - > d_namlen , d - > d_name ) ;
}
# endif /* SUNOS4 */
2000-09-01 21:03:06 +00:00
# ifdef FREEBSD
if ( ! abbrev ( tcp ) ) {
tprintf ( " %s{d_fileno=%u, d_reclen=%u, d_type= " ,
i ? " " : " " , d - > d_fileno , d - > d_reclen ) ;
printxval ( direnttypes , d - > d_type , " DT_??? " ) ;
tprintf ( " , d_namlen=%u, d_name= \" %.*s \" } " ,
d - > d_namlen , d - > d_namlen , d - > d_name ) ;
}
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
# endif /* FREEBSD */
2000-02-01 16:22:52 +00:00
if ( ! d - > d_reclen ) {
tprintf ( " /* d_reclen == 0, problem here */ " ) ;
break ;
}
1999-02-19 00:21:36 +00:00
i + = d - > d_reclen ;
dents + + ;
}
if ( ! abbrev ( tcp ) )
tprintf ( " } " ) ;
else
tprintf ( " /* %u entries */ " , dents ) ;
tprintf ( " , %lu " , tcp - > u_arg [ 2 ] ) ;
free ( buf ) ;
return 0 ;
}
2001-03-06 15:08:09 +00:00
# if _LFS64_LARGEFILE
int
sys_getdents64 ( tcp )
struct tcb * tcp ;
{
int i , len , dents = 0 ;
char * buf ;
if ( entering ( tcp ) ) {
tprintf ( " %lu, " , tcp - > u_arg [ 0 ] ) ;
return 0 ;
}
if ( syserror ( tcp ) | | ! verbose ( tcp ) ) {
tprintf ( " %#lx, %lu " , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
return 0 ;
}
len = tcp - > u_rval ;
if ( ( buf = malloc ( len ) ) = = NULL ) {
tprintf ( " out of memory \n " ) ;
return 0 ;
}
if ( umoven ( tcp , tcp - > u_arg [ 1 ] , len , buf ) < 0 ) {
tprintf ( " {...}, %lu " , tcp - > u_arg [ 2 ] ) ;
free ( buf ) ;
return 0 ;
}
if ( ! abbrev ( tcp ) )
tprintf ( " { " ) ;
for ( i = 0 ; i < len ; ) {
struct dirent64 * d = ( struct dirent64 * ) & buf [ i ] ;
2002-09-23 13:30:09 +00:00
# if defined(LINUX) || defined(SVR4)
2001-03-06 15:08:09 +00:00
if ( ! abbrev ( tcp ) ) {
2004-01-13 10:16:47 +00:00
tprintf ( " %s{d_ino=%llu, d_off=%llu, " ,
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
i ? " " : " " ,
2004-01-13 10:16:47 +00:00
d - > d_ino ,
d - > d_off ) ;
2004-01-13 09:47:49 +00:00
# ifdef LINUX
tprintf ( " d_type= " ) ;
printxval ( direnttypes , d - > d_type , " DT_??? " ) ;
tprintf ( " , " ) ;
# endif
2001-03-06 15:08:09 +00:00
tprintf ( " d_reclen=%u, d_name= \" %s \" } " ,
d - > d_reclen , d - > d_name ) ;
}
2002-09-23 13:30:09 +00:00
# endif /* LINUX || SVR4 */
2001-03-06 15:08:09 +00:00
# ifdef SUNOS4
if ( ! abbrev ( tcp ) ) {
tprintf ( " %s{d_off=%lu, d_fileno=%lu, d_reclen=%u, " ,
i ? " " : " " , d - > d_off , d - > d_fileno ,
d - > d_reclen ) ;
tprintf ( " d_namlen=%u, d_name= \" %.*s \" } " ,
d - > d_namlen , d - > d_namlen , d - > d_name ) ;
}
# endif /* SUNOS4 */
i + = d - > d_reclen ;
dents + + ;
}
if ( ! abbrev ( tcp ) )
tprintf ( " } " ) ;
else
tprintf ( " /* %u entries */ " , dents ) ;
tprintf ( " , %lu " , tcp - > u_arg [ 2 ] ) ;
free ( buf ) ;
return 0 ;
}
# endif
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
2000-09-01 21:03:06 +00:00
# ifdef FREEBSD
int
sys_getdirentries ( tcp )
struct tcb * tcp ;
{
int i , len , dents = 0 ;
long basep ;
char * buf ;
if ( entering ( tcp ) ) {
tprintf ( " %lu, " , tcp - > u_arg [ 0 ] ) ;
return 0 ;
}
if ( syserror ( tcp ) | | ! verbose ( tcp ) ) {
tprintf ( " %#lx, %lu, %#lx " , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] , tcp - > u_arg [ 3 ] ) ;
return 0 ;
}
len = tcp - > u_rval ;
if ( ( buf = malloc ( len ) ) = = NULL ) {
tprintf ( " out of memory \n " ) ;
return 0 ;
}
if ( umoven ( tcp , tcp - > u_arg [ 1 ] , len , buf ) < 0 ) {
tprintf ( " {...}, %lu, %#lx " , tcp - > u_arg [ 2 ] , tcp - > u_arg [ 3 ] ) ;
free ( buf ) ;
return 0 ;
}
if ( ! abbrev ( tcp ) )
tprintf ( " { " ) ;
for ( i = 0 ; i < len ; ) {
struct kernel_dirent * d = ( struct kernel_dirent * ) & buf [ i ] ;
if ( ! abbrev ( tcp ) ) {
tprintf ( " %s{d_fileno=%u, d_reclen=%u, d_type= " ,
i ? " " : " " , d - > d_fileno , d - > d_reclen ) ;
printxval ( direnttypes , d - > d_type , " DT_??? " ) ;
tprintf ( " , d_namlen=%u, d_name= \" %.*s \" } " ,
d - > d_namlen , d - > d_namlen , d - > d_name ) ;
}
i + = d - > d_reclen ;
dents + + ;
}
if ( ! abbrev ( tcp ) )
tprintf ( " } " ) ;
else
tprintf ( " /* %u entries */ " , dents ) ;
free ( buf ) ;
tprintf ( " , %lu " , tcp - > u_arg [ 2 ] ) ;
if ( umove ( tcp , tcp - > u_arg [ 3 ] , & basep ) < 0 )
tprintf ( " , %#lx " , tcp - > u_arg [ 3 ] ) ;
else
tprintf ( " , [%lu] " , basep ) ;
return 0 ;
}
# endif
1999-02-19 00:21:36 +00:00
2002-09-23 13:30:09 +00:00
# ifdef LINUX
1999-02-19 00:21:36 +00:00
int
sys_getcwd ( tcp )
struct tcb * tcp ;
{
if ( exiting ( tcp ) ) {
if ( syserror ( tcp ) )
tprintf ( " %#lx " , tcp - > u_arg [ 0 ] ) ;
else
1999-05-09 00:29:58 +00:00
printpathn ( tcp , tcp - > u_arg [ 0 ] , tcp - > u_rval - 1 ) ;
1999-02-19 00:21:36 +00:00
tprintf ( " , %lu " , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
2002-09-23 13:30:09 +00:00
# endif /* LINUX */
1999-02-19 00:21:36 +00:00
2000-09-01 21:03:06 +00:00
# ifdef FREEBSD
int
sys___getcwd ( tcp )
struct tcb * tcp ;
{
if ( exiting ( tcp ) ) {
if ( syserror ( tcp ) )
tprintf ( " %#lx " , tcp - > u_arg [ 0 ] ) ;
else
printpathn ( tcp , tcp - > u_arg [ 0 ] , tcp - > u_arg [ 1 ] ) ;
tprintf ( " , %lu " , tcp - > u_arg [ 1 ] ) ;
}
return 0 ;
}
# endif
1999-02-19 00:21:36 +00:00
# ifdef HAVE_SYS_ASYNCH_H
int
sys_aioread ( tcp )
struct tcb * tcp ;
{
struct aio_result_t res ;
if ( entering ( tcp ) ) {
tprintf ( " %lu, " , tcp - > u_arg [ 0 ] ) ;
} else {
if ( syserror ( tcp ) )
tprintf ( " %#lx " , tcp - > u_arg [ 1 ] ) ;
else
printstr ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
tprintf ( " , %lu, %lu, " , tcp - > u_arg [ 2 ] , tcp - > u_arg [ 3 ] ) ;
printxval ( whence , tcp - > u_arg [ 4 ] , " L_??? " ) ;
if ( syserror ( tcp ) | | tcp - > u_arg [ 5 ] = = 0
| | umove ( tcp , tcp - > u_arg [ 5 ] , & res ) < 0 )
tprintf ( " , %#lx " , tcp - > u_arg [ 5 ] ) ;
else
tprintf ( " , {aio_return %d aio_errno %d} " ,
res . aio_return , res . aio_errno ) ;
}
return 0 ;
}
int
sys_aiowrite ( tcp )
struct tcb * tcp ;
{
struct aio_result_t res ;
if ( entering ( tcp ) ) {
tprintf ( " %lu, " , tcp - > u_arg [ 0 ] ) ;
printstr ( tcp , tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
tprintf ( " , %lu, %lu, " , tcp - > u_arg [ 2 ] , tcp - > u_arg [ 3 ] ) ;
printxval ( whence , tcp - > u_arg [ 4 ] , " L_??? " ) ;
}
else {
if ( tcp - > u_arg [ 5 ] = = 0 )
tprintf ( " , NULL " ) ;
else if ( syserror ( tcp )
| | umove ( tcp , tcp - > u_arg [ 5 ] , & res ) < 0 )
tprintf ( " , %#lx " , tcp - > u_arg [ 5 ] ) ;
else
tprintf ( " , {aio_return %d aio_errno %d} " ,
res . aio_return , res . aio_errno ) ;
}
return 0 ;
}
int
sys_aiowait ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) )
printtv ( tcp , tcp - > u_arg [ 0 ] ) ;
return 0 ;
}
int
sys_aiocancel ( tcp )
struct tcb * tcp ;
{
struct aio_result_t res ;
if ( exiting ( tcp ) ) {
if ( tcp - > u_arg [ 0 ] = = 0 )
tprintf ( " NULL " ) ;
else if ( syserror ( tcp )
| | umove ( tcp , tcp - > u_arg [ 0 ] , & res ) < 0 )
tprintf ( " %#lx " , tcp - > u_arg [ 0 ] ) ;
else
tprintf ( " {aio_return %d aio_errno %d} " ,
res . aio_return , res . aio_errno ) ;
}
return 0 ;
}
# endif /* HAVE_SYS_ASYNCH_H */
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
2004-09-04 03:39:20 +00:00
const struct xlat xattrflags [ ] = {
2003-04-02 01:10:44 +00:00
# ifdef XATTR_CREATE
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
{ XATTR_CREATE , " XATTR_CREATE " } ,
{ XATTR_REPLACE , " XATTR_REPLACE " } ,
2003-04-02 01:10:44 +00:00
# endif
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
{ 0 , NULL }
} ;
2004-08-31 06:30:48 +00:00
static void
print_xattr_val ( tcp , failed , arg , insize , size )
struct tcb * tcp ;
int failed ;
unsigned long arg ;
2005-02-02 03:38:32 +00:00
long insize , size ;
{
if ( ! failed ) {
unsigned char * buf = malloc ( 4 * size + 1 ) ;
if ( buf = = NULL | | /* probably a bogus size argument */
umoven ( tcp , arg , size , & buf [ 3 * size ] ) < 0 ) {
failed = 1 ;
}
else {
unsigned char * out = buf ;
unsigned char * in = & buf [ 3 * size ] ;
size_t i ;
for ( i = 0 ; i < size ; + + i )
if ( isprint ( in [ i ] ) )
* out + + = in [ i ] ;
else {
2004-08-31 06:30:48 +00:00
# define tohex(n) "0123456789abcdef"[n]
2005-02-02 03:38:32 +00:00
* out + + = ' \\ ' ;
* out + + = ' x ' ;
* out + + = tohex ( in [ i ] / 16 ) ;
* out + + = tohex ( in [ i ] % 16 ) ;
}
/* Don't print terminating NUL if there is one. */
if ( in [ i - 1 ] = = ' \0 ' )
out - = 4 ;
* out = ' \0 ' ;
tprintf ( " , \" %s \" , %ld " , buf , insize ) ;
}
free ( buf ) ;
}
if ( failed )
tprintf ( " , 0x%lx, %ld " , arg , insize ) ;
2004-08-31 06:30:48 +00:00
}
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
int
sys_setxattr ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
printstr ( tcp , tcp - > u_arg [ 1 ] , - 1 ) ;
2004-08-31 06:30:48 +00:00
print_xattr_val ( tcp , 0 , tcp - > u_arg [ 2 ] , tcp - > u_arg [ 3 ] , tcp - > u_arg [ 3 ] ) ;
tprintf ( " , " ) ;
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
printflags ( xattrflags , tcp - > u_arg [ 4 ] ) ;
}
return 0 ;
}
int
sys_fsetxattr ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
printstr ( tcp , tcp - > u_arg [ 1 ] , - 1 ) ;
2004-08-31 06:30:48 +00:00
print_xattr_val ( tcp , 0 , tcp - > u_arg [ 2 ] , tcp - > u_arg [ 3 ] , tcp - > u_arg [ 3 ] ) ;
tprintf ( " , " ) ;
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
printflags ( xattrflags , tcp - > u_arg [ 4 ] ) ;
}
return 0 ;
}
int
sys_getxattr ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
printstr ( tcp , tcp - > u_arg [ 1 ] , - 1 ) ;
} else {
2004-08-31 06:30:48 +00:00
print_xattr_val ( tcp , syserror ( tcp ) , tcp - > u_arg [ 2 ] , tcp - > u_arg [ 3 ] ,
tcp - > u_rval ) ;
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
}
return 0 ;
}
int
sys_fgetxattr ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
printstr ( tcp , tcp - > u_arg [ 1 ] , - 1 ) ;
} else {
2004-08-31 06:30:48 +00:00
print_xattr_val ( tcp , syserror ( tcp ) , tcp - > u_arg [ 2 ] , tcp - > u_arg [ 3 ] ,
tcp - > u_rval ) ;
2002-12-15 Roland McGrath <roland@redhat.com>
* configure.in: Check for linux/xattr.h and linux/futex.h headers.
* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
sched_getaffinity, futex.
* linux/syscallent.h: Update the table.
* io.c: Add sys_sendfile64.
* file.c: Add sys_readahead, sys_*xattr.
* process.c: Add sys_futex, sys_*affinity.
2002-12-15 23:58:23 +00:00
}
return 0 ;
}
int
sys_listxattr ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
} else {
/* XXX Print value in format */
tprintf ( " , %p, %lu " , ( void * ) tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
}
return 0 ;
}
int
sys_flistxattr ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld " , tcp - > u_arg [ 0 ] ) ;
} else {
/* XXX Print value in format */
tprintf ( " , %p, %lu " , ( void * ) tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
}
return 0 ;
}
int
sys_removexattr ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
printpath ( tcp , tcp - > u_arg [ 0 ] ) ;
tprintf ( " , " ) ;
printstr ( tcp , tcp - > u_arg [ 1 ] , - 1 ) ;
}
return 0 ;
}
int
sys_fremovexattr ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, " , tcp - > u_arg [ 0 ] ) ;
printstr ( tcp , tcp - > u_arg [ 1 ] , - 1 ) ;
}
return 0 ;
}
2004-10-07 18:51:19 +00:00
static const struct xlat advise [ ] = {
{ POSIX_FADV_NORMAL , " POSIX_FADV_NORMAL " } ,
{ POSIX_FADV_RANDOM , " POSIX_FADV_RANDOM " } ,
{ POSIX_FADV_SEQUENTIAL , " POSIX_FADV_SEQUENTIAL " } ,
{ POSIX_FADV_WILLNEED , " POSIX_FADV_WILLNEED " } ,
{ POSIX_FADV_DONTNEED , " POSIX_FADV_DONTNEED " } ,
{ POSIX_FADV_NOREUSE , " POSIX_FADV_NOREUSE " } ,
{ 0 , NULL }
} ;
2004-10-20 02:24:19 +00:00
# ifdef LINUX
2004-10-07 18:51:19 +00:00
int
sys_fadvise64 ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, %lld, %ld, " ,
tcp - > u_arg [ 0 ] ,
# if defined IA64 || defined X86_64 || defined ALPHA
( long long int ) tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ;
printxval ( advise , tcp - > u_arg [ 3 ] , " POSIX_FADV_??? " ) ;
# else
2004-10-07 19:09:16 +00:00
LONG_LONG ( tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) , tcp - > u_arg [ 3 ] ) ;
printxval ( advise , tcp - > u_arg [ 4 ] , " POSIX_FADV_??? " ) ;
2004-10-07 18:51:19 +00:00
# endif
}
return 0 ;
}
# endif
int
sys_fadvise64_64 ( tcp )
struct tcb * tcp ;
{
if ( entering ( tcp ) ) {
tprintf ( " %ld, %lld, %lld, " ,
tcp - > u_arg [ 0 ] ,
# if defined IA64 || defined X86_64 || defined ALPHA
( long long int ) tcp - > u_arg [ 1 ] , ( long long int ) tcp - > u_arg [ 2 ] ) ;
printxval ( advise , tcp - > u_arg [ 3 ] , " POSIX_FADV_??? " ) ;
# else
2004-10-07 19:09:16 +00:00
LONG_LONG ( tcp - > u_arg [ 1 ] , tcp - > u_arg [ 2 ] ) ,
LONG_LONG ( tcp - > u_arg [ 3 ] , tcp - > u_arg [ 4 ] ) ) ;
2004-10-07 18:51:19 +00:00
printxval ( advise , tcp - > u_arg [ 5 ] , " POSIX_FADV_??? " ) ;
# endif
}
return 0 ;
}