Skip to content

Commit 6fb8c6f

Browse files
committed
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.
1 parent 3b7674c commit 6fb8c6f

File tree

4 files changed

+51
-47
lines changed

4 files changed

+51
-47
lines changed

defs.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,6 @@ extern bool print_sockaddr_by_inode(const unsigned long, const char *);
635635
extern void print_dirfd(struct tcb *, int);
636636
extern void printsock(struct tcb *, long, int);
637637
extern void print_sock_optmgmt(struct tcb *, long, int);
638-
extern void printrusage(struct tcb *, long);
639638
#ifdef ALPHA
640639
extern void printrusage32(struct tcb *, long);
641640
#endif

printrusage.c

Lines changed: 48 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -31,34 +31,39 @@
3131
#include "defs.h"
3232
#include <sys/resource.h>
3333

34-
void
35-
printrusage(struct tcb *tcp, long addr)
34+
#include DEF_MPERS_TYPE(rusage_t)
35+
36+
typedef struct rusage rusage_t;
37+
38+
#include MPERS_DEFS
39+
40+
MPERS_PRINTER_DECL(void, printrusage)(struct tcb *tcp, long addr)
3641
{
37-
struct rusage ru;
42+
rusage_t ru;
3843

3944
if (umove_or_printaddr(tcp, addr, &ru))
4045
return;
41-
if (!abbrev(tcp)) {
42-
tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ",
43-
(long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec,
44-
(long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec);
45-
tprintf("ru_maxrss=%lu, ru_ixrss=%lu, ",
46-
ru.ru_maxrss, ru.ru_ixrss);
47-
tprintf("ru_idrss=%lu, ru_isrss=%lu, ",
48-
ru.ru_idrss, ru.ru_isrss);
49-
tprintf("ru_minflt=%lu, ru_majflt=%lu, ru_nswap=%lu, ",
50-
ru.ru_minflt, ru.ru_majflt, ru.ru_nswap);
51-
tprintf("ru_inblock=%lu, ru_oublock=%lu, ",
52-
ru.ru_inblock, ru.ru_oublock);
53-
tprintf("ru_msgsnd=%lu, ru_msgrcv=%lu, ",
54-
ru.ru_msgsnd, ru.ru_msgrcv);
55-
tprintf("ru_nsignals=%lu, ru_nvcsw=%lu, ru_nivcsw=%lu}",
56-
ru.ru_nsignals, ru.ru_nvcsw, ru.ru_nivcsw);
57-
}
46+
47+
tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ",
48+
(long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec,
49+
(long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec);
50+
if (abbrev(tcp))
51+
tprints("...}");
5852
else {
59-
tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ...}",
60-
(long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec,
61-
(long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec);
53+
tprintf("ru_maxrss=%lu, ", (long) ru.ru_maxrss);
54+
tprintf("ru_ixrss=%lu, ", (long) ru.ru_ixrss);
55+
tprintf("ru_idrss=%lu, ", (long) ru.ru_idrss);
56+
tprintf("ru_isrss=%lu, ", (long) ru.ru_isrss);
57+
tprintf("ru_minflt=%lu, ", (long) ru.ru_minflt);
58+
tprintf("ru_majflt=%lu, ", (long) ru.ru_majflt);
59+
tprintf("ru_nswap=%lu, ", (long) ru.ru_nswap);
60+
tprintf("ru_inblock=%lu, ", (long) ru.ru_inblock);
61+
tprintf("ru_oublock=%lu, ", (long) ru.ru_oublock);
62+
tprintf("ru_msgsnd=%lu, ", (long) ru.ru_msgsnd);
63+
tprintf("ru_msgrcv=%lu, ", (long) ru.ru_msgrcv);
64+
tprintf("ru_nsignals=%lu, ", (long) ru.ru_nsignals);
65+
tprintf("ru_nvcsw=%lu, ", (long) ru.ru_nvcsw);
66+
tprintf("ru_nivcsw=%lu}", (long) ru.ru_nivcsw);
6267
}
6368
}
6469

@@ -91,27 +96,27 @@ printrusage32(struct tcb *tcp, long addr)
9196

9297
if (umove_or_printaddr(tcp, addr, &ru))
9398
return;
94-
if (!abbrev(tcp)) {
95-
tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ",
96-
(long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec,
97-
(long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec);
98-
tprintf("ru_maxrss=%lu, ru_ixrss=%lu, ",
99-
ru.ru_maxrss, ru.ru_ixrss);
100-
tprintf("ru_idrss=%lu, ru_isrss=%lu, ",
101-
ru.ru_idrss, ru.ru_isrss);
102-
tprintf("ru_minflt=%lu, ru_majflt=%lu, ru_nswap=%lu, ",
103-
ru.ru_minflt, ru.ru_majflt, ru.ru_nswap);
104-
tprintf("ru_inblock=%lu, ru_oublock=%lu, ",
105-
ru.ru_inblock, ru.ru_oublock);
106-
tprintf("ru_msgsnd=%lu, ru_msgrcv=%lu, ",
107-
ru.ru_msgsnd, ru.ru_msgrcv);
108-
tprintf("ru_nsignals=%lu, ru_nvcsw=%lu, ru_nivcsw=%lu}",
109-
ru.ru_nsignals, ru.ru_nvcsw, ru.ru_nivcsw);
110-
}
99+
100+
tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ",
101+
(long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec,
102+
(long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec);
103+
if (abbrev(tcp))
104+
tprints("...}");
111105
else {
112-
tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ...}",
113-
(long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec,
114-
(long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec);
106+
tprintf("ru_maxrss=%lu, ", ru.ru_maxrss);
107+
tprintf("ru_ixrss=%lu, ", ru.ru_ixrss);
108+
tprintf("ru_idrss=%lu, ", ru.ru_idrss);
109+
tprintf("ru_isrss=%lu, ", ru.ru_isrss);
110+
tprintf("ru_minflt=%lu, ", ru.ru_minflt);
111+
tprintf("ru_majflt=%lu, ", ru.ru_majflt);
112+
tprintf("ru_nswap=%lu, ", ru.ru_nswap);
113+
tprintf("ru_inblock=%lu, ", ru.ru_inblock);
114+
tprintf("ru_oublock=%lu, ", ru.ru_oublock);
115+
tprintf("ru_msgsnd=%lu, ", ru.ru_msgsnd);
116+
tprintf("ru_msgrcv=%lu, ", ru.ru_msgrcv);
117+
tprintf("ru_nsignals=%lu, ", ru.ru_nsignals);
118+
tprintf("ru_nvcsw=%lu, ", ru.ru_nvcsw);
119+
tprintf("ru_nivcsw=%lu}", ru.ru_nivcsw);
115120
}
116121
}
117122
#endif

resource.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ SYS_FUNC(getrusage)
162162
tprints(", ");
163163
}
164164
else
165-
printrusage(tcp, tcp->u_arg[1]);
165+
MPERS_PRINTER_NAME(printrusage)(tcp, tcp->u_arg[1]);
166166
return 0;
167167
}
168168

wait.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ printwaitn(struct tcb *tcp, int n, int bitness)
114114
printrusage32(tcp, tcp->u_arg[3]);
115115
else
116116
#endif
117-
printrusage(tcp, tcp->u_arg[3]);
117+
MPERS_PRINTER_NAME(printrusage)(tcp, tcp->u_arg[3]);
118118
}
119119
else
120120
printaddr(tcp->u_arg[3]);
@@ -156,7 +156,7 @@ SYS_FUNC(waitid)
156156
if (tcp->s_ent->nargs > 4) {
157157
/* usage */
158158
tprints(", ");
159-
printrusage(tcp, tcp->u_arg[4]);
159+
MPERS_PRINTER_NAME(printrusage)(tcp, tcp->u_arg[4]);
160160
}
161161
}
162162
return 0;

0 commit comments

Comments
 (0)