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 <fcntl.h> 331d08dcf46dd4b2cfe3e27723c05b0aec9955c591John Hughes#if HAVE_SYS_UIO_H 34a6d91ded3f2d5401e09a9c2fa442aabfbfe593a8Denys Vlasenko# include <sys/uio.h> 351d08dcf46dd4b2cfe3e27723c05b0aec9955c591John Hughes#endif 3676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 383138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_read(struct tcb *tcp) 3976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 4076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 413138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 4260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 4376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 4476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 4576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 4676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 4776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_rval); 4876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[2]); 4976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 5076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 5176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 5276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 5376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 543138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_write(struct tcb *tcp) 5576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 5676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 573138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 5860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 5976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 6076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[2]); 6176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 6276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 6376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 6476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 651d08dcf46dd4b2cfe3e27723c05b0aec9955c591John Hughes#if HAVE_SYS_UIO_H 66e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko/* 67e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko * data_size limits the cumulative size of printed data. 68e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko * Example: recvmsg returing a short read. 69e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko */ 70bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkermanvoid 71e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenkotprint_iov_upto(struct tcb *tcp, unsigned long len, unsigned long addr, int decode_iov, unsigned long data_size) 72bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman{ 738470374cba7df0e70653d95c4f336a4082c68d82Denys Vlasenko#if SUPPORTED_PERSONALITIES > 1 744ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin union { 754ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin struct { u_int32_t base; u_int32_t len; } iov32; 764ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin struct { u_int64_t base; u_int64_t len; } iov64; 774ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin } iov; 784ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#define sizeof_iov \ 799fd4f96d2a2527ac7ca90c156bfc11ce10118684Denys Vlasenko (current_wordsize == 4 ? sizeof(iov.iov32) : sizeof(iov.iov64)) 804ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#define iov_iov_base \ 819fd4f96d2a2527ac7ca90c156bfc11ce10118684Denys Vlasenko (current_wordsize == 4 ? (uint64_t) iov.iov32.base : iov.iov64.base) 824ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#define iov_iov_len \ 839fd4f96d2a2527ac7ca90c156bfc11ce10118684Denys Vlasenko (current_wordsize == 4 ? (uint64_t) iov.iov32.len : iov.iov64.len) 844ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#else 85aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath struct iovec iov; 864ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#define sizeof_iov sizeof(iov) 874ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#define iov_iov_base iov.iov_base 884ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#define iov_iov_len iov.iov_len 894ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#endif 90aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath unsigned long size, cur, end, abbrev_end; 91aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath int failed = 0; 92bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman 93bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman if (!len) { 9460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("[]"); 95bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman return; 96bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } 974ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin size = len * sizeof_iov; 98aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath end = addr + size; 994ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin if (!verbose(tcp) || size / sizeof_iov != len || end < addr) { 100aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath tprintf("%#lx", addr); 101bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman return; 102bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } 103aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath if (abbrev(tcp)) { 1044ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin abbrev_end = addr + max_strlen * sizeof_iov; 105aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath if (abbrev_end < addr) 106aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath abbrev_end = end; 107bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } else { 108aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath abbrev_end = end; 109aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath } 11060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("["); 1114ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin for (cur = addr; cur < end; cur += sizeof_iov) { 112aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath if (cur > addr) 11360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 114aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath if (cur >= abbrev_end) { 11560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("..."); 116aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath break; 117aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath } 1184ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin if (umoven(tcp, cur, sizeof_iov, (char *) &iov) < 0) { 11960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("?"); 120aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath failed = 1; 121aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath break; 122bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } 12360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{"); 124e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko if (decode_iov) { 125e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko unsigned long len = iov_iov_len; 126e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko if (len > data_size) 127e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko len = data_size; 128e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko data_size -= len; 129e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko printstr(tcp, (long) iov_iov_base, len); 130e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko } else 1318884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin tprintf("%#lx", (long) iov_iov_base); 1324ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin tprintf(", %lu}", (unsigned long)iov_iov_len); 133bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman } 13460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("]"); 135aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath if (failed) 136aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath tprintf(" %#lx", addr); 1374ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#undef sizeof_iov 1384ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#undef iov_iov_base 1394ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin#undef iov_iov_len 140bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman} 141bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman 142e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenkovoid 143e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenkotprint_iov(struct tcb *tcp, unsigned long len, unsigned long addr, int decode_iov) 144e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko{ 145043b5f81429412cf23d578d1dc2b45107a8352e5Dmitry V. Levin tprint_iov_upto(tcp, len, addr, decode_iov, (unsigned long) -1L); 146e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko} 147e0bc222263cf47a43e1b26d55edb2ffadc8ccbffDenys Vlasenko 14876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 1493138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_readv(struct tcb *tcp) 15076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 15176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 1523138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 15360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 15476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 15576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) { 15676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx, %lu", 15776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->u_arg[1], tcp->u_arg[2]); 15876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 15976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 1608884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1); 16176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[2]); 16276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 16376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 16476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 16576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 16676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 1673138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_writev(struct tcb *tcp) 16876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 16976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 1703138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 17160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 1728884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1); 17376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[2]); 17476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 17576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 17676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 1771d08dcf46dd4b2cfe3e27723c05b0aec9955c591John Hughes#endif 17876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 179c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath/* The SH4 ABI does allow long longs in odd-numbered registers, but 180c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath does not allow them to be split between registers and memory - and 181c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath there are only four argument registers for normal functions. As a 182c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath result pread takes an extra padding argument before the offset. This 183c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath was changed late in the 2.4 series (around 2.4.20). */ 184c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath#if defined(SH) 185c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath#define PREAD_OFFSET_ARG 4 186c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath#else 187c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath#define PREAD_OFFSET_ARG 3 188c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath#endif 189c0f8bbda62139da801bb761d8c66724e12638087Roland McGrath 19076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 1913138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_pread(struct tcb *tcp) 19276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 19376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 1943138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 19560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 19676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 19776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 19876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 19976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 20076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_rval); 201b5600fc3df0453ba11f254a9b49add3ffbec9733Andreas Schwab tprintf(", %lu, ", tcp->u_arg[2]); 2027845a42b39e59e904d01e75e21f7bc7eb6462560Dmitry V. Levin printllval_aligned(tcp, "%llu", PREAD_OFFSET_ARG); 20376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 20476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 20576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 20676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 20776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 2083138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_pwrite(struct tcb *tcp) 20976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 21076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 2113138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 21260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 21376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 214b5600fc3df0453ba11f254a9b49add3ffbec9733Andreas Schwab tprintf(", %lu, ", tcp->u_arg[2]); 2157845a42b39e59e904d01e75e21f7bc7eb6462560Dmitry V. Levin printllval_aligned(tcp, "%llu", PREAD_OFFSET_ARG); 2162e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman } 2172e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman return 0; 2182e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman} 2192e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman 2203087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov#if HAVE_SYS_UIO_H 2213087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinovint 2223087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinovsys_preadv(struct tcb *tcp) 2233087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov{ 2243087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov if (entering(tcp)) { 2253087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov printfd(tcp, tcp->u_arg[0]); 22660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 2273087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov } else { 2283087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov if (syserror(tcp)) { 2293087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]); 2303087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov return 0; 2313087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov } 2328884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1); 2333087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov tprintf(", %lu, ", tcp->u_arg[2]); 2347845a42b39e59e904d01e75e21f7bc7eb6462560Dmitry V. Levin printllval_unaligned(tcp, "%llu", 3); 2353087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov } 2363087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov return 0; 2373087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov} 2383087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov 2393087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinovint 2403087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinovsys_pwritev(struct tcb *tcp) 2413087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov{ 2423087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov if (entering(tcp)) { 2433087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov printfd(tcp, tcp->u_arg[0]); 24460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 2458884968a46f5413345de7b0085388a367eb9caaeDmitry V. Levin tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1); 2463087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov tprintf(", %lu, ", tcp->u_arg[2]); 2477845a42b39e59e904d01e75e21f7bc7eb6462560Dmitry V. Levin printllval_unaligned(tcp, "%llu", 3); 2483087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov } 2493087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov return 0; 2503087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov} 2513087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov#endif /* HAVE_SYS_UIO_H */ 2523087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov 2532c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levinstatic void 2542c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levinprint_off_t(struct tcb *tcp, long addr) 2552c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin{ 2562c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin unsigned long offset; 2572c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin 2582c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin if (!addr) { 2592c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin tprints("NULL"); 2602c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin return; 2612c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin } 2622c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin 2632c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 2642c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin if (current_wordsize == 4) { 2652c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin uint32_t off; 2662c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin 2672c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin if (umove(tcp, addr, &off) < 0) 2682c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin tprintf("%#lx", addr); 2692c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin else 2702c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin tprintf("[%u]", off); 2712c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin } else 2722c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin#endif 2732c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin if (umove(tcp, addr, &offset) < 0) 2742c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin tprintf("%#lx", addr); 2752c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin else 2762c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin tprintf("[%lu]", offset); 2772c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin} 2782c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin 2792e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkermanint 2803138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_sendfile(struct tcb *tcp) 2812e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman{ 2822e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman if (entering(tcp)) { 2833138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 28460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 2853138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[1]); 28660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 2872c42f32518e43b1e5ccb00c19010a799be6858d4Dmitry V. Levin print_off_t(tcp, tcp->u_arg[2]); 2882e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf(", %lu", tcp->u_arg[3]); 28976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 29076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 29176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 29276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 2930cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysingervoid 294d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levinprint_loff_t(struct tcb *tcp, long addr) 295d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin{ 296d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin loff_t offset; 297d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin 298d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin if (!addr) 299d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin tprints("NULL"); 300d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin else if (umove(tcp, addr, &offset) < 0) 301d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin tprintf("%#lx", addr); 302d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin else 303d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin tprintf("[%llu]", (unsigned long long int) offset); 304d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin} 305d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin 306186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrathint 3073138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_sendfile64(struct tcb *tcp) 308186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath{ 309186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath if (entering(tcp)) { 3103138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 31160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3123138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[1]); 31360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 314d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin print_loff_t(tcp, tcp->u_arg[2]); 315186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath tprintf(", %lu", tcp->u_arg[3]); 316186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath } 317186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath return 0; 318186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath} 319186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath 3200ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/splice_flags.h" 321d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin 322d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levinint 323d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levinsys_tee(struct tcb *tcp) 324d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin{ 325d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin if (entering(tcp)) { 326d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin /* int fd_in */ 327d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin printfd(tcp, tcp->u_arg[0]); 328d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin tprints(", "); 329d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin /* int fd_out */ 330d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin printfd(tcp, tcp->u_arg[1]); 331d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin tprints(", "); 332d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin /* size_t len */ 333d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin tprintf("%lu, ", tcp->u_arg[2]); 334d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin /* unsigned int flags */ 335d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin printflags(splice_flags, tcp->u_arg[3], "SPLICE_F_???"); 336d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin } 337d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin return 0; 338d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin} 339d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin 340d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levinint 341d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levinsys_splice(struct tcb *tcp) 342d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin{ 343d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin if (entering(tcp)) { 344d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin /* int fd_in */ 345d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin printfd(tcp, tcp->u_arg[0]); 346d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin tprints(", "); 347d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin /* loff_t *off_in */ 348d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin print_loff_t(tcp, tcp->u_arg[1]); 349d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin tprints(", "); 350d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin /* int fd_out */ 351d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin printfd(tcp, tcp->u_arg[2]); 352d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin tprints(", "); 353d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin /* loff_t *off_out */ 354d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin print_loff_t(tcp, tcp->u_arg[3]); 355d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin tprints(", "); 356d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin /* size_t len */ 357d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin tprintf("%lu, ", tcp->u_arg[4]); 358d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin /* unsigned int flags */ 359d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin printflags(splice_flags, tcp->u_arg[5], "SPLICE_F_???"); 360d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin } 361d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin return 0; 362d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin} 363d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin 364d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levinint 365d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levinsys_vmsplice(struct tcb *tcp) 366d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin{ 367d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin if (entering(tcp)) { 368d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin /* int fd */ 369d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin printfd(tcp, tcp->u_arg[0]); 370d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin tprints(", "); 371d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin /* const struct iovec *iov, unsigned long nr_segs */ 372d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1); 3730bfd74436d3945e915d373364bbed1f08d3d3c38Dmitry V. Levin tprintf(", %lu, ", tcp->u_arg[2]); 374d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin /* unsigned int flags */ 375d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin printflags(splice_flags, tcp->u_arg[3], "SPLICE_F_???"); 376d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin } 377d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin return 0; 378d99e48c0f33f5230a743cd91a986edba176db2f8Dmitry V. Levin} 37976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 38076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 3813138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levinsys_ioctl(struct tcb *tcp) 38276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 383a9fe13c9437707fa132fde4e51a20d88381e7430Denys Vlasenko const struct_ioctlent *iop; 38476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 38576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 3863138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 38760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3882843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath iop = ioctl_lookup(tcp->u_arg[1]); 3892843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath if (iop) { 3905940e6593911dcace424c668a1c0934c71fccb9eDenys Vlasenko tprints(iop->symbol); 3912843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath while ((iop = ioctl_next_match(iop))) 3922843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath tprintf(" or %s", iop->symbol); 3932843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath } else 39476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 39576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman ioctl_decode(tcp, tcp->u_arg[1], tcp->u_arg[2]); 39676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 39776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 3985d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko int ret = ioctl_decode(tcp, tcp->u_arg[1], tcp->u_arg[2]); 3995d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko if (!ret) 40076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %#lx", tcp->u_arg[2]); 40138ae88d332acd9f86a30d58158e306d795d98977John Hughes else 40238ae88d332acd9f86a30d58158e306d795d98977John Hughes return ret - 1; 40376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 40476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 40576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 406