diff options
| author | Dmitry V. Levin <ldv@altlinux.org> | 2006-12-13 17:14:36 +0000 |
|---|---|---|
| committer | Patrick Jacques <kernelzilla@kinetic-computing.com> | 2010-11-16 00:05:15 -0700 |
| commit | 788f507761f6a86b59ee2287cdad3babacbc4eb3 (patch) | |
| tree | b853dc729a93b084c852944c6bc1a33de2c6be55 | |
| parent | f48d41579269a255e4ebd88e616d36f44805de16 (diff) | |
| download | android_external_strace-788f507761f6a86b59ee2287cdad3babacbc4eb3.tar.gz android_external_strace-788f507761f6a86b59ee2287cdad3babacbc4eb3.tar.bz2 android_external_strace-788f507761f6a86b59ee2287cdad3babacbc4eb3.zip | |
2006-12-10 Dmitry V. Levin <ldv@altlinux.org>
Add biarch support for "struct itimerval".
* time.c (printitv): Rename to printitv_bitness().
Add printitv() macro wrapper around printitv_bitness().
(printitv_bitness): Handle 32-bit personality.
[ALPHA] (sys_osf_getitimer, sys_osf_setitimer):
Use printitv_bitness().
(tprint_timeval, tprint_timeval32): New functions.
(printtv_bitness, printitv_bitness, sys_adjtimex): Use them.
(printitv32): Remove.
| -rw-r--r-- | ChangeLog | 25 | ||||
| -rw-r--r-- | time.c | 112 |
2 files changed, 86 insertions, 51 deletions
@@ -1,5 +1,30 @@ 2006-12-10 Dmitry V. Levin <ldv@altlinux.org> + Add biarch support for "struct itimerval". + * time.c (printitv): Rename to printitv_bitness(). + Add printitv() macro wrapper around printitv_bitness(). + (printitv_bitness): Handle 32-bit personality. + [ALPHA] (sys_osf_getitimer, sys_osf_setitimer): + Use printitv_bitness(). + (tprint_timeval, tprint_timeval32): New functions. + (printtv_bitness, printitv_bitness, sys_adjtimex): Use them. + (printitv32): Remove. + + Add biarch support for "struct timeval". + * defs.h (bitness_t): New enum type. + (printtv_bitness, sprinttv): New function prototypes. + (printtv): Convert to macro wrapper around printtv_bitness(). + (printtv32): Remove. + * desc.c (decode_select): Use printtv_bitness() and sprinttv(). + (sys_oldselect, sys_osf_select, sys_select, sys_pselect6): + Update decode_select() use. + * file.c [ALPHA] (sys_osf_utimes): Use printtv_bitness(). + * time.c (printtv_bitness, sprinttv): New functions. + (printtv, printtv32): Remove. + [ALPHA] (sys_osf_settimeofday, sys_osf_settimeofday): + Use printtv_bitness(). + Fixes RH#171626, RH#173050. + Add biarch support for "struct iovec". * defs.h (personality_wordsize): Add. * io.c [HAVE_SYS_UIO_H] (tprint_iov): [LINUX && @@ -47,6 +47,19 @@ struct timeval32 u_int32_t tv_sec, tv_usec; }; +static void +tprint_timeval32(struct tcb *tcp, const struct timeval32 *tv) +{ + tprintf("{%u, %u}", tv->tv_sec, tv->tv_usec); +} + +static void +tprint_timeval(struct tcb *tcp, const struct timeval *tv) +{ + tprintf("{%lu, %lu}", + (unsigned long) tv->tv_sec, (unsigned long) tv->tv_usec); +} + void printtv_bitness(struct tcb *tcp, long addr, enum bitness_t bitness) { @@ -67,16 +80,13 @@ printtv_bitness(struct tcb *tcp, long addr, enum bitness_t bitness) struct timeval32 tv; if ((rc = umove(tcp, addr, &tv)) >= 0) - tprintf("{%u, %u}", - tv.tv_sec, tv.tv_usec); + tprint_timeval32(tcp, &tv); } else { struct timeval tv; if ((rc = umove(tcp, addr, &tv)) >= 0) - tprintf("{%lu, %lu}", - (unsigned long) tv.tv_sec, - (unsigned long) tv.tv_usec); + tprint_timeval(tcp, &tv); } if (rc < 0) @@ -238,51 +248,52 @@ static const struct xlat which[] = { }; static void -printitv(tcp, addr) -struct tcb *tcp; -long addr; +printitv_bitness(struct tcb *tcp, long addr, enum bitness_t bitness) { - struct itimerval itv; - if (addr == 0) tprintf("NULL"); else if (!verbose(tcp)) tprintf("%#lx", addr); - else if (umove(tcp, addr, &itv) < 0) - tprintf("{...}"); - else { - tprintf("{it_interval={%lu, %lu}, it_value={%lu, %lu}}", - (long) itv.it_interval.tv_sec, (long) itv.it_interval.tv_usec, - (long) itv.it_value.tv_sec, (long) itv.it_value.tv_usec); - } -} + else + { + int rc; + + if (bitness == BITNESS_32 +#if defined(LINUX) && SUPPORTED_PERSONALITIES > 1 + || personality_wordsize[current_personality] == 4 +#endif + ) + { + struct + { + struct timeval32 it_interval, it_value; + } itv; + + if ((rc = umove(tcp, addr, &itv)) >= 0) + tprintf("{it_interval="); + tprint_timeval32(tcp, &itv.it_interval); + tprintf(", it_value="); + tprint_timeval32(tcp, &itv.it_value); + tprintf("}"); + } else + { + struct itimerval itv; + if ((rc = umove(tcp, addr, &itv)) >= 0) + tprintf("{it_interval="); + tprint_timeval(tcp, &itv.it_interval); + tprintf(", it_value="); + tprint_timeval(tcp, &itv.it_value); + tprintf("}"); + } -#ifdef ALPHA -static void -printitv32(tcp, addr) -struct tcb *tcp; -long addr; -{ - struct itimerval32 - { - struct timeval32 it_interval; - struct timeval32 it_value; - } itv; - - if (addr == 0) - tprintf("NULL"); - else if (!verbose(tcp)) - tprintf("%#lx", addr); - else if (umove(tcp, addr, &itv) < 0) - tprintf("{...}"); - else { - tprintf("{it_interval={%u, %u}, it_value={%u, %u}}", - itv.it_interval.tv_sec, itv.it_interval.tv_usec, - itv.it_value.tv_sec, itv.it_value.tv_usec); - } + if (rc < 0) + tprintf("{...}"); + } } -#endif + +#define printitv(tcp, addr) \ + printitv_bitness((tcp), (addr), BITNESS_CURRENT) int sys_getitimer(tcp) @@ -313,7 +324,7 @@ struct tcb *tcp; if (syserror(tcp)) tprintf("%#lx", tcp->u_arg[1]); else - printitv32(tcp, tcp->u_arg[1]); + printitv_bitness(tcp, tcp->u_arg[1], BITNESS_32); } return 0; } @@ -345,13 +356,13 @@ struct tcb *tcp; if (entering(tcp)) { printxval(which, tcp->u_arg[0], "ITIMER_???"); tprintf(", "); - printitv32(tcp, tcp->u_arg[1]); + printitv_bitness(tcp, tcp->u_arg[1], BITNESS_32); tprintf(", "); } else { if (syserror(tcp)) tprintf("%#lx", tcp->u_arg[2]); else - printitv32(tcp, tcp->u_arg[2]); + printitv_bitness(tcp, tcp->u_arg[2], BITNESS_32); } return 0; } @@ -380,9 +391,8 @@ struct tcb *tcp; txc.maxerror, txc.esterror, txc.status); tprintf("time_constant=%ld, precision=%lu, ", txc.time_constant, txc.precision); - tprintf("tolerance=%ld, time={%lu, %lu}}", - txc.tolerance, (long) txc.time.tv_sec, - (long) txc.time.tv_usec); + tprintf("tolerance=%ld, time=", txc.tolerance); + tprint_timeval(tcp, &txc.time); #else tprintf("{modes=%d, offset=%ld, freq=%ld, ", txc.modes, txc.offset, txc.freq); @@ -390,12 +400,12 @@ struct tcb *tcp; txc.maxerror, txc.esterror, txc.status); tprintf("constant=%ld, precision=%lu, ", txc.constant, txc.precision); - tprintf("tolerance=%ld, time={%lu, %lu}}", - txc.tolerance, (long) txc.time.tv_sec, - (long) txc.time.tv_usec); + tprintf("tolerance=%ld, time=", txc.tolerance); + tprint_timeval(tcp, &txc.time); /* there's a bunch of other stuff, but it's not * worth the time or the trouble to include */ #endif + tprintf("}"); } } return 0; |
