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>
576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * All rights reserved.
676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman *
776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Redistribution and use in source and binary forms, with or without
876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * modification, are permitted provided that the following conditions
976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * are met:
1076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 1. Redistributions of source code must retain the above copyright
1176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman *    notice, this list of conditions and the following disclaimer.
1276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 2. Redistributions in binary form must reproduce the above copyright
1376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman *    notice, this list of conditions and the following disclaimer in the
1476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman *    documentation and/or other materials provided with the distribution.
1576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 3. The name of the author may not be used to endorse or promote products
1676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman *    derived from this software without specific prior written permission.
1776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman *
1876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman */
2976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman
3076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include "defs.h"
31f1639d8f51cd609a43f5091f4cc3b31be4c63ec4Mike Frysinger#include <fcntl.h>
320e946ab2c26f3cb6f27cb99ddf0f5581bef16781Dmitry V. Levin#include <signal.h>
33d856b99aff36012d1c8bc72012d0ede414e17971Wichert Akkerman#include <sys/timex.h>
346afc5659acc3df3d2e446ba4aa3a76bdd7264e1bRoland McGrath
35f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levinstatic void
36f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levinprint_timezone(struct tcb *tcp, const long addr)
37f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin{
38f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin	struct timezone tz;
39f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin
40f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin	if (umove_or_printaddr(tcp, addr, &tz))
41f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin		return;
42f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin
43f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin	tprintf("{tz_minuteswest=%d, tz_dsttime=%d}",
44f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin		tz.tz_minuteswest, tz.tz_dsttime);
45f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin}
46f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin
47a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(gettimeofday)
4876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{
4976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman	if (exiting(tcp)) {
50f1e3a320458be22ef7e308f44d0a7b80887da36bDmitry V. Levin		print_timeval(tcp, tcp->u_arg[0]);
5160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
52f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin		print_timezone(tcp, tcp->u_arg[1]);
5376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman	}
5476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman	return 0;
5576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}
5676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman
57f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef ALPHA
58a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(osf_gettimeofday)
59f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman{
601d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko	if (exiting(tcp)) {
61f1e3a320458be22ef7e308f44d0a7b80887da36bDmitry V. Levin		print_timeval32(tcp, tcp->u_arg[0]);
6260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
63f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin		print_timezone(tcp, tcp->u_arg[1]);
641d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko	}
651d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko	return 0;
66f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman}
67f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif
68f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman
69a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(settimeofday)
7076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{
71f1e3a320458be22ef7e308f44d0a7b80887da36bDmitry V. Levin	print_timeval(tcp, tcp->u_arg[0]);
7276c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	tprints(", ");
73f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin	print_timezone(tcp, tcp->u_arg[1]);
7476c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin
7576c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	return RVAL_DECODED;
7676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}
7776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman
78f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef ALPHA
79a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(osf_settimeofday)
80f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman{
81f1e3a320458be22ef7e308f44d0a7b80887da36bDmitry V. Levin	print_timeval32(tcp, tcp->u_arg[0]);
8276c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	tprints(", ");
83f57edf4d37a4b2c8d0e9058e0a6ea940be49302eDmitry V. Levin	print_timezone(tcp, tcp->u_arg[1]);
8476c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin
8576c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	return RVAL_DECODED;
86f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman}
87f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif
88f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman
89a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(nanosleep)
902e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin{
912e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin	if (entering(tcp)) {
922e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin		print_timespec(tcp, tcp->u_arg[0]);
9360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
942e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin	} else {
959af94a2f486064a62cce5439fd417a992e591eaeDmitry V. Levin
969af94a2f486064a62cce5439fd417a992e591eaeDmitry V. Levin		/*
979af94a2f486064a62cce5439fd417a992e591eaeDmitry V. Levin		 * Second (returned) timespec is only significant if syscall
989af94a2f486064a62cce5439fd417a992e591eaeDmitry V. Levin		 * was interrupted.  On success and in case of other errors we
999af94a2f486064a62cce5439fd417a992e591eaeDmitry V. Levin		 * print only its address, since kernel doesn't modify it,
1004793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko		 * and printing the value may show uninitialized data.
10164acaa1193173c965ef32919aa5c092ce912d57cDenys Vlasenko		 */
1029af94a2f486064a62cce5439fd417a992e591eaeDmitry V. Levin		if (is_erestart(tcp)) {
1039af94a2f486064a62cce5439fd417a992e591eaeDmitry V. Levin			temporarily_clear_syserror(tcp);
1042e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin			print_timespec(tcp, tcp->u_arg[1]);
1059af94a2f486064a62cce5439fd417a992e591eaeDmitry V. Levin			restore_cleared_syserror(tcp);
1069af94a2f486064a62cce5439fd417a992e591eaeDmitry V. Levin		} else {
1079af94a2f486064a62cce5439fd417a992e591eaeDmitry V. Levin			printaddr(tcp->u_arg[1]);
1084793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko		}
1092e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin	}
1102e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin	return 0;
1112e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin}
1122e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin
1130ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/itimer_which.h"
11476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman
115a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(getitimer)
11676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{
11776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman	if (entering(tcp)) {
118297b59401c998a2154b2fd1af7b234e2fa3a9305Dmitry V. Levin		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
11960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
12076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman	} else {
121322be803420d5ebc312cf26e1a2c2eb7ac21c0e0Dmitry V. Levin		print_itimerval(tcp, tcp->u_arg[1]);
12276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman	}
12376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman	return 0;
12476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}
12576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman
126f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef ALPHA
127a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(osf_getitimer)
128f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman{
1291d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko	if (entering(tcp)) {
130297b59401c998a2154b2fd1af7b234e2fa3a9305Dmitry V. Levin		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
13160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
1321d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko	} else {
133322be803420d5ebc312cf26e1a2c2eb7ac21c0e0Dmitry V. Levin		print_itimerval32(tcp, tcp->u_arg[1]);
1341d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko	}
1351d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko	return 0;
136f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman}
137f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif
138f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman
139a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(setitimer)
14076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{
14176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman	if (entering(tcp)) {
142297b59401c998a2154b2fd1af7b234e2fa3a9305Dmitry V. Levin		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
14360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
144322be803420d5ebc312cf26e1a2c2eb7ac21c0e0Dmitry V. Levin		print_itimerval(tcp, tcp->u_arg[1]);
14560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
14676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman	} else {
147322be803420d5ebc312cf26e1a2c2eb7ac21c0e0Dmitry V. Levin		print_itimerval(tcp, tcp->u_arg[2]);
14876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman	}
14976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman	return 0;
15076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}
15176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman
152f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef ALPHA
153a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(osf_setitimer)
154f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman{
1551d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko	if (entering(tcp)) {
156297b59401c998a2154b2fd1af7b234e2fa3a9305Dmitry V. Levin		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
15760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
158322be803420d5ebc312cf26e1a2c2eb7ac21c0e0Dmitry V. Levin		print_itimerval32(tcp, tcp->u_arg[1]);
15960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
1601d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko	} else {
161322be803420d5ebc312cf26e1a2c2eb7ac21c0e0Dmitry V. Levin		print_itimerval32(tcp, tcp->u_arg[2]);
1621d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko	}
1631d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko	return 0;
164f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman}
165f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif
166f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman
1670ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/adjtimex_state.h"
1681a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin
16973215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levinstatic int
17073215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levindo_adjtimex(struct tcb *tcp, long addr)
17173215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin{
172dad1eef568375be367868a2e3c4783251dbb7627Dmitry V. Levin	if (print_timex(tcp, addr))
17373215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin		return 0;
17473215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin	tcp->auxstr = xlookup(adjtimex_state, tcp->u_rval);
17573215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin	if (tcp->auxstr)
17673215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin		return RVAL_STR;
17773215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin	return 0;
17873215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin}
17973215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin
180a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(adjtimex)
181165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin{
18273215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin	if (exiting(tcp))
18373215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin		return do_adjtimex(tcp, tcp->u_arg[0]);
18476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman	return 0;
18576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}
1861e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath
1870ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/clockflags.h"
1880ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/clocknames.h"
18954a4edd69a320542ddd0dffec05dacab7443d453Roland McGrath
190a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensenstatic void
191a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensenprintclockname(int clockid)
192a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen{
193a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen#ifdef CLOCKID_TO_FD
194d35bdcad13caac3e167735e1f0fc50355b2f9523Dmitry V. Levin# include "xlat/cpuclocknames.h"
195d35bdcad13caac3e167735e1f0fc50355b2f9523Dmitry V. Levin
196a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen	if (clockid < 0) {
197a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen		if ((clockid & CLOCKFD_MASK) == CLOCKFD)
198a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen			tprintf("FD_TO_CLOCKID(%d)", CLOCKID_TO_FD(clockid));
199a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen		else {
200a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen			if(CPUCLOCK_PERTHREAD(clockid))
201a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen				tprintf("MAKE_THREAD_CPUCLOCK(%d,", CPUCLOCK_PID(clockid));
202a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen			else
203a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen				tprintf("MAKE_PROCESS_CPUCLOCK(%d,", CPUCLOCK_PID(clockid));
204a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen			printxval(cpuclocknames, clockid & CLOCKFD_MASK, "CPUCLOCK_???");
205a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen			tprints(")");
206a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen		}
207a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen	}
208a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen	else
209a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen#endif
210a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen		printxval(clocknames, clockid, "CLOCK_???");
211a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen}
212a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen
213a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(clock_settime)
2141e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{
21576c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	printclockname(tcp->u_arg[0]);
21676c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	tprints(", ");
2175938526c818336357b97caa8fd89d58a12987b02Dmitry V. Levin	print_timespec(tcp, tcp->u_arg[1]);
21876c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin
21976c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	return RVAL_DECODED;
2201e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath}
2211e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath
222a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(clock_gettime)
2231e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{
2241e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	if (entering(tcp)) {
225a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen		printclockname(tcp->u_arg[0]);
22660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
2271e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	} else {
2285938526c818336357b97caa8fd89d58a12987b02Dmitry V. Levin		print_timespec(tcp, tcp->u_arg[1]);
2291e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	}
2301e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	return 0;
2311e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath}
2321e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath
233a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(clock_nanosleep)
2341e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{
2351e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	if (entering(tcp)) {
236a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen		printclockname(tcp->u_arg[0]);
23760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
238b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath		printflags(clockflags, tcp->u_arg[1], "TIMER_???");
23960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
2405938526c818336357b97caa8fd89d58a12987b02Dmitry V. Levin		print_timespec(tcp, tcp->u_arg[2]);
24160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
2421e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	} else {
243c648b4a832a0913b37128bd27d07df635eafd029Dmitry V. Levin		/*
244c648b4a832a0913b37128bd27d07df635eafd029Dmitry V. Levin		 * Second (returned) timespec is only significant
245c648b4a832a0913b37128bd27d07df635eafd029Dmitry V. Levin		 * if syscall was interrupted and flags is not TIMER_ABSTIME.
246c648b4a832a0913b37128bd27d07df635eafd029Dmitry V. Levin		 */
247c648b4a832a0913b37128bd27d07df635eafd029Dmitry V. Levin		if (!tcp->u_arg[1] && is_erestart(tcp)) {
248c648b4a832a0913b37128bd27d07df635eafd029Dmitry V. Levin			temporarily_clear_syserror(tcp);
2495938526c818336357b97caa8fd89d58a12987b02Dmitry V. Levin			print_timespec(tcp, tcp->u_arg[3]);
250c648b4a832a0913b37128bd27d07df635eafd029Dmitry V. Levin			restore_cleared_syserror(tcp);
251c648b4a832a0913b37128bd27d07df635eafd029Dmitry V. Levin		} else {
252c648b4a832a0913b37128bd27d07df635eafd029Dmitry V. Levin			printaddr(tcp->u_arg[3]);
253c648b4a832a0913b37128bd27d07df635eafd029Dmitry V. Levin		}
2541e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	}
2551e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	return 0;
2561e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath}
2571e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath
258a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(clock_adjtime)
25973215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin{
26073215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin	if (exiting(tcp))
26173215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin		return do_adjtimex(tcp, tcp->u_arg[1]);
262a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen	printclockname(tcp->u_arg[0]);
26373215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin	tprints(", ");
26473215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin	return 0;
26573215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin}
26673215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin
267a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(timer_create)
2681e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{
2691e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	if (entering(tcp)) {
270a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen		printclockname(tcp->u_arg[0]);
27160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
2726f950cc49907c0357aeaa66a9ef32970733f14aeDmitry V. Levin		print_sigevent(tcp, tcp->u_arg[1]);
27360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
2741e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	} else {
27571178358610ea6876001b3b81c96fd88dc5b0bb4Dmitry V. Levin		printnum_int(tcp, tcp->u_arg[2], "%d");
2761e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	}
2771e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	return 0;
2781e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath}
2791e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath
280a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(timer_settime)
2811e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{
2821e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	if (entering(tcp)) {
28371178358610ea6876001b3b81c96fd88dc5b0bb4Dmitry V. Levin		tprintf("%d, ", (int) tcp->u_arg[0]);
284b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath		printflags(clockflags, tcp->u_arg[1], "TIMER_???");
28560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
2862206085929a18aa1428f6d1cefed444c67cbdb4dDmitry V. Levin		print_itimerspec(tcp, tcp->u_arg[2]);
28760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
2881e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	} else {
2892206085929a18aa1428f6d1cefed444c67cbdb4dDmitry V. Levin		print_itimerspec(tcp, tcp->u_arg[3]);
2901e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	}
2911e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	return 0;
2921e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath}
2931e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath
294a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(timer_gettime)
2951e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{
2961e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	if (entering(tcp)) {
29771178358610ea6876001b3b81c96fd88dc5b0bb4Dmitry V. Levin		tprintf("%d, ", (int) tcp->u_arg[0]);
2981e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	} else {
2992206085929a18aa1428f6d1cefed444c67cbdb4dDmitry V. Levin		print_itimerspec(tcp, tcp->u_arg[1]);
3001e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	}
3011e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath	return 0;
3021e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath}
303d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath
3040ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin#include "xlat/timerfdflags.h"
305e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath
306a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(timerfd)
307e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath{
30876c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	tprintf("%ld, ", tcp->u_arg[0]);
30976c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	printclockname(tcp->u_arg[0]);
31076c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	tprints(", ");
31176c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	printflags(timerfdflags, tcp->u_arg[2], "TFD_???");
31276c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	tprints(", ");
3132206085929a18aa1428f6d1cefed444c67cbdb4dDmitry V. Levin	print_itimerspec(tcp, tcp->u_arg[3]);
31476c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin
31507c878a9b5ff9b82158c5c72b177ed9a4eb16061Dmitry V. Levin	return RVAL_DECODED | RVAL_FD;
316e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath}
317de328e684f86405d85881cdc489b88a27332d256Roland McGrath
318a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(timerfd_create)
319de328e684f86405d85881cdc489b88a27332d256Roland McGrath{
32076c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	printclockname(tcp->u_arg[0]);
32176c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	tprints(", ");
32276c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	printflags(timerfdflags, tcp->u_arg[1], "TFD_???");
32376c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin
32407c878a9b5ff9b82158c5c72b177ed9a4eb16061Dmitry V. Levin	return RVAL_DECODED | RVAL_FD;
325de328e684f86405d85881cdc489b88a27332d256Roland McGrath}
326de328e684f86405d85881cdc489b88a27332d256Roland McGrath
327a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(timerfd_settime)
328de328e684f86405d85881cdc489b88a27332d256Roland McGrath{
32976c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	printfd(tcp, tcp->u_arg[0]);
33076c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	tprints(", ");
33176c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	printflags(timerfdflags, tcp->u_arg[1], "TFD_???");
33276c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	tprints(", ");
3332206085929a18aa1428f6d1cefed444c67cbdb4dDmitry V. Levin	print_itimerspec(tcp, tcp->u_arg[2]);
33476c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	tprints(", ");
3352206085929a18aa1428f6d1cefed444c67cbdb4dDmitry V. Levin	print_itimerspec(tcp, tcp->u_arg[3]);
33676c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin
33776c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	return RVAL_DECODED;
338de328e684f86405d85881cdc489b88a27332d256Roland McGrath}
339de328e684f86405d85881cdc489b88a27332d256Roland McGrath
340a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(timerfd_gettime)
341de328e684f86405d85881cdc489b88a27332d256Roland McGrath{
342de328e684f86405d85881cdc489b88a27332d256Roland McGrath	if (entering(tcp)) {
3433138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin		printfd(tcp, tcp->u_arg[0]);
34460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko		tprints(", ");
34576c8f66c4d3bbf7224b35619cd25dbf1063dd7dbDmitry V. Levin	} else {
3462206085929a18aa1428f6d1cefed444c67cbdb4dDmitry V. Levin		print_itimerspec(tcp, tcp->u_arg[1]);
347de328e684f86405d85881cdc489b88a27332d256Roland McGrath	}
348de328e684f86405d85881cdc489b88a27332d256Roland McGrath	return 0;
349de328e684f86405d85881cdc489b88a27332d256Roland McGrath}
350