]> granicus.if.org Git - strace/commitdiff
Convert parser of struct timeval to new mpers infrastructure
authorDmitry V. Levin <ldv@altlinux.org>
Fri, 18 Sep 2015 15:16:11 +0000 (15:16 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Sat, 19 Sep 2015 01:04:49 +0000 (04:04 +0300)
* 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.

defs.h
print_time.c
time.c
utimes.c

diff --git a/defs.h b/defs.h
index 5368390d1152a2e5f3fb29793ff69a64df157c7b..826ab94005ba32682223f907ed187c6b3d9d489b 100644 (file)
--- 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);
index f9caf26a8b31f048424067edbcd0be05e4607c07..147651996605e2719c5cef35ef264246a9eae31a 100644 (file)
@@ -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 8e5abab40c63d4151b7f7d33d7a30f458c4577dc..4dda0b30f062a9d2ade48b066fad2e902c6170ea 100644 (file)
--- 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;
 }
index 22b21a55606896ad3cd1ade7c32376db71a98b4e..31d65087af70c3c3656e0e11f54cae03a84a85dc 100644 (file)
--- 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;
 }