Convert parser of struct timespec to new mpers infrastructure

* defs.h (print_timespec): Remove.
* print_time.c (print_timespec): New mpers printer.
* futex.c (sys_futex): Use print_timespec instead of printtv.
* ipc_sem.c (sys_semtimedop): Likewise.
* mq.c (sys_mq_timedsend, sys_mq_timedreceive): Likewise.
* time.c (clock_settime, clock_gettime, clock_nanosleep): Likewise.
(print_timespec): Remove.
This commit is contained in:
Дмитрий Левин 2015-09-18 15:16:11 +00:00
parent f94d8d6e55
commit 5938526c81
6 changed files with 22 additions and 21 deletions

1
defs.h
View File

@ -655,7 +655,6 @@ extern void printtv_bitness(struct tcb *, long, enum bitness_t, int);
#define printtv_special(tcp, addr) \
printtv_bitness((tcp), (addr), BITNESS_CURRENT, 1)
extern char *sprinttv(char *, struct tcb *, long, enum bitness_t, int special);
extern void print_timespec(struct tcb *, long);
extern void sprint_timespec(char *, struct tcb *, long);
extern void printfd(struct tcb *, int);
extern bool print_sockaddr_by_inode(const unsigned long, const char *);

View File

@ -34,11 +34,11 @@ SYS_FUNC(futex)
case FUTEX_WAIT:
case FUTEX_LOCK_PI:
tprints(", ");
printtv(tcp, timeout);
print_timespec(tcp, timeout);
break;
case FUTEX_WAIT_BITSET:
tprints(", ");
printtv(tcp, timeout);
print_timespec(tcp, timeout);
tprintf(", %x", val3);
break;
case FUTEX_WAKE_BITSET:
@ -69,7 +69,7 @@ SYS_FUNC(futex)
break;
case FUTEX_WAIT_REQUEUE_PI:
tprints(", ");
printtv(tcp, timeout);
print_timespec(tcp, timeout);
tprints(", ");
printaddr(uaddr2);
break;

View File

@ -99,14 +99,14 @@ SYS_FUNC(semtimedop)
tprint_sembuf_array(tcp, tcp->u_arg[3], tcp->u_arg[1]);
tprints(", ");
#if defined(S390) || defined(S390X)
printtv(tcp, tcp->u_arg[2]);
print_timespec(tcp, tcp->u_arg[2]);
#else
printtv(tcp, tcp->u_arg[4]);
print_timespec(tcp, tcp->u_arg[4]);
#endif
} else {
tprint_sembuf_array(tcp, tcp->u_arg[1], tcp->u_arg[2]);
tprints(", ");
printtv(tcp, tcp->u_arg[3]);
print_timespec(tcp, tcp->u_arg[3]);
}
return RVAL_DECODED;
}

4
mq.c
View File

@ -48,7 +48,7 @@ SYS_FUNC(mq_timedsend)
tprintf("%ld, ", tcp->u_arg[0]);
printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
tprintf(", %lu, %ld, ", tcp->u_arg[2], tcp->u_arg[3]);
printtv(tcp, tcp->u_arg[4]);
print_timespec(tcp, tcp->u_arg[4]);
return RVAL_DECODED;
}
@ -65,7 +65,7 @@ SYS_FUNC(mq_timedreceive)
* whether the syscall has failed or not.
*/
temporarily_clear_syserror(tcp);
printtv(tcp, tcp->u_arg[4]);
print_timespec(tcp, tcp->u_arg[4]);
restore_cleared_syserror(tcp);
}
return 0;

View File

@ -46,6 +46,16 @@ print_timeval_t(const timeval_t *t)
tprintf(time_fmt, (intmax_t) t->tv_sec, (intmax_t) t->tv_usec);
}
MPERS_PRINTER_DECL(void, print_timespec)(struct tcb *tcp, const long addr)
{
timespec_t t;
if (umove_or_printaddr(tcp, addr, &t))
return;
print_timespec_t(&t);
}
MPERS_PRINTER_DECL(void, print_timespec_utime_pair)(struct tcb *tcp, const long addr)
{
timespec_t t[2];

16
time.c
View File

@ -102,14 +102,6 @@ sprinttv(char *buf, struct tcb *tcp, long addr, enum bitness_t bitness, int spec
return buf + sprintf(buf, "%#lx", addr);
}
void
print_timespec(struct tcb *tcp, long addr)
{
char buf[TIMESPEC_TEXT_BUFSIZE];
sprint_timespec(buf, tcp, addr);
tprints(buf);
}
void
sprint_timespec(char *buf, struct tcb *tcp, long addr)
{
@ -314,7 +306,7 @@ SYS_FUNC(clock_settime)
{
printclockname(tcp->u_arg[0]);
tprints(", ");
printtv(tcp, tcp->u_arg[1]);
print_timespec(tcp, tcp->u_arg[1]);
return RVAL_DECODED;
}
@ -325,7 +317,7 @@ SYS_FUNC(clock_gettime)
printclockname(tcp->u_arg[0]);
tprints(", ");
} else {
printtv(tcp, tcp->u_arg[1]);
print_timespec(tcp, tcp->u_arg[1]);
}
return 0;
}
@ -337,7 +329,7 @@ SYS_FUNC(clock_nanosleep)
tprints(", ");
printflags(clockflags, tcp->u_arg[1], "TIMER_???");
tprints(", ");
printtv(tcp, tcp->u_arg[2]);
print_timespec(tcp, tcp->u_arg[2]);
tprints(", ");
} else {
/*
@ -346,7 +338,7 @@ SYS_FUNC(clock_nanosleep)
*/
if (!tcp->u_arg[1] && is_erestart(tcp)) {
temporarily_clear_syserror(tcp);
printtv(tcp, tcp->u_arg[3]);
print_timespec(tcp, tcp->u_arg[3]);
restore_cleared_syserror(tcp);
} else {
printaddr(tcp->u_arg[3]);