io.c revision 60fe8c139c6f2febefe595781812ddf0864a6ab8
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 * $Id$ 3176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman */ 3276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include "defs.h" 3476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <fcntl.h> 361d08dcf46dd4b2cfe3e27723c05b0aec9955c591John Hughes#if HAVE_SYS_UIO_H 3776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <sys/uio.h> 381d08dcf46dd4b2cfe3e27723c05b0aec9955c591John Hughes#endif 3976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 4070623be853b5524d87d980ac3d611b11890800eaJohn Hughes#ifdef HAVE_LONG_LONG_OFF_T 4170623be853b5524d87d980ac3d611b11890800eaJohn Hughes/* 4270623be853b5524d87d980ac3d611b11890800eaJohn Hughes * Hacks for systems that have a long long off_t 4370623be853b5524d87d980ac3d611b11890800eaJohn Hughes */ 4470623be853b5524d87d980ac3d611b11890800eaJohn Hughes 4570623be853b5524d87d980ac3d611b11890800eaJohn Hughes#define sys_pread64 sys_pread 4670623be853b5524d87d980ac3d611b11890800eaJohn Hughes#define sys_pwrite64 sys_pwrite 4770623be853b5524d87d980ac3d611b11890800eaJohn Hughes#endif 4870623be853b5524d87d980ac3d611b11890800eaJohn Hughes 4976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 503138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_read(struct tcb *tcp) 5176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 5276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 533138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 5460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 5576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 5676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 5776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 5876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 5976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_rval); 6076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[2]); 6176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 6276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 6376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 6476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 6576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 663138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_write(struct tcb *tcp) 6776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 6876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 693138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 7060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 7176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 7276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[2]); 7376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 7476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 7576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 7676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 771d08dcf46dd4b2cfe3e27723c05b0aec9955c591John Hughes#if HAVE_SYS_UIO_H 78bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkermanvoid 798884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levintprint_iov(struct tcb *tcp, unsigned long len, unsigned long addr, int decode_iov) 80bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman{ 814ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#if defined(LINUX) && SUPPORTED_PERSONALITIES > 1 824ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin union { 834ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin struct { u_int32_t base; u_int32_t len; } iov32; 844ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin struct { u_int64_t base; u_int64_t len; } iov64; 854ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin } iov; 864ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#define sizeof_iov \ 874ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin (personality_wordsize[current_personality] == 4 \ 884ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin ? sizeof(iov.iov32) : sizeof(iov.iov64)) 894ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#define iov_iov_base \ 904ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin (personality_wordsize[current_personality] == 4 \ 914ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin ? (u_int64_t) iov.iov32.base : iov.iov64.base) 924ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#define iov_iov_len \ 934ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin (personality_wordsize[current_personality] == 4 \ 944ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin ? (u_int64_t) iov.iov32.len : iov.iov64.len) 954ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#else 96aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath struct iovec iov; 974ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#define sizeof_iov sizeof(iov) 984ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#define iov_iov_base iov.iov_base 994ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#define iov_iov_len iov.iov_len 1004ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#endif 101aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath unsigned long size, cur, end, abbrev_end; 102aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath int failed = 0; 103bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman 104bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman if (!len) { 10560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("[]"); 106bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman return; 107bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } 1084ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin size = len * sizeof_iov; 109aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath end = addr + size; 1104ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin if (!verbose(tcp) || size / sizeof_iov != len || end < addr) { 111aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath tprintf("%#lx", addr); 112bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman return; 113bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } 114aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath if (abbrev(tcp)) { 1154ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin abbrev_end = addr + max_strlen * sizeof_iov; 116aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath if (abbrev_end < addr) 117aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath abbrev_end = end; 118bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } else { 119aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath abbrev_end = end; 120aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath } 12160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("["); 1224ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin for (cur = addr; cur < end; cur += sizeof_iov) { 123aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath if (cur > addr) 12460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 125aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath if (cur >= abbrev_end) { 12660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("..."); 127aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath break; 128aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath } 1294ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin if (umoven(tcp, cur, sizeof_iov, (char *) &iov) < 0) { 13060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("?"); 131aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath failed = 1; 132aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath break; 133bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } 13460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{"); 1358884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin if (decode_iov) 1368884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin printstr(tcp, (long) iov_iov_base, iov_iov_len); 1378884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin else 1388884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin tprintf("%#lx", (long) iov_iov_base); 1394ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin tprintf(", %lu}", (unsigned long)iov_iov_len); 140bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } 14160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("]"); 142aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath if (failed) 143aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath tprintf(" %#lx", addr); 1444ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#undef sizeof_iov 1454ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#undef iov_iov_base 1464ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#undef iov_iov_len 147bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman} 148bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman 14976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 1503138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_readv(struct tcb *tcp) 15176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 15276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 1533138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 15460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 15576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 15676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) { 15776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx, %lu", 15876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->u_arg[1], tcp->u_arg[2]); 15976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 16076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 1618884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1); 16276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[2]); 16376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 16476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 16576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 16676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 16776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 1683138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_writev(struct tcb *tcp) 16976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 17076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 1713138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 17260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 1738884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1); 17476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[2]); 17576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 17676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 17776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 1781d08dcf46dd4b2cfe3e27723c05b0aec9955c591John Hughes#endif 17976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 1805a826b8427383232940249ca16f543178fbeeba4John Hughes#if defined(SVR4) 18176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 18276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 1833138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_pread(struct tcb *tcp) 18476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 18576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 1863138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 18760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 18876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 18976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 19076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 19176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 19276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_rval); 1939ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#if UNIXWARE 1949ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman /* off_t is signed int */ 1959ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman tprintf(", %lu, %ld", tcp->u_arg[2], tcp->u_arg[3]); 1969ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#else 19776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu, %llu", tcp->u_arg[2], 1982fe2a3e124c10a958f8738d03df7c01cc283e531Roland McGrath LONG_LONG(tcp->u_arg[3], tcp->u_arg[4])); 1999ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#endif 20076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 20176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 20276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 20376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 20476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 2053138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_pwrite(struct tcb *tcp) 20676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 20776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 2083138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 20960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 21076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 2119ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#if UNIXWARE 2129ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman /* off_t is signed int */ 2139ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman tprintf(", %lu, %ld", tcp->u_arg[2], tcp->u_arg[3]); 2149ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#else 21576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu, %llu", tcp->u_arg[2], 2162fe2a3e124c10a958f8738d03df7c01cc283e531Roland McGrath LONG_LONG(tcp->u_arg[3], tcp->u_arg[4])); 217bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman#endif 218bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } 219bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman return 0; 220bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman} 2215a826b8427383232940249ca16f543178fbeeba4John Hughes#endif /* SVR4 */ 222bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman 223bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman#ifdef FREEBSD 224bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman#include <sys/types.h> 225bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman#include <sys/socket.h> 226bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman 227bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkermanint 2283138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_sendfile(struct tcb *tcp) 229bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman{ 230bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman if (entering(tcp)) { 2313138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 23260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 2333138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[1]); 2343138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin tprintf(", %llu, %lu", 2352fe2a3e124c10a958f8738d03df7c01cc283e531Roland McGrath LONG_LONG(tcp->u_arg[2], tcp->u_arg[3]), 2362fe2a3e124c10a958f8738d03df7c01cc283e531Roland McGrath tcp->u_arg[4]); 237bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } else { 238bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman off_t offset; 239bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman 240bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman if (!tcp->u_arg[5]) 24160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", NULL"); 242bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman else { 243bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman struct sf_hdtr hdtr; 244bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman 245bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman if (umove(tcp, tcp->u_arg[5], &hdtr) < 0) 246bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman tprintf(", %#lx", tcp->u_arg[5]); 247bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman else { 24860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", { "); 2498884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin tprint_iov(tcp, hdtr.hdr_cnt, hdtr.headers, 1); 250bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman tprintf(", %u, ", hdtr.hdr_cnt); 2518884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin tprint_iov(tcp, hdtr.trl_cnt, hdtr.trailers, 1); 252bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman tprintf(", %u }", hdtr.hdr_cnt); 253bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } 254bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } 255bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman if (!tcp->u_arg[6]) 25660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", NULL"); 257bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman else if (umove(tcp, tcp->u_arg[6], &offset) < 0) 258bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman tprintf(", %#lx", tcp->u_arg[6]); 259bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman else 260bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman tprintf(", [%llu]", offset); 261bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman tprintf(", %lu", tcp->u_arg[7]); 26276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 26376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 26476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 265bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman#endif /* FREEBSD */ 26676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 26776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef LINUX 268c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath 269c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath/* The SH4 ABI does allow long longs in odd-numbered registers, but 270c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath does not allow them to be split between registers and memory - and 271c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath there are only four argument registers for normal functions. As a 272c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath result pread takes an extra padding argument before the offset. This 273c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath was changed late in the 2.4 series (around 2.4.20). */ 274c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath#if defined(SH) 275c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath#define PREAD_OFFSET_ARG 4 276c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath#else 277c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath#define PREAD_OFFSET_ARG 3 278c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath#endif 279c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath 28076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 2813138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_pread(struct tcb *tcp) 28276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 28376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 2843138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 28560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 28676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 28776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 28876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 28976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 29076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_rval); 291b5600fc3df0453ba11f254a9b49add3ffbec9733Andreas Schwab tprintf(", %lu, ", tcp->u_arg[2]); 292b5600fc3df0453ba11f254a9b49add3ffbec9733Andreas Schwab printllval(tcp, "%llu", PREAD_OFFSET_ARG); 29376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 29476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 29576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 29676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 29776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 2983138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_pwrite(struct tcb *tcp) 29976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 30076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 3013138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 30260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 30376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 304b5600fc3df0453ba11f254a9b49add3ffbec9733Andreas Schwab tprintf(", %lu, ", tcp->u_arg[2]); 305b5600fc3df0453ba11f254a9b49add3ffbec9733Andreas Schwab printllval(tcp, "%llu", PREAD_OFFSET_ARG); 3062e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman } 3072e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman return 0; 3082e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman} 3092e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman 3103087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov#if HAVE_SYS_UIO_H 3113087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinovint 3123087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinovsys_preadv(struct tcb *tcp) 3133087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov{ 3143087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov if (entering(tcp)) { 3153087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov printfd(tcp, tcp->u_arg[0]); 31660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3173087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov } else { 3183087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov if (syserror(tcp)) { 3193087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]); 3203087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov return 0; 3213087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov } 3228884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1); 3233087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov tprintf(", %lu, ", tcp->u_arg[2]); 3243087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov printllval(tcp, "%llu", PREAD_OFFSET_ARG); 3253087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov } 3263087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov return 0; 3273087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov} 3283087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov 3293087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinovint 3303087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinovsys_pwritev(struct tcb *tcp) 3313087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov{ 3323087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov if (entering(tcp)) { 3333087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov printfd(tcp, tcp->u_arg[0]); 33460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3358884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1); 3363087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov tprintf(", %lu, ", tcp->u_arg[2]); 3373087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov printllval(tcp, "%llu", PREAD_OFFSET_ARG); 3383087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov } 3393087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov return 0; 3403087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov} 3413087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov#endif /* HAVE_SYS_UIO_H */ 3423087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov 3432e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkermanint 3443138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_sendfile(struct tcb *tcp) 3452e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman{ 3462e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman if (entering(tcp)) { 3472e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman off_t offset; 3482e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman 3493138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 35060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3513138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[1]); 35260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3532e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman if (!tcp->u_arg[2]) 35460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("NULL"); 3552e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman else if (umove(tcp, tcp->u_arg[2], &offset) < 0) 3562e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf("%#lx", tcp->u_arg[2]); 3572e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman else 3582e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf("[%lu]", offset); 3592e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf(", %lu", tcp->u_arg[3]); 36076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 36176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 36276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 36376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 364186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrathint 3653138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_sendfile64(struct tcb *tcp) 366186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath{ 367186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath if (entering(tcp)) { 368186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath loff_t offset; 369186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath 3703138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 37160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3723138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[1]); 37360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 374186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath if (!tcp->u_arg[2]) 37560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("NULL"); 376186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath else if (umove(tcp, tcp->u_arg[2], &offset) < 0) 377186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath tprintf("%#lx", tcp->u_arg[2]); 378186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath else 379186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath tprintf("[%llu]", (unsigned long long int) offset); 380186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath tprintf(", %lu", tcp->u_arg[3]); 381186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath } 382186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath return 0; 383186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath} 384186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath 38576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* LINUX */ 38676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 38770623be853b5524d87d980ac3d611b11890800eaJohn Hughes#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T 388bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughesint 3893138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_pread64(struct tcb *tcp) 390bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes{ 391bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes if (entering(tcp)) { 3923138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 39360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 394bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes } else { 395bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes if (syserror(tcp)) 396bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes tprintf("%#lx", tcp->u_arg[1]); 397bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes else 398bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes printstr(tcp, tcp->u_arg[1], tcp->u_rval); 399b5600fc3df0453ba11f254a9b49add3ffbec9733Andreas Schwab tprintf(", %lu, ", tcp->u_arg[2]); 400b5600fc3df0453ba11f254a9b49add3ffbec9733Andreas Schwab printllval(tcp, "%#llx", 3); 401bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes } 402bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes return 0; 403bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes} 404bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes 405bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughesint 4063138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_pwrite64(struct tcb *tcp) 407bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes{ 408bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes if (entering(tcp)) { 4093138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 41060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 411bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 412b5600fc3df0453ba11f254a9b49add3ffbec9733Andreas Schwab tprintf(", %lu, ", tcp->u_arg[2]); 413b5600fc3df0453ba11f254a9b49add3ffbec9733Andreas Schwab printllval(tcp, "%#llx", 3); 414bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes } 415bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes return 0; 416bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes} 417bdf48f55f264a9cd2eb1b3cac8f1f87c1acad008John Hughes#endif 418186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath 41976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 4203138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_ioctl(struct tcb *tcp) 42176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 422ee36ce19e03e08f4b692570090ee58b72d2f0f50Roland McGrath const struct ioctlent *iop; 42376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 42476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 4253138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 42660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 4272843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath iop = ioctl_lookup(tcp->u_arg[1]); 4282843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath if (iop) { 4295940e6593911dcace424c668a1c0934c71fccb9eDenys Vlasenko tprints(iop->symbol); 4302843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath while ((iop = ioctl_next_match(iop))) 4312843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath tprintf(" or %s", iop->symbol); 4322843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath } else 43376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 43476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman ioctl_decode(tcp, tcp->u_arg[1], tcp->u_arg[2]); 43576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 43676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 4375d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko int ret = ioctl_decode(tcp, tcp->u_arg[1], tcp->u_arg[2]); 4385d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko if (!ret) 43976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %#lx", tcp->u_arg[2]); 44038ae88d332acd9f86a30d58158e306d795d98977John Hughes else 44138ae88d332acd9f86a30d58158e306d795d98977John Hughes return ret - 1; 44276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 44376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 44476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 445