io.c revision 8884968a46f5413345de7b0085388a367eb9caae
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]);
543138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
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]);
703138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
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) {
105bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman		tprintf("[]");
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	}
121aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath	tprintf("[");
1224ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin	for (cur = addr; cur < end; cur += sizeof_iov) {
123aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath		if (cur > addr)
124aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath			tprintf(", ");
125aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath		if (cur >= abbrev_end) {
126aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath			tprintf("...");
127aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath			break;
128aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath		}
1294ebb4e3d312bb8215f4eea9130cce6bb8bdb972fDmitry V. Levin		if (umoven(tcp, cur, sizeof_iov, (char *) &iov) < 0) {
130aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath			tprintf("?");
131aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath			failed = 1;
132aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath			break;
133bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman		}
134aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath		tprintf("{");
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	}
141aa524c88c49814863cb7f19e5c8a8eeca6ce22feRoland McGrath	tprintf("]");
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]);
1543138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
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]);
1723138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
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]);
1873138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
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]);
2093138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
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]);
2323138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
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])
241bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman			tprintf(", 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 {
248bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman				tprintf(", { ");
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])
256bf79f2e16b090ffe59cd1e1820935680a2da7b78Wichert Akkerman			tprintf(", 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]);
2853138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
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]);
3023138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
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]);
3163087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov		tprintf(", ");
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]);
3343087dd678088754dddc0c801008e22ca2b7b9a37Damir Shayhutdinov		tprintf(", ");
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]);
3503138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
3513138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		printfd(tcp, tcp->u_arg[1]);
3523138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
3532e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman		if (!tcp->u_arg[2])
3542e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman			tprintf("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]);
3713138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
3723138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		printfd(tcp, tcp->u_arg[1]);
3733138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
374186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath		if (!tcp->u_arg[2])
375186c5acdb9af627e0844cf82ed68d0da6dbe13deRoland McGrath			tprintf("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]);
3933138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
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]);
4103138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
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]);
4263138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		tprintf(", ");
4272843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath		iop = ioctl_lookup(tcp->u_arg[1]);
4282843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath		if (iop) {
4292843a4e1d2fca851be6e47e7ff2413b45903ac9aRoland McGrath			tprintf("%s", 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 {
43738ae88d332acd9f86a30d58158e306d795d98977John Hughes		int ret;
43838ae88d332acd9f86a30d58158e306d795d98977John Hughes		if (!(ret = ioctl_decode(tcp, tcp->u_arg[1], tcp->u_arg[2])))
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