strace/sysinfo.c
Dmitry V. Levin 82a528d96f Enhance sysinfo decoding
* configure.ac (AC_CHECK_MEMBERS): Check for struct sysinfo.totalhigh,
struct sysinfo.freehigh, and struct sysinfo.mem_unit.
* sysinfo.c (sys_sysinfo): Treat failed umove() call as syserror().
Print totalhigh, freehigh, and mem_unit members when struct sysinfo
supports them.
2014-09-29 23:29:56 +00:00

58 lines
1.0 KiB
C

#include "defs.h"
#include <sys/sysinfo.h>
int
sys_sysinfo(struct tcb *tcp)
{
struct sysinfo si;
if (entering(tcp))
return 0;
if (syserror(tcp) || !verbose(tcp) ||
umove(tcp, tcp->u_arg[0], &si) < 0) {
tprintf("%#lx", tcp->u_arg[0]);
} else {
tprintf("{uptime=%lu"
", loads=[%lu, %lu, %lu]"
", totalram=%lu"
", freeram=%lu"
", sharedram=%lu"
", bufferram=%lu"
", totalswap=%lu"
", freeswap=%lu"
", procs=%u"
#ifdef HAVE_STRUCT_SYSINFO_TOTALHIGH
", totalhigh=%lu"
#endif
#ifdef HAVE_STRUCT_SYSINFO_FREEHIGH
", freehigh=%lu"
#endif
#ifdef HAVE_STRUCT_SYSINFO_MEM_UNIT
", mem_unit=%u"
#endif
"}",
si.uptime
, si.loads[0], si.loads[1], si.loads[2]
, si.totalram
, si.freeram
, si.sharedram
, si.bufferram
, si.totalswap
, si.freeswap
, (unsigned) si.procs
#ifdef HAVE_STRUCT_SYSINFO_TOTALHIGH
, si.totalhigh
#endif
#ifdef HAVE_STRUCT_SYSINFO_FREEHIGH
, si.freehigh
#endif
#ifdef HAVE_STRUCT_SYSINFO_MEM_UNIT
, si.mem_unit
#endif
);
}
return 0;
}