1 /*
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-2021 The strace developers.
7 * All rights reserved.
8 *
9 * SPDX-License-Identifier: LGPL-2.1-or-later
10 */
11
12 #include "defs.h"
13
14 #include DEF_MPERS_TYPE(kernel_rusage_t)
15
16 #include "kernel_rusage.h"
17
18 #include MPERS_DEFS
19
20 #include <sys/resource.h>
21
22 MPERS_PRINTER_DECL(void, printrusage,
23 struct tcb *const tcp, const kernel_ulong_t addr)
24 {
25 kernel_rusage_t ru;
26
27 if (umove_or_printaddr(tcp, addr, &ru))
28 return;
29
30 tprint_struct_begin();
31 PRINT_FIELD_OBJ_PTR(ru, ru_utime,
32 MPERS_FUNC_NAME(print_struct_timeval));
33 tprint_struct_next();
34 PRINT_FIELD_OBJ_PTR(ru, ru_stime,
35 MPERS_FUNC_NAME(print_struct_timeval));
36 if (abbrev(tcp)) {
37 tprint_struct_next();
38 tprint_more_data_follows();
39 } else {
40 tprint_struct_next();
41 PRINT_FIELD_U(ru, ru_maxrss);
42 tprint_struct_next();
43 PRINT_FIELD_U(ru, ru_ixrss);
44 tprint_struct_next();
45 PRINT_FIELD_U(ru, ru_idrss);
46 tprint_struct_next();
47 PRINT_FIELD_U(ru, ru_isrss);
48 tprint_struct_next();
49 PRINT_FIELD_U(ru, ru_minflt);
50 tprint_struct_next();
51 PRINT_FIELD_U(ru, ru_majflt);
52 tprint_struct_next();
53 PRINT_FIELD_U(ru, ru_nswap);
54 tprint_struct_next();
55 PRINT_FIELD_U(ru, ru_inblock);
56 tprint_struct_next();
57 PRINT_FIELD_U(ru, ru_oublock);
58 tprint_struct_next();
59 PRINT_FIELD_U(ru, ru_msgsnd);
60 tprint_struct_next();
61 PRINT_FIELD_U(ru, ru_msgrcv);
62 tprint_struct_next();
63 PRINT_FIELD_U(ru, ru_nsignals);
64 tprint_struct_next();
65 PRINT_FIELD_U(ru, ru_nvcsw);
66 tprint_struct_next();
67 PRINT_FIELD_U(ru, ru_nivcsw);
68 }
69 tprint_struct_end();
70 }
71
72 #ifdef ALPHA
73 void
74 printrusage32(struct tcb *const tcp, const kernel_ulong_t addr)
75 {
76 struct rusage32 {
77 timeval32_t ru_utime; /* user time used */
78 timeval32_t ru_stime; /* system time used */
79 long ru_maxrss; /* maximum resident set size */
80 long ru_ixrss; /* integral shared memory size */
81 long ru_idrss; /* integral unshared data size */
82 long ru_isrss; /* integral unshared stack size */
83 long ru_minflt; /* page reclaims */
84 long ru_majflt; /* page faults */
85 long ru_nswap; /* swaps */
86 long ru_inblock; /* block input operations */
87 long ru_oublock; /* block output operations */
88 long ru_msgsnd; /* messages sent */
89 long ru_msgrcv; /* messages received */
90 long ru_nsignals; /* signals received */
91 long ru_nvcsw; /* voluntary context switches */
92 long ru_nivcsw; /* involuntary " */
93 } ru;
94
95 if (umove_or_printaddr(tcp, addr, &ru))
96 return;
97
98 tprint_struct_begin();
99 PRINT_FIELD_OBJ_PTR(ru, ru_utime, print_timeval32_t);
100 tprint_struct_next();
101 PRINT_FIELD_OBJ_PTR(ru, ru_stime, print_timeval32_t);
102 if (abbrev(tcp)) {
103 tprint_struct_next();
104 tprint_more_data_follows();
105 } else {
106 tprint_struct_next();
107 PRINT_FIELD_U(ru, ru_maxrss);
108 tprint_struct_next();
109 PRINT_FIELD_U(ru, ru_ixrss);
110 tprint_struct_next();
111 PRINT_FIELD_U(ru, ru_idrss);
112 tprint_struct_next();
113 PRINT_FIELD_U(ru, ru_isrss);
114 tprint_struct_next();
115 PRINT_FIELD_U(ru, ru_minflt);
116 tprint_struct_next();
117 PRINT_FIELD_U(ru, ru_majflt);
118 tprint_struct_next();
119 PRINT_FIELD_U(ru, ru_nswap);
120 tprint_struct_next();
121 PRINT_FIELD_U(ru, ru_inblock);
122 tprint_struct_next();
123 PRINT_FIELD_U(ru, ru_oublock);
124 tprint_struct_next();
125 PRINT_FIELD_U(ru, ru_msgsnd);
126 tprint_struct_next();
127 PRINT_FIELD_U(ru, ru_msgrcv);
128 tprint_struct_next();
129 PRINT_FIELD_U(ru, ru_nsignals);
130 tprint_struct_next();
131 PRINT_FIELD_U(ru, ru_nvcsw);
132 tprint_struct_next();
133 PRINT_FIELD_U(ru, ru_nivcsw);
134 }
135 tprint_struct_end();
136 }
137 #endif