Fix decoding of file descriptors

* defs.h (printfd): New function prototype.
* util.c (printfd): New function.
* file.c (print_dirfd): Update prototype to use printfd().
(sys_openat, sys_faccessat, sys_newfstatat, sys_mkdirat, sys_linkat,
sys_unlinkat, sys_readlinkat, sys_renameat, sys_fchownat, sys_fchmodat,
sys_futimesat, sys_utimensat, sys_mknodat): Update use of print_dirfd().
(sys_lseek, sys_llseek, sys_readahead, sys_ftruncate, sys_ftruncate64,
sys_fstat, sys_fstat64, sys_oldfstat, sys_fstatfs, sys_fstatfs64,
sys_fchdir, sys_fchroot, sys_linkat, sys_fchown, sys_fchmod, sys_fsync,
sys_readdir, sys_getdents, sys_getdirentries, sys_fsetxattr,
sys_fgetxattr, sys_flistxattr, sys_fremovexattr, sys_fadvise64,
sys_fadvise64_64, sys_inotify_add_watch, sys_inotify_rm_watch,
sys_fallocate): Use printfd() for decoding of file descriptors.
* desc.c (sys_fcntl, sys_flock, sys_close, sys_dup, do_dup2,
decode_select, sys_epoll_ctl, epoll_wait_common): Use printfd() for
decoding of file descriptors.
* io.c (sys_read, sys_write, sys_readv, sys_writev, sys_pread,
sys_pwrite, sys_sendfile, sys_sendfile64, sys_pread64, sys_pwrite64,
sys_ioctl): Likewise.
* mem.c (print_mmap, sys_mmap64): Likewise.
* signal.c (do_signalfd): Likewise.
* stream.c (decode_poll): Likewise.
* time.c (sys_timerfd_settime, sys_timerfd_gettime): Likewise.
Based on patch from Grant Edwards <grant.b.edwards@gmail.com>.
This commit is contained in:
Дмитрий Левин 2011-03-04 05:08:02 +03:00
parent 9cd385010e
commit 3138213bc9
9 changed files with 182 additions and 130 deletions

1
defs.h
View File

@ -550,6 +550,7 @@ extern void sprint_timespec(char *, struct tcb *, long);
#ifdef HAVE_SIGINFO_T
extern void printsiginfo(siginfo_t *, int);
#endif
extern void printfd(struct tcb *, int);
extern void printsock(struct tcb *, long, int);
extern void print_sock_optmgmt(struct tcb *, long, int);
extern void printrusage(struct tcb *, long);

31
desc.c
View File

@ -309,7 +309,8 @@ int
sys_fcntl(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printxval(fcntlcmds, tcp->u_arg[1], "F_???");
switch (tcp->u_arg[1]) {
case F_SETFD:
@ -422,7 +423,8 @@ int
sys_flock(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printflags(flockcmds, tcp->u_arg[1], "LOCK_???");
}
return 0;
@ -433,7 +435,7 @@ int
sys_close(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
}
return 0;
}
@ -442,7 +444,7 @@ int
sys_dup(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
}
return 0;
}
@ -451,7 +453,9 @@ static int
do_dup2(struct tcb *tcp, int flags_arg)
{
if (entering(tcp)) {
tprintf("%ld, %ld", tcp->u_arg[0], tcp->u_arg[1]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printfd(tcp, tcp->u_arg[1]);
if (flags_arg >= 0) {
tprintf(", ");
printflags(open_mode_flags, tcp->u_arg[flags_arg], "O_???");
@ -516,7 +520,8 @@ decode_select(struct tcb *tcp, long *args, enum bitness_t bitness)
tprintf(", [");
for (j = 0, sep = ""; j < nfds; j++) {
if (FD_ISSET(j, fds)) {
tprintf("%s%u", sep, j);
tprintf("%s", sep);
printfd(tcp, j);
sep = " ";
}
}
@ -703,9 +708,12 @@ int
sys_epoll_ctl(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printxval(epollctls, tcp->u_arg[1], "EPOLL_CTL_???");
tprintf(", %ld, ", tcp->u_arg[2]);
tprintf(", ");
printfd(tcp, tcp->u_arg[2]);
tprintf(", ");
if (tcp->u_arg[3] == 0)
tprintf("NULL");
else {
@ -724,9 +732,10 @@ sys_epoll_ctl(struct tcb *tcp)
static void
epoll_wait_common(struct tcb *tcp)
{
if (entering(tcp))
tprintf("%ld, ", tcp->u_arg[0]);
else {
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
} else {
if (syserror(tcp))
tprintf("%lx", tcp->u_arg[1]);
else if (tcp->u_rval == 0)

149
file.c
View File

@ -331,12 +331,15 @@ const struct xlat open_mode_flags[] = {
* extension to get the right value. We do this by declaring fd as int here.
*/
static void
print_dirfd(int fd)
print_dirfd(struct tcb *tcp, int fd)
{
if (fd == AT_FDCWD)
tprintf("AT_FDCWD, ");
else
tprintf("%d, ", fd);
{
printfd(tcp, fd);
tprintf(", ");
}
}
#endif
@ -425,7 +428,7 @@ int
sys_openat(struct tcb *tcp)
{
if (entering(tcp))
print_dirfd(tcp->u_arg[0]);
print_dirfd(tcp, tcp->u_arg[0]);
return decode_open(tcp, 1);
}
#endif
@ -513,7 +516,7 @@ int
sys_faccessat(struct tcb *tcp)
{
if (entering(tcp))
print_dirfd(tcp->u_arg[0]);
print_dirfd(tcp, tcp->u_arg[0]);
return decode_access(tcp, 1);
}
#endif
@ -543,7 +546,8 @@ sys_lseek(struct tcb *tcp)
int _whence;
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
offset = tcp->ext_arg[1];
_whence = tcp->u_arg[2];
if (_whence == SEEK_SET)
@ -562,7 +566,8 @@ sys_lseek(struct tcb *tcp)
int _whence;
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
offset = tcp->u_arg[1];
_whence = tcp->u_arg[2];
if (_whence == SEEK_SET)
@ -581,19 +586,20 @@ int
sys_llseek(struct tcb *tcp)
{
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
/*
* 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.
*/
if (tcp->u_arg[4] == SEEK_SET)
tprintf("%ld, %llu, ", tcp->u_arg[0],
(((long long int) tcp->u_arg[1]) << 32
| (unsigned long long) (unsigned) tcp->u_arg[2]));
tprintf(", %llu, ",
((long long int) tcp->u_arg[1]) << 32 |
(unsigned long long) (unsigned) tcp->u_arg[2]);
else
tprintf("%ld, %lld, ", tcp->u_arg[0],
(((long long int) tcp->u_arg[1]) << 32
| (unsigned long long) (unsigned) tcp->u_arg[2]));
tprintf(", %lld, ",
((long long int) tcp->u_arg[1]) << 32 |
(unsigned long long) (unsigned) tcp->u_arg[2]);
}
else {
long long int off;
@ -611,7 +617,8 @@ sys_readahead(struct tcb *tcp)
{
if (entering(tcp)) {
int argn;
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
argn = printllval(tcp, "%lld", 1);
tprintf(", %ld", tcp->u_arg[argn]);
}
@ -625,7 +632,8 @@ sys_lseek64(struct tcb *tcp)
{
if (entering(tcp)) {
int argn;
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
if (tcp->u_arg[3] == SEEK_SET)
argn = printllval(tcp, "%llu, ", 1);
else
@ -665,7 +673,8 @@ int
sys_ftruncate(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, %lu", tcp->u_arg[0], tcp->u_arg[1]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", %lu", tcp->u_arg[1]);
}
return 0;
}
@ -676,7 +685,8 @@ int
sys_ftruncate64(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printllval(tcp, "%llu", 1);
}
return 0;
@ -1327,7 +1337,7 @@ int
sys_newfstatat(struct tcb *tcp)
{
if (entering(tcp)) {
print_dirfd(tcp->u_arg[0]);
print_dirfd(tcp, tcp->u_arg[0]);
printpath(tcp, tcp->u_arg[1]);
tprintf(", ");
} else {
@ -1366,9 +1376,10 @@ sys_oldstat(struct tcb *tcp)
int
sys_fstat(struct tcb *tcp)
{
if (entering(tcp))
tprintf("%ld, ", tcp->u_arg[0]);
else {
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
} else {
printstat(tcp, tcp->u_arg[1]);
}
return 0;
@ -1379,9 +1390,10 @@ int
sys_fstat64(struct tcb *tcp)
{
#ifdef HAVE_STAT64
if (entering(tcp))
tprintf("%ld, ", tcp->u_arg[0]);
else {
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
} else {
printstat64(tcp, tcp->u_arg[1]);
}
return 0;
@ -1394,9 +1406,10 @@ sys_fstat64(struct tcb *tcp)
int
sys_oldfstat(struct tcb *tcp)
{
if (entering(tcp))
tprintf("%ld, ", tcp->u_arg[0]);
else {
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
} else {
printoldstat(tcp, tcp->u_arg[1]);
}
return 0;
@ -1750,7 +1763,8 @@ int
sys_fstatfs(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%lu, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
} else {
printstatfs(tcp, tcp->u_arg[1]);
}
@ -1807,7 +1821,8 @@ int
sys_fstatfs64(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%lu, %lu, ", tcp->u_arg[0], tcp->u_arg[1]);
printfd(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]);
@ -1922,7 +1937,7 @@ int
sys_mkdirat(struct tcb *tcp)
{
if (entering(tcp))
print_dirfd(tcp->u_arg[0]);
print_dirfd(tcp, tcp->u_arg[0]);
return decode_mkdir(tcp, 1);
}
#endif
@ -1940,7 +1955,7 @@ int
sys_fchdir(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
}
return 0;
}
@ -1959,7 +1974,7 @@ int
sys_fchroot(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
}
return 0;
}
@ -1981,12 +1996,13 @@ int
sys_linkat(struct tcb *tcp)
{
if (entering(tcp)) {
print_dirfd(tcp->u_arg[0]);
print_dirfd(tcp, tcp->u_arg[0]);
printpath(tcp, tcp->u_arg[1]);
tprintf(", ");
print_dirfd(tcp->u_arg[2]);
print_dirfd(tcp, tcp->u_arg[2]);
printpath(tcp, tcp->u_arg[3]);
tprintf(", %ld", tcp->u_arg[4]);
tprintf(", ");
printfd(tcp, tcp->u_arg[4]);
}
return 0;
}
@ -2014,7 +2030,7 @@ int
sys_unlinkat(struct tcb *tcp)
{
if (entering(tcp)) {
print_dirfd(tcp->u_arg[0]);
print_dirfd(tcp, tcp->u_arg[0]);
printpath(tcp, tcp->u_arg[1]);
tprintf(", ");
printflags(unlinkatflags, tcp->u_arg[2], "AT_???");
@ -2041,7 +2057,7 @@ sys_symlinkat(struct tcb *tcp)
if (entering(tcp)) {
printpath(tcp, tcp->u_arg[0]);
tprintf(", ");
print_dirfd(tcp->u_arg[1]);
print_dirfd(tcp, tcp->u_arg[1]);
printpath(tcp, tcp->u_arg[2]);
}
return 0;
@ -2075,7 +2091,7 @@ int
sys_readlinkat(struct tcb *tcp)
{
if (entering(tcp))
print_dirfd(tcp->u_arg[0]);
print_dirfd(tcp, tcp->u_arg[0]);
return decode_readlink(tcp, 1);
}
#endif
@ -2096,10 +2112,10 @@ int
sys_renameat(struct tcb *tcp)
{
if (entering(tcp)) {
print_dirfd(tcp->u_arg[0]);
print_dirfd(tcp, tcp->u_arg[0]);
printpath(tcp, tcp->u_arg[1]);
tprintf(", ");
print_dirfd(tcp->u_arg[2]);
print_dirfd(tcp, tcp->u_arg[2]);
printpath(tcp, tcp->u_arg[3]);
}
return 0;
@ -2122,7 +2138,7 @@ int
sys_fchownat(struct tcb *tcp)
{
if (entering(tcp)) {
print_dirfd(tcp->u_arg[0]);
print_dirfd(tcp, tcp->u_arg[0]);
printpath(tcp, tcp->u_arg[1]);
printuid(", ", tcp->u_arg[2]);
printuid(", ", tcp->u_arg[3]);
@ -2137,7 +2153,7 @@ int
sys_fchown(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
printuid(", ", tcp->u_arg[1]);
printuid(", ", tcp->u_arg[2]);
}
@ -2165,7 +2181,7 @@ int
sys_fchmodat(struct tcb *tcp)
{
if (entering(tcp))
print_dirfd(tcp->u_arg[0]);
print_dirfd(tcp, tcp->u_arg[0]);
return decode_chmod(tcp, 1);
}
#endif
@ -2174,7 +2190,8 @@ int
sys_fchmod(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, %#lo", tcp->u_arg[0], tcp->u_arg[1]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", %#lo", tcp->u_arg[1]);
}
return 0;
}
@ -2225,7 +2242,7 @@ int
sys_futimesat(struct tcb *tcp)
{
if (entering(tcp))
print_dirfd(tcp->u_arg[0]);
print_dirfd(tcp, tcp->u_arg[0]);
return decode_utimes(tcp, 1, 0);
}
@ -2233,7 +2250,7 @@ int
sys_utimensat(struct tcb *tcp)
{
if (entering(tcp)) {
print_dirfd(tcp->u_arg[0]);
print_dirfd(tcp, tcp->u_arg[0]);
decode_utimes(tcp, 1, 1);
tprintf(", ");
printflags(utimensatflags, tcp->u_arg[3], "AT_???");
@ -2316,7 +2333,7 @@ int
sys_mknodat(struct tcb *tcp)
{
if (entering(tcp))
print_dirfd(tcp->u_arg[0]);
print_dirfd(tcp, tcp->u_arg[0]);
return decode_mknod(tcp, 1);
}
#endif
@ -2337,7 +2354,7 @@ int
sys_fsync(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
}
return 0;
}
@ -2367,7 +2384,8 @@ int
sys_readdir(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%lu, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
} else {
if (syserror(tcp) || tcp->u_rval == 0 || !verbose(tcp))
tprintf("%#lx", tcp->u_arg[1]);
@ -2405,7 +2423,8 @@ sys_getdents(struct tcb *tcp)
char *buf;
if (entering(tcp)) {
tprintf("%lu, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
return 0;
}
if (syserror(tcp) || !verbose(tcp)) {
@ -2489,7 +2508,8 @@ sys_getdents64(struct tcb *tcp)
char *buf;
if (entering(tcp)) {
tprintf("%lu, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
return 0;
}
if (syserror(tcp) || !verbose(tcp)) {
@ -2562,7 +2582,8 @@ sys_getdirentries(struct tcb *tcp)
char *buf;
if (entering(tcp)) {
tprintf("%lu, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
return 0;
}
if (syserror(tcp) || !verbose(tcp)) {
@ -2786,7 +2807,8 @@ int
sys_fsetxattr(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printstr(tcp, tcp->u_arg[1], -1);
print_xattr_val(tcp, 0, tcp->u_arg[2], tcp->u_arg[3], tcp->u_arg[3]);
tprintf(", ");
@ -2813,7 +2835,8 @@ int
sys_fgetxattr(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printstr(tcp, tcp->u_arg[1], -1);
} else {
print_xattr_val(tcp, syserror(tcp), tcp->u_arg[2], tcp->u_arg[3],
@ -2838,7 +2861,7 @@ int
sys_flistxattr(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
} else {
/* XXX Print value in format */
tprintf(", %p, %lu", (void *) tcp->u_arg[1], tcp->u_arg[2]);
@ -2861,7 +2884,8 @@ int
sys_fremovexattr(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printstr(tcp, tcp->u_arg[1], -1);
}
return 0;
@ -2885,7 +2909,8 @@ sys_fadvise64(struct tcb *tcp)
{
if (entering(tcp)) {
int argn;
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
argn = printllval(tcp, "%lld", 1);
tprintf(", %ld, ", tcp->u_arg[argn++]);
printxval(advise, tcp->u_arg[argn], "POSIX_FADV_???");
@ -2900,7 +2925,8 @@ sys_fadvise64_64(struct tcb *tcp)
{
if (entering(tcp)) {
int argn;
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
#if defined ARM || defined POWERPC
argn = printllval(tcp, "%lld, ", 2);
#else
@ -2951,7 +2977,8 @@ int
sys_inotify_add_watch(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printpath(tcp, tcp->u_arg[1]);
tprintf(", ");
printflags(inotify_modes, tcp->u_arg[2], "IN_???");
@ -2963,7 +2990,8 @@ int
sys_inotify_rm_watch(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, %ld", tcp->u_arg[0], tcp->u_arg[1]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", %ld", tcp->u_arg[1]);
}
return 0;
}
@ -2981,7 +3009,8 @@ sys_fallocate(struct tcb *tcp)
{
if (entering(tcp)) {
int argn;
tprintf("%ld, ", tcp->u_arg[0]); /* fd */
printfd(tcp, tcp->u_arg[0]); /* fd */
tprintf(", ");
tprintf("%#lo, ", tcp->u_arg[1]); /* mode */
argn = printllval(tcp, "%llu, ", 2); /* offset */
printllval(tcp, "%llu", argn); /* len */

90
io.c
View File

@ -47,11 +47,11 @@
#endif
int
sys_read(tcp)
struct tcb *tcp;
sys_read(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
} else {
if (syserror(tcp))
tprintf("%#lx", tcp->u_arg[1]);
@ -63,11 +63,11 @@ struct tcb *tcp;
}
int
sys_write(tcp)
struct tcb *tcp;
sys_write(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
tprintf(", %lu", tcp->u_arg[2]);
}
@ -147,11 +147,11 @@ unsigned long addr;
}
int
sys_readv(tcp)
struct tcb *tcp;
sys_readv(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
} else {
if (syserror(tcp)) {
tprintf("%#lx, %lu",
@ -165,11 +165,11 @@ struct tcb *tcp;
}
int
sys_writev(tcp)
struct tcb *tcp;
sys_writev(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1]);
tprintf(", %lu", tcp->u_arg[2]);
}
@ -180,11 +180,11 @@ struct tcb *tcp;
#if defined(SVR4)
int
sys_pread(tcp)
struct tcb *tcp;
sys_pread(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
} else {
if (syserror(tcp))
tprintf("%#lx", tcp->u_arg[1]);
@ -202,11 +202,11 @@ struct tcb *tcp;
}
int
sys_pwrite(tcp)
struct tcb *tcp;
sys_pwrite(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
#if UNIXWARE
/* off_t is signed int */
@ -225,11 +225,13 @@ struct tcb *tcp;
#include <sys/socket.h>
int
sys_sendfile(tcp)
struct tcb *tcp;
sys_sendfile(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, %ld, %llu, %lu", tcp->u_arg[0], tcp->u_arg[1],
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printfd(tcp, tcp->u_arg[1]);
tprintf(", %llu, %lu",
LONG_LONG(tcp->u_arg[2], tcp->u_arg[3]),
tcp->u_arg[4]);
} else {
@ -276,11 +278,11 @@ struct tcb *tcp;
#endif
int
sys_pread(tcp)
struct tcb *tcp;
sys_pread(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
} else {
if (syserror(tcp))
tprintf("%#lx", tcp->u_arg[1]);
@ -293,11 +295,11 @@ struct tcb *tcp;
}
int
sys_pwrite(tcp)
struct tcb *tcp;
sys_pwrite(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
tprintf(", %lu, ", tcp->u_arg[2]);
printllval(tcp, "%llu", PREAD_OFFSET_ARG);
@ -306,13 +308,15 @@ struct tcb *tcp;
}
int
sys_sendfile(tcp)
struct tcb *tcp;
sys_sendfile(struct tcb *tcp)
{
if (entering(tcp)) {
off_t offset;
tprintf("%ld, %ld, ", tcp->u_arg[0], tcp->u_arg[1]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printfd(tcp, tcp->u_arg[1]);
tprintf(", ");
if (!tcp->u_arg[2])
tprintf("NULL");
else if (umove(tcp, tcp->u_arg[2], &offset) < 0)
@ -325,13 +329,15 @@ struct tcb *tcp;
}
int
sys_sendfile64(tcp)
struct tcb *tcp;
sys_sendfile64(struct tcb *tcp)
{
if (entering(tcp)) {
loff_t offset;
tprintf("%ld, %ld, ", tcp->u_arg[0], tcp->u_arg[1]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printfd(tcp, tcp->u_arg[1]);
tprintf(", ");
if (!tcp->u_arg[2])
tprintf("NULL");
else if (umove(tcp, tcp->u_arg[2], &offset) < 0)
@ -347,11 +353,11 @@ struct tcb *tcp;
#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
int
sys_pread64(tcp)
struct tcb *tcp;
sys_pread64(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
} else {
if (syserror(tcp))
tprintf("%#lx", tcp->u_arg[1]);
@ -364,11 +370,11 @@ struct tcb *tcp;
}
int
sys_pwrite64(tcp)
struct tcb *tcp;
sys_pwrite64(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
tprintf(", %lu, ", tcp->u_arg[2]);
printllval(tcp, "%#llx", 3);
@ -378,13 +384,13 @@ struct tcb *tcp;
#endif
int
sys_ioctl(tcp)
struct tcb *tcp;
sys_ioctl(struct tcb *tcp)
{
const struct ioctlent *iop;
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
iop = ioctl_lookup(tcp->u_arg[1]);
if (iop) {
tprintf("%s", iop->symbol);

23
mem.c
View File

@ -232,12 +232,8 @@ long flags;
#endif
#if !HAVE_LONG_LONG_OFF_T
static
int
print_mmap(tcp,u_arg, offset)
struct tcb *tcp;
long *u_arg;
long long offset;
static int
print_mmap(struct tcb *tcp, long *u_arg, long long offset)
{
if (entering(tcp)) {
/* addr */
@ -261,10 +257,11 @@ long long offset;
#else
printflags(mmap_flags, u_arg[3], "MAP_???");
#endif
/* fd (is always int, not long) */
tprintf(", %d, ", (int)u_arg[4]);
/* fd */
tprintf(", ");
printfd(tcp, u_arg[4]);
/* offset */
tprintf("%#llx", offset);
tprintf(", %#llx", offset);
}
return RVAL_HEX;
}
@ -341,8 +338,7 @@ struct tcb *tcp;
#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
int
sys_mmap64(tcp)
struct tcb *tcp;
sys_mmap64(struct tcb *tcp)
{
#ifdef linux
#ifdef ALPHA
@ -378,9 +374,10 @@ struct tcb *tcp;
printflags(mmap_flags, u_arg[3], "MAP_???");
#endif
/* fd */
tprintf(", %ld, ", u_arg[4]);
tprintf(", ");
printfd(tcp, tcp->u_arg[4]);
/* offset */
printllval(tcp, "%#llx", 5);
printllval(tcp, ", %#llx", 5);
}
return RVAL_HEX;
}

View File

@ -2132,7 +2132,8 @@ static int
do_signalfd(struct tcb *tcp, int flags_arg)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
print_sigset(tcp, tcp->u_arg[1], 1);
tprintf(", %lu", tcp->u_arg[2]);
if (flags_arg >= 0) {

View File

@ -338,7 +338,9 @@ decode_poll(struct tcb *tcp, long pts)
tprintf("{fd=%d}", fds.fd);
continue;
}
tprintf("{fd=%d, events=", fds.fd);
tprintf("{fd=");
printfd(tcp, fds.fd);
tprintf(", events=");
printflags(pollflags, fds.events, "POLL???");
tprintf("}");
}

5
time.c
View File

@ -1013,7 +1013,8 @@ int
sys_timerfd_settime(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printflags(timerfdflags, tcp->u_arg[1], "TFD_???");
tprintf(", ");
printitv(tcp, tcp->u_arg[2]);
@ -1027,7 +1028,7 @@ int
sys_timerfd_gettime(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
printfd(tcp, tcp->u_arg[0]);
tprintf(", ");
printitv(tcp, tcp->u_arg[1]);
}

6
util.c
View File

@ -415,6 +415,12 @@ printnum_int(struct tcb *tcp, long addr, const char *fmt)
tprintf("]");
}
void
printfd(struct tcb *tcp, int fd)
{
tprintf("%d", fd);
}
void
printuid(text, uid)
const char *text;