From 6fb8c6feb9075fc96bd67a84ba61a0fdab6c80d8 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Sat, 18 Jul 2015 00:19:50 +0000 Subject: [PATCH] Mpersify parsers of getrusage, waitpid, wait4, and waitid syscalls Fix multiple personalities support in parsers of getrusage, waitpid, wait4, and waitid syscalls by converting printrusage into a mpersified printer. * defs.h (printrusage): Remove. * printrusage.c (rusage_t): New typedef. Mpersify it. (printrusage): Use it instead of struct rusage. Wrap function name into MPERS_PRINTER_DECL. * resource.c (sys_getrusage): Use mpersified printrusage. * wait.c (printwaitn, sys_waitid): Likewise. --- defs.h | 1 - printrusage.c | 91 +++++++++++++++++++++++++++------------------------ resource.c | 2 +- wait.c | 4 +-- 4 files changed, 51 insertions(+), 47 deletions(-) diff --git a/defs.h b/defs.h index c2c44b34..04653c01 100644 --- a/defs.h +++ b/defs.h @@ -635,7 +635,6 @@ extern bool print_sockaddr_by_inode(const unsigned long, const char *); extern void print_dirfd(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); #ifdef ALPHA extern void printrusage32(struct tcb *, long); #endif diff --git a/printrusage.c b/printrusage.c index 7661e7d1..be56e66f 100644 --- a/printrusage.c +++ b/printrusage.c @@ -31,34 +31,39 @@ #include "defs.h" #include -void -printrusage(struct tcb *tcp, long addr) +#include DEF_MPERS_TYPE(rusage_t) + +typedef struct rusage rusage_t; + +#include MPERS_DEFS + +MPERS_PRINTER_DECL(void, printrusage)(struct tcb *tcp, long addr) { - struct rusage ru; + rusage_t ru; if (umove_or_printaddr(tcp, addr, &ru)) return; - if (!abbrev(tcp)) { - tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ", - (long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec, - (long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec); - tprintf("ru_maxrss=%lu, ru_ixrss=%lu, ", - ru.ru_maxrss, ru.ru_ixrss); - tprintf("ru_idrss=%lu, ru_isrss=%lu, ", - ru.ru_idrss, ru.ru_isrss); - tprintf("ru_minflt=%lu, ru_majflt=%lu, ru_nswap=%lu, ", - ru.ru_minflt, ru.ru_majflt, ru.ru_nswap); - tprintf("ru_inblock=%lu, ru_oublock=%lu, ", - ru.ru_inblock, ru.ru_oublock); - tprintf("ru_msgsnd=%lu, ru_msgrcv=%lu, ", - ru.ru_msgsnd, ru.ru_msgrcv); - tprintf("ru_nsignals=%lu, ru_nvcsw=%lu, ru_nivcsw=%lu}", - ru.ru_nsignals, ru.ru_nvcsw, ru.ru_nivcsw); - } + + tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ", + (long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec, + (long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec); + if (abbrev(tcp)) + tprints("...}"); else { - tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ...}", - (long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec, - (long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec); + tprintf("ru_maxrss=%lu, ", (long) ru.ru_maxrss); + tprintf("ru_ixrss=%lu, ", (long) ru.ru_ixrss); + tprintf("ru_idrss=%lu, ", (long) ru.ru_idrss); + tprintf("ru_isrss=%lu, ", (long) ru.ru_isrss); + tprintf("ru_minflt=%lu, ", (long) ru.ru_minflt); + tprintf("ru_majflt=%lu, ", (long) ru.ru_majflt); + tprintf("ru_nswap=%lu, ", (long) ru.ru_nswap); + tprintf("ru_inblock=%lu, ", (long) ru.ru_inblock); + tprintf("ru_oublock=%lu, ", (long) ru.ru_oublock); + tprintf("ru_msgsnd=%lu, ", (long) ru.ru_msgsnd); + tprintf("ru_msgrcv=%lu, ", (long) ru.ru_msgrcv); + tprintf("ru_nsignals=%lu, ", (long) ru.ru_nsignals); + tprintf("ru_nvcsw=%lu, ", (long) ru.ru_nvcsw); + tprintf("ru_nivcsw=%lu}", (long) ru.ru_nivcsw); } } @@ -91,27 +96,27 @@ printrusage32(struct tcb *tcp, long addr) if (umove_or_printaddr(tcp, addr, &ru)) return; - if (!abbrev(tcp)) { - tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ", - (long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec, - (long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec); - tprintf("ru_maxrss=%lu, ru_ixrss=%lu, ", - ru.ru_maxrss, ru.ru_ixrss); - tprintf("ru_idrss=%lu, ru_isrss=%lu, ", - ru.ru_idrss, ru.ru_isrss); - tprintf("ru_minflt=%lu, ru_majflt=%lu, ru_nswap=%lu, ", - ru.ru_minflt, ru.ru_majflt, ru.ru_nswap); - tprintf("ru_inblock=%lu, ru_oublock=%lu, ", - ru.ru_inblock, ru.ru_oublock); - tprintf("ru_msgsnd=%lu, ru_msgrcv=%lu, ", - ru.ru_msgsnd, ru.ru_msgrcv); - tprintf("ru_nsignals=%lu, ru_nvcsw=%lu, ru_nivcsw=%lu}", - ru.ru_nsignals, ru.ru_nvcsw, ru.ru_nivcsw); - } + + tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ", + (long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec, + (long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec); + if (abbrev(tcp)) + tprints("...}"); else { - tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ...}", - (long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec, - (long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec); + tprintf("ru_maxrss=%lu, ", ru.ru_maxrss); + tprintf("ru_ixrss=%lu, ", ru.ru_ixrss); + tprintf("ru_idrss=%lu, ", ru.ru_idrss); + tprintf("ru_isrss=%lu, ", ru.ru_isrss); + tprintf("ru_minflt=%lu, ", ru.ru_minflt); + tprintf("ru_majflt=%lu, ", ru.ru_majflt); + tprintf("ru_nswap=%lu, ", ru.ru_nswap); + tprintf("ru_inblock=%lu, ", ru.ru_inblock); + tprintf("ru_oublock=%lu, ", ru.ru_oublock); + tprintf("ru_msgsnd=%lu, ", ru.ru_msgsnd); + tprintf("ru_msgrcv=%lu, ", ru.ru_msgrcv); + tprintf("ru_nsignals=%lu, ", ru.ru_nsignals); + tprintf("ru_nvcsw=%lu, ", ru.ru_nvcsw); + tprintf("ru_nivcsw=%lu}", ru.ru_nivcsw); } } #endif diff --git a/resource.c b/resource.c index c68f0456..be44aa92 100644 --- a/resource.c +++ b/resource.c @@ -162,7 +162,7 @@ SYS_FUNC(getrusage) tprints(", "); } else - printrusage(tcp, tcp->u_arg[1]); + MPERS_PRINTER_NAME(printrusage)(tcp, tcp->u_arg[1]); return 0; } diff --git a/wait.c b/wait.c index 928f3ded..07cc3614 100644 --- a/wait.c +++ b/wait.c @@ -114,7 +114,7 @@ printwaitn(struct tcb *tcp, int n, int bitness) printrusage32(tcp, tcp->u_arg[3]); else #endif - printrusage(tcp, tcp->u_arg[3]); + MPERS_PRINTER_NAME(printrusage)(tcp, tcp->u_arg[3]); } else printaddr(tcp->u_arg[3]); @@ -156,7 +156,7 @@ SYS_FUNC(waitid) if (tcp->s_ent->nargs > 4) { /* usage */ tprints(", "); - printrusage(tcp, tcp->u_arg[4]); + MPERS_PRINTER_NAME(printrusage)(tcp, tcp->u_arg[4]); } } return 0; -- 2.40.0