]> granicus.if.org Git - strace/blob - printrusage.c
maint: update for linux v5.3-rc8
[strace] / printrusage.c
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-2018 The strace developers.
7  * All rights reserved.
8  *
9  * SPDX-License-Identifier: LGPL-2.1-or-later
10  */
11
12 #include "defs.h"
13 #include <sys/resource.h>
14
15 #include DEF_MPERS_TYPE(rusage_t)
16
17 typedef struct rusage rusage_t;
18
19 #include MPERS_DEFS
20
21 MPERS_PRINTER_DECL(void, printrusage,
22                    struct tcb *const tcp, const kernel_ulong_t addr)
23 {
24         rusage_t ru;
25
26         if (umove_or_printaddr(tcp, addr, &ru))
27                 return;
28
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);
33         if (abbrev(tcp))
34                 tprints(", ...");
35         else {
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
53         }
54         tprints("}");
55 }
56
57 #ifdef ALPHA
58 void
59 printrusage32(struct tcb *const tcp, const kernel_ulong_t addr)
60 {
61         struct rusage32 {
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 " */
78         } ru;
79
80         if (umove_or_printaddr(tcp, addr, &ru))
81                 return;
82
83         tprints("{ru_utime=");
84         print_timeval32_t(&ru.ru_utime);
85         tprints(", ru_stime=");
86         print_timeval32_t(&ru.ru_stime);
87         if (abbrev(tcp))
88                 tprints(", ...");
89         else {
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
107         }
108         tprints("}");
109 }
110 #endif