2 * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
3 * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
4 * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
5 * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
6 * Copyright (c) 1999-2018 The strace developers.
9 * SPDX-License-Identifier: LGPL-2.1-or-later
13 #include <sys/resource.h>
15 #include DEF_MPERS_TYPE(rusage_t)
17 typedef struct rusage rusage_t;
21 MPERS_PRINTER_DECL(void, printrusage,
22 struct tcb *const tcp, const kernel_ulong_t addr)
26 if (umove_or_printaddr(tcp, addr, &ru))
29 tprints("{ru_utime=");
30 MPERS_FUNC_NAME(print_struct_timeval)(&ru.ru_utime);
31 tprints(", ru_stime=");
32 MPERS_FUNC_NAME(print_struct_timeval)(&ru.ru_stime);
36 #define PRINT_RUSAGE_MEMBER(member) \
37 tprintf(", " #member "=%llu", zero_extend_signed_to_ull(ru.member))
38 PRINT_RUSAGE_MEMBER(ru_maxrss);
39 PRINT_RUSAGE_MEMBER(ru_ixrss);
40 PRINT_RUSAGE_MEMBER(ru_idrss);
41 PRINT_RUSAGE_MEMBER(ru_isrss);
42 PRINT_RUSAGE_MEMBER(ru_minflt);
43 PRINT_RUSAGE_MEMBER(ru_majflt);
44 PRINT_RUSAGE_MEMBER(ru_nswap);
45 PRINT_RUSAGE_MEMBER(ru_inblock);
46 PRINT_RUSAGE_MEMBER(ru_oublock);
47 PRINT_RUSAGE_MEMBER(ru_msgsnd);
48 PRINT_RUSAGE_MEMBER(ru_msgrcv);
49 PRINT_RUSAGE_MEMBER(ru_nsignals);
50 PRINT_RUSAGE_MEMBER(ru_nvcsw);
51 PRINT_RUSAGE_MEMBER(ru_nivcsw);
52 #undef PRINT_RUSAGE_MEMBER
59 printrusage32(struct tcb *const tcp, const kernel_ulong_t addr)
62 timeval32_t ru_utime; /* user time used */
63 timeval32_t ru_stime; /* system time used */
64 long ru_maxrss; /* maximum resident set size */
65 long ru_ixrss; /* integral shared memory size */
66 long ru_idrss; /* integral unshared data size */
67 long ru_isrss; /* integral unshared stack size */
68 long ru_minflt; /* page reclaims */
69 long ru_majflt; /* page faults */
70 long ru_nswap; /* swaps */
71 long ru_inblock; /* block input operations */
72 long ru_oublock; /* block output operations */
73 long ru_msgsnd; /* messages sent */
74 long ru_msgrcv; /* messages received */
75 long ru_nsignals; /* signals received */
76 long ru_nvcsw; /* voluntary context switches */
77 long ru_nivcsw; /* involuntary " */
80 if (umove_or_printaddr(tcp, addr, &ru))
83 tprints("{ru_utime=");
84 print_timeval32_t(&ru.ru_utime);
85 tprints(", ru_stime=");
86 print_timeval32_t(&ru.ru_stime);
90 # define PRINT_RUSAGE_MEMBER(member) \
91 tprintf(", " #member "=%lu", ru.member)
92 PRINT_RUSAGE_MEMBER(ru_maxrss);
93 PRINT_RUSAGE_MEMBER(ru_ixrss);
94 PRINT_RUSAGE_MEMBER(ru_idrss);
95 PRINT_RUSAGE_MEMBER(ru_isrss);
96 PRINT_RUSAGE_MEMBER(ru_minflt);
97 PRINT_RUSAGE_MEMBER(ru_majflt);
98 PRINT_RUSAGE_MEMBER(ru_nswap);
99 PRINT_RUSAGE_MEMBER(ru_inblock);
100 PRINT_RUSAGE_MEMBER(ru_oublock);
101 PRINT_RUSAGE_MEMBER(ru_msgsnd);
102 PRINT_RUSAGE_MEMBER(ru_msgrcv);
103 PRINT_RUSAGE_MEMBER(ru_nsignals);
104 PRINT_RUSAGE_MEMBER(ru_nvcsw);
105 PRINT_RUSAGE_MEMBER(ru_nivcsw);
106 # undef PRINT_RUSAGE_MEMBER