From: Dmitry V. Levin Date: Fri, 18 Sep 2015 15:16:11 +0000 (+0000) Subject: Convert parser of struct timeval to new mpers infrastructure X-Git-Tag: v4.11~176 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f1e3a320458be22ef7e308f44d0a7b80887da36b;p=strace Convert parser of struct timeval to new mpers infrastructure * defs.h (printtv, printtv_special): Remove. [ALPHA] (print_timeval32, print_timeval32_pair): New prototypes. * print_time.c (print_timeval): New mpers printer. [ALPHA] (print_timeval32, print_timeval32_pair): New functions. * time.c (sys_gettimeofday, sys_settimeofday): Use print_timeval instead of printtv. [ALPHA] (sys_osf_gettimeofday, sys_osf_settimeofday): Use print_timeval32 instead of printtv_bitness. * utimes.c [ALPHA] (sys_osf_utimes): Use print_timeval32_pair instead of printtv_bitness. --- diff --git a/defs.h b/defs.h index 5368390d..826ab940 100644 --- a/defs.h +++ b/defs.h @@ -650,10 +650,6 @@ extern void printpathn(struct tcb *, long, unsigned int); #define TIMESPEC_TEXT_BUFSIZE (sizeof(long)*3 * 2 + sizeof("{%u, %u}")) #define TIMEVAL_TEXT_BUFSIZE TIMESPEC_TEXT_BUFSIZE extern void printtv_bitness(struct tcb *, long, enum bitness_t, int); -#define printtv(tcp, addr) \ - printtv_bitness((tcp), (addr), BITNESS_CURRENT, 0) -#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 sprint_timespec(char *, struct tcb *, long); extern void printfd(struct tcb *, int); @@ -663,6 +659,8 @@ extern void printsock(struct tcb *, long, int); extern void print_sock_optmgmt(struct tcb *, long, int); #ifdef ALPHA extern void printrusage32(struct tcb *, long); +extern void print_timeval32(struct tcb *tcp, long); +extern void print_timeval32_pair(struct tcb *tcp, long); extern void print_itimerval32(struct tcb *tcp, long); #endif extern void printuid(const char *, const unsigned int); diff --git a/print_time.c b/print_time.c index f9caf26a..14765199 100644 --- a/print_time.c +++ b/print_time.c @@ -84,6 +84,16 @@ MPERS_PRINTER_DECL(void, print_itimerspec)(struct tcb *tcp, const long addr) tprints("}"); } +MPERS_PRINTER_DECL(void, print_timeval)(struct tcb *tcp, const long addr) +{ + timeval_t t; + + if (umove_or_printaddr(tcp, addr, &t)) + return; + + print_timeval_t(&t); +} + MPERS_PRINTER_DECL(void, print_timeval_pair)(struct tcb *tcp, const long addr) { timeval_t t[2]; @@ -136,6 +146,32 @@ print_timeval32_t(const timeval32_t *t) tprintf(time_fmt, (intmax_t) t->tv_sec, (intmax_t) t->tv_usec); } +void +print_timeval32(struct tcb *tcp, const long addr) +{ + timeval32_t t; + + if (umove_or_printaddr(tcp, addr, &t)) + return; + + print_timeval32_t(&t); +} + +void +print_timeval32_pair(struct tcb *tcp, const long addr) +{ + timeval32_t t[2]; + + if (umove_or_printaddr(tcp, addr, &t)) + return; + + tprints("["); + print_timeval32_t(&t[0]); + tprints(", "); + print_timeval32_t(&t[1]); + tprints("]"); +} + void print_itimerval32(struct tcb *tcp, const long addr) { diff --git a/time.c b/time.c index 8e5abab4..4dda0b30 100644 --- a/time.c +++ b/time.c @@ -139,9 +139,9 @@ sprint_timespec(char *buf, struct tcb *tcp, long addr) SYS_FUNC(gettimeofday) { if (exiting(tcp)) { - printtv(tcp, tcp->u_arg[0]); + print_timeval(tcp, tcp->u_arg[0]); tprints(", "); - printtv(tcp, tcp->u_arg[1]); + print_timeval(tcp, tcp->u_arg[1]); } return 0; } @@ -150,9 +150,9 @@ SYS_FUNC(gettimeofday) SYS_FUNC(osf_gettimeofday) { if (exiting(tcp)) { - printtv_bitness(tcp, tcp->u_arg[0], BITNESS_32, 0); + print_timeval32(tcp, tcp->u_arg[0]); tprints(", "); - printtv_bitness(tcp, tcp->u_arg[1], BITNESS_32, 0); + print_timeval32(tcp, tcp->u_arg[1]); } return 0; } @@ -160,9 +160,9 @@ SYS_FUNC(osf_gettimeofday) SYS_FUNC(settimeofday) { - printtv(tcp, tcp->u_arg[0]); + print_timeval(tcp, tcp->u_arg[0]); tprints(", "); - printtv(tcp, tcp->u_arg[1]); + print_timeval(tcp, tcp->u_arg[1]); return RVAL_DECODED; } @@ -170,9 +170,9 @@ SYS_FUNC(settimeofday) #ifdef ALPHA SYS_FUNC(osf_settimeofday) { - printtv_bitness(tcp, tcp->u_arg[0], BITNESS_32, 0); + print_timeval32(tcp, tcp->u_arg[0]); tprints(", "); - printtv_bitness(tcp, tcp->u_arg[1], BITNESS_32, 0); + print_timeval32(tcp, tcp->u_arg[1]); return RVAL_DECODED; } diff --git a/utimes.c b/utimes.c index 22b21a55..31d65087 100644 --- a/utimes.c +++ b/utimes.c @@ -36,7 +36,7 @@ SYS_FUNC(osf_utimes) { printpath(tcp, tcp->u_arg[0]); tprints(", "); - printtv_bitness(tcp, tcp->u_arg[1], BITNESS_32, 0); + print_timeval32_pair(tcp, tcp->u_arg[1]); return RVAL_DECODED; }