]> granicus.if.org Git - strace/blob - sysinfo.c
Move get_regs error check from trace_syscall_entering to get_scno
[strace] / sysinfo.c
1 #include "defs.h"
2 #include <sys/sysinfo.h>
3
4 int
5 sys_sysinfo(struct tcb *tcp)
6 {
7         struct sysinfo si;
8
9         if (entering(tcp))
10                 return 0;
11
12         if (syserror(tcp) || !verbose(tcp) ||
13             umove(tcp, tcp->u_arg[0], &si) < 0) {
14                 tprintf("%#lx", tcp->u_arg[0]);
15         } else {
16                 tprintf("{uptime=%llu"
17                         ", loads=[%llu, %llu, %llu]"
18                         ", totalram=%llu"
19                         ", freeram=%llu"
20                         ", sharedram=%llu"
21                         ", bufferram=%llu"
22                         ", totalswap=%llu"
23                         ", freeswap=%llu"
24                         ", procs=%u"
25 #ifdef HAVE_STRUCT_SYSINFO_TOTALHIGH
26                         ", totalhigh=%llu"
27 #endif
28 #ifdef HAVE_STRUCT_SYSINFO_FREEHIGH
29                         ", freehigh=%llu"
30 #endif
31 #ifdef HAVE_STRUCT_SYSINFO_MEM_UNIT
32                         ", mem_unit=%u"
33 #endif
34                         "}",
35                         (unsigned long long) si.uptime
36                         , (unsigned long long) si.loads[0]
37                         , (unsigned long long) si.loads[1]
38                         , (unsigned long long) si.loads[2]
39                         , (unsigned long long) si.totalram
40                         , (unsigned long long) si.freeram
41                         , (unsigned long long) si.sharedram
42                         , (unsigned long long) si.bufferram
43                         , (unsigned long long) si.totalswap
44                         , (unsigned long long) si.freeswap
45                         , (unsigned) si.procs
46 #ifdef HAVE_STRUCT_SYSINFO_TOTALHIGH
47                         , (unsigned long long) si.totalhigh
48 #endif
49 #ifdef HAVE_STRUCT_SYSINFO_FREEHIGH
50                         , (unsigned long long) si.freehigh
51 #endif
52 #ifdef HAVE_STRUCT_SYSINFO_MEM_UNIT
53                         , si.mem_unit
54 #endif
55                         );
56         }
57
58         return 0;
59 }