176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman/* 276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl> 376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl> 476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com> 54dc8a2aec63e4fb5ee2688544c4de323ed5de3efWichert Akkerman * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl> 676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * All rights reserved. 776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Redistribution and use in source and binary forms, with or without 976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * modification, are permitted provided that the following conditions 1076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * are met: 1176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 1. Redistributions of source code must retain the above copyright 1276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * notice, this list of conditions and the following disclaimer. 1376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 2. Redistributions in binary form must reproduce the above copyright 1476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * notice, this list of conditions and the following disclaimer in the 1576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * documentation and/or other materials provided with the distribution. 1676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 3. The name of the author may not be used to endorse or promote products 1776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * derived from this software without specific prior written permission. 1876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 1976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman */ 3076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include "defs.h" 3276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <sys/resource.h> 3376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <sys/times.h> 3476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <linux/kernel.h> 3576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 360ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/resources.h" 3776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 381945ccc3fbd5b56008c4a6b0cdd4611616201675Denys Vlasenkostatic const char * 39b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levinsprint_rlim64(uint64_t lim) 4076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 41b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin static char buf[sizeof(uint64_t)*3 + sizeof("*1024")]; 4276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 43b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin if (lim == UINT64_MAX) 44b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin return "RLIM64_INFINITY"; 451945ccc3fbd5b56008c4a6b0cdd4611616201675Denys Vlasenko 46b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin if (lim > 1024 && lim % 1024 == 0) 47b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin sprintf(buf, "%" PRIu64 "*1024", lim / 1024); 4876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 49b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin sprintf(buf, "%" PRIu64, lim); 5076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return buf; 5176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 5276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 53ee81c8a57177ad6db9e5fae1666a7a996f90f159Andreas Schwabstatic void 54b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levinprint_rlimit64(struct tcb *tcp, unsigned long addr) 55ee81c8a57177ad6db9e5fae1666a7a996f90f159Andreas Schwab{ 56b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin struct rlimit_64 { 57b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin uint64_t rlim_cur; 58b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin uint64_t rlim_max; 59ee81c8a57177ad6db9e5fae1666a7a996f90f159Andreas Schwab } rlim; 60ee81c8a57177ad6db9e5fae1666a7a996f90f159Andreas Schwab 61b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin if (umove(tcp, addr, &rlim) < 0) 62b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin tprintf("%#lx", addr); 63ee81c8a57177ad6db9e5fae1666a7a996f90f159Andreas Schwab else { 64b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin tprintf("{rlim_cur=%s,", sprint_rlim64(rlim.rlim_cur)); 65b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin tprintf(" rlim_max=%s}", sprint_rlim64(rlim.rlim_max)); 66ee81c8a57177ad6db9e5fae1666a7a996f90f159Andreas Schwab } 67ee81c8a57177ad6db9e5fae1666a7a996f90f159Andreas Schwab} 68ee81c8a57177ad6db9e5fae1666a7a996f90f159Andreas Schwab 69b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levinstatic void 70b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levindecode_rlimit64(struct tcb *tcp, unsigned long addr) 71b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin{ 72b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin if (!addr) 73b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin tprints("NULL"); 74b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin else if (!verbose(tcp) || 75b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin (exiting(tcp) && syserror(tcp))) 76b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin tprintf("%#lx", addr); 77b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin else 78b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin print_rlimit64(tcp, addr); 79b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin} 80b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin 813b09ebe724b1ee233ce2314a8b70a4dfdf9d2b07James Hogan#if !defined(current_wordsize) || current_wordsize == 4 82b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin 83b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levinstatic const char * 84b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levinsprint_rlim32(uint32_t lim) 8576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 86b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin static char buf[sizeof(uint32_t)*3 + sizeof("*1024")]; 8776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 88b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin if (lim == UINT32_MAX) 89b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin return "RLIM_INFINITY"; 90b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin 91b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin if (lim > 1024 && lim % 1024 == 0) 92b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin sprintf(buf, "%" PRIu32 "*1024", lim / 1024); 93b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin else 94b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin sprintf(buf, "%" PRIu32, lim); 95b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin return buf; 96b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin} 97b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin 98b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levinstatic void 99b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levinprint_rlimit32(struct tcb *tcp, unsigned long addr) 100b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin{ 101b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin struct rlimit_32 { 102b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin uint32_t rlim_cur; 103b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin uint32_t rlim_max; 104b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin } rlim; 105b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin 106b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin if (umove(tcp, addr, &rlim) < 0) 107b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin tprintf("%#lx", addr); 10876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 109b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin tprintf("{rlim_cur=%s,", sprint_rlim32(rlim.rlim_cur)); 110b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin tprintf(" rlim_max=%s}", sprint_rlim32(rlim.rlim_max)); 11176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 11276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 11376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 114b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levinstatic void 115b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levindecode_rlimit(struct tcb *tcp, unsigned long addr) 11676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 117b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin if (!addr) 118b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin tprints("NULL"); 119e015d2d331c75b912e3dd96532e2c31ae0e06554Denys Vlasenko else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp))) 120b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin tprintf("%#lx", addr); 121b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin else { 1223b09ebe724b1ee233ce2314a8b70a4dfdf9d2b07James Hogan# if defined(X86_64) || defined(X32) 1233b09ebe724b1ee233ce2314a8b70a4dfdf9d2b07James Hogan /* 1243b09ebe724b1ee233ce2314a8b70a4dfdf9d2b07James Hogan * i386 is the only personality on X86_64 and X32 1253b09ebe724b1ee233ce2314a8b70a4dfdf9d2b07James Hogan * with 32-bit rlim_t. 1263b09ebe724b1ee233ce2314a8b70a4dfdf9d2b07James Hogan * When current_personality is X32, current_wordsize 1273b09ebe724b1ee233ce2314a8b70a4dfdf9d2b07James Hogan * equals to 4 but rlim_t is 64-bit. 1283b09ebe724b1ee233ce2314a8b70a4dfdf9d2b07James Hogan */ 1293b09ebe724b1ee233ce2314a8b70a4dfdf9d2b07James Hogan if (current_personality == 1) 130b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin# else 1319fd4f96d2a2527ac7ca90c156bfc11ce10118684Denys Vlasenko if (current_wordsize == 4) 1323b09ebe724b1ee233ce2314a8b70a4dfdf9d2b07James Hogan# endif 133b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin print_rlimit32(tcp, addr); 134b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin else 135b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin print_rlimit64(tcp, addr); 13676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 13776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 13876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 1393b09ebe724b1ee233ce2314a8b70a4dfdf9d2b07James Hogan#else /* defined(current_wordsize) && current_wordsize != 4 */ 140bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes 141b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin# define decode_rlimit decode_rlimit64 1421945ccc3fbd5b56008c4a6b0cdd4611616201675Denys Vlasenko 1433b09ebe724b1ee233ce2314a8b70a4dfdf9d2b07James Hogan#endif 144bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes 145bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughesint 146b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levinsys_getrlimit(struct tcb *tcp) 147bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes{ 148bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes if (entering(tcp)) { 149bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes printxval(resources, tcp->u_arg[0], "RLIMIT_???"); 15060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 151bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes } 152bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes else { 153b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin decode_rlimit(tcp, tcp->u_arg[1]); 154bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes } 155bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes return 0; 156bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes} 157bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes 158bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughesint 159b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levinsys_setrlimit(struct tcb *tcp) 160bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes{ 161bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes if (entering(tcp)) { 162bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes printxval(resources, tcp->u_arg[0], "RLIMIT_???"); 16360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 164b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin decode_rlimit(tcp, tcp->u_arg[1]); 165b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin } 166b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin return 0; 167b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin} 168b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin 169b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levinint 170b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levinsys_prlimit64(struct tcb *tcp) 171b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin{ 172b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin if (entering(tcp)) { 173b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin tprintf("%ld, ", tcp->u_arg[0]); 174b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin printxval(resources, tcp->u_arg[1], "RLIMIT_???"); 175b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin tprints(", "); 176b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin decode_rlimit64(tcp, tcp->u_arg[2]); 177b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin tprints(", "); 178b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin } else { 179b468f2320a8b8e245b481c78b58431ac56505849Dmitry V. Levin decode_rlimit64(tcp, tcp->u_arg[3]); 180bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes } 181bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes return 0; 182bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes} 183bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes 1840ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/usagewho.h" 18576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 186f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef ALPHA 187f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkermanvoid 1881d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenkoprintrusage32(struct tcb *tcp, long addr) 189f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman{ 1901d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko struct timeval32 { 1911d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko unsigned tv_sec; 1921d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko unsigned tv_usec; 1931d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko }; 1941d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko struct rusage32 { 1951d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko struct timeval32 ru_utime; /* user time used */ 1961d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko struct timeval32 ru_stime; /* system time used */ 1971d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_maxrss; /* maximum resident set size */ 1981d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_ixrss; /* integral shared memory size */ 1991d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_idrss; /* integral unshared data size */ 2001d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_isrss; /* integral unshared stack size */ 2011d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_minflt; /* page reclaims */ 2021d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_majflt; /* page faults */ 2031d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_nswap; /* swaps */ 2041d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_inblock; /* block input operations */ 2051d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_oublock; /* block output operations */ 2061d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_msgsnd; /* messages sent */ 2071d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_msgrcv; /* messages received */ 2081d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_nsignals; /* signals received */ 2091d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_nvcsw; /* voluntary context switches */ 2101d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko long ru_nivcsw; /* involuntary " */ 2111d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } ru; 2121d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko 2131d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko if (!addr) 21460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("NULL"); 2151d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko else if (syserror(tcp) || !verbose(tcp)) 2161d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("%#lx", addr); 2171d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko else if (umove(tcp, addr, &ru) < 0) 21860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 2191d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko else if (!abbrev(tcp)) { 2201d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ", 2211d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko (long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec, 2221d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko (long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec); 2231d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("ru_maxrss=%lu, ru_ixrss=%lu, ", 2241d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko ru.ru_maxrss, ru.ru_ixrss); 2251d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("ru_idrss=%lu, ru_isrss=%lu, ", 2261d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko ru.ru_idrss, ru.ru_isrss); 2271d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("ru_minflt=%lu, ru_majflt=%lu, ru_nswap=%lu, ", 2281d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko ru.ru_minflt, ru.ru_majflt, ru.ru_nswap); 2291d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("ru_inblock=%lu, ru_oublock=%lu, ", 2301d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko ru.ru_inblock, ru.ru_oublock); 2311d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("ru_msgsnd=%lu, ru_msgrcv=%lu, ", 2321d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko ru.ru_msgsnd, ru.ru_msgrcv); 2331d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("ru_nsignals=%lu, ru_nvcsw=%lu, ru_nivcsw=%lu}", 2341d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko ru.ru_nsignals, ru.ru_nvcsw, ru.ru_nivcsw); 2351d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } 2361d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko else { 2371d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ...}", 2381d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko (long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec, 2391d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko (long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec); 2401d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } 241f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman} 242f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 243f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 24476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanvoid 2451d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenkoprintrusage(struct tcb *tcp, long addr) 24676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 24776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman struct rusage ru; 24876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 24976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (!addr) 25060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("NULL"); 25176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else if (syserror(tcp) || !verbose(tcp)) 25276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", addr); 25376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else if (umove(tcp, addr, &ru) < 0) 25460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 25576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else if (!abbrev(tcp)) { 25676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ", 25776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman (long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec, 25876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman (long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec); 25976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("ru_maxrss=%lu, ru_ixrss=%lu, ", 26076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman ru.ru_maxrss, ru.ru_ixrss); 26176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("ru_idrss=%lu, ru_isrss=%lu, ", 26276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman ru.ru_idrss, ru.ru_isrss); 26376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("ru_minflt=%lu, ru_majflt=%lu, ru_nswap=%lu, ", 26476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman ru.ru_minflt, ru.ru_majflt, ru.ru_nswap); 26576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("ru_inblock=%lu, ru_oublock=%lu, ", 26676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman ru.ru_inblock, ru.ru_oublock); 26776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("ru_msgsnd=%lu, ru_msgrcv=%lu, ", 26876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman ru.ru_msgsnd, ru.ru_msgrcv); 26976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("ru_nsignals=%lu, ru_nvcsw=%lu, ru_nivcsw=%lu}", 27076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman ru.ru_nsignals, ru.ru_nvcsw, ru.ru_nivcsw); 27176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 27276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 27376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("{ru_utime={%lu, %lu}, ru_stime={%lu, %lu}, ...}", 27476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman (long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec, 27576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman (long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec); 27676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 27776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 27876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 27976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 2801d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenkosys_getrusage(struct tcb *tcp) 28176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 28276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 28376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(usagewho, tcp->u_arg[0], "RUSAGE_???"); 28460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 28576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 28676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 28776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printrusage(tcp, tcp->u_arg[1]); 28876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 28976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 29076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 291f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef ALPHA 292f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkermanint 2931d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenkosys_osf_getrusage(struct tcb *tcp) 294f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman{ 29559432dbb333959618b5afdb9a7513d1ab0289a14Denys Vlasenko if (entering(tcp)) { 29659432dbb333959618b5afdb9a7513d1ab0289a14Denys Vlasenko printxval(usagewho, tcp->u_arg[0], "RUSAGE_???"); 29760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 29859432dbb333959618b5afdb9a7513d1ab0289a14Denys Vlasenko } 29959432dbb333959618b5afdb9a7513d1ab0289a14Denys Vlasenko else 30059432dbb333959618b5afdb9a7513d1ab0289a14Denys Vlasenko printrusage32(tcp, tcp->u_arg[1]); 30159432dbb333959618b5afdb9a7513d1ab0289a14Denys Vlasenko return 0; 302f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman} 303f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif /* ALPHA */ 304f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 30576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 3061d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenkosys_sysinfo(struct tcb *tcp) 30776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 30876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman struct sysinfo si; 30976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 31076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (exiting(tcp)) { 31176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp) || !verbose(tcp)) 31276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[0]); 31376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else if (umove(tcp, tcp->u_arg[0], &si) < 0) 31460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 31576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 31676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("{uptime=%lu, loads=[%lu, %lu, %lu] ", 3170b315b65432cda20c7e5608c5124289036522fa7H.J. Lu (long) si.uptime, (long) si.loads[0], 3180b315b65432cda20c7e5608c5124289036522fa7H.J. Lu (long) si.loads[1], (long) si.loads[2]); 31976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("totalram=%lu, freeram=%lu, ", 3200b315b65432cda20c7e5608c5124289036522fa7H.J. Lu (long) si.totalram, (long) si.freeram); 32176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("sharedram=%lu, bufferram=%lu} ", 3220b315b65432cda20c7e5608c5124289036522fa7H.J. Lu (long) si.sharedram, (long) si.bufferram); 32361d62cf9481f100f76f1e8a2dfe131f638566633Denys Vlasenko tprintf("totalswap=%lu, freeswap=%lu, procs=%u}", 3240b315b65432cda20c7e5608c5124289036522fa7H.J. Lu (long) si.totalswap, (long) si.freeswap, 32561d62cf9481f100f76f1e8a2dfe131f638566633Denys Vlasenko (unsigned)si.procs); 32676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 32776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 32876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 32976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 33076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3310ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/priorities.h" 33276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 33376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 3341d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenkosys_getpriority(struct tcb *tcp) 33576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 33676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 33776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(priorities, tcp->u_arg[0], "PRIO_???"); 33876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[1]); 33976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 34076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 34176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 34276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 34376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 3441d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenkosys_setpriority(struct tcb *tcp) 34576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 34676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 34776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(priorities, tcp->u_arg[0], "PRIO_???"); 34876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu, %ld", tcp->u_arg[1], tcp->u_arg[2]); 34976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 35076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 35176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 35276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 35376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 3541d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenkosys_times(struct tcb *tcp) 35576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 35676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman struct tms tbuf; 35776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 35876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (exiting(tcp)) { 35976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (tcp->u_arg[0] == 0) 36060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("NULL"); 36176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else if (syserror(tcp)) 36276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[0]); 36376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else if (umove(tcp, tcp->u_arg[0], &tbuf) < 0) 36460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 36576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 3662bb4581ee501f6803df258ebb74c63a18a48422bH.J. Lu tprintf("{tms_utime=%llu, tms_stime=%llu, ", 3672bb4581ee501f6803df258ebb74c63a18a48422bH.J. Lu (unsigned long long) tbuf.tms_utime, 3682bb4581ee501f6803df258ebb74c63a18a48422bH.J. Lu (unsigned long long) tbuf.tms_stime); 3692bb4581ee501f6803df258ebb74c63a18a48422bH.J. Lu tprintf("tms_cutime=%llu, tms_cstime=%llu}", 3702bb4581ee501f6803df258ebb74c63a18a48422bH.J. Lu (unsigned long long) tbuf.tms_cutime, 3712bb4581ee501f6803df258ebb74c63a18a48422bH.J. Lu (unsigned long long) tbuf.tms_cstime); 37276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 37376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 37476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 37576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 376