134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/*
234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * All rights reserved.
634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *
734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Redistribution and use in source and binary forms, with or without
834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * modification, are permitted provided that the following conditions
934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * are met:
1034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
1134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
1234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
1334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
1434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *    documentation and/or other materials provided with the distribution.
1534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 3. The name of the author may not be used to endorse or promote products
1634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *    derived from this software without specific prior written permission.
1734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *
1834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project *
29f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown *	$Id$
3034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project */
3134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
3234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include "defs.h"
3334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
3434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
3534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <linux/version.h>
3634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef HAVE_ANDROID_OS
3734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <linux/timex.h>
3834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#else
3934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/timex.h>
4034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
4134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <linux/ioctl.h>
4234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <linux/rtc.h>
43f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
44f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifndef UTIME_NOW
45f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#define UTIME_NOW ((1l << 30) - 1l)
46f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
47f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifndef UTIME_OMIT
48f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#define UTIME_OMIT ((1l << 30) - 2l)
49f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
5034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
5134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
52f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstruct timeval32
5334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
54f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	u_int32_t tv_sec, tv_usec;
55f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
5634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
57f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic void
58f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browntprint_timeval32(struct tcb *tcp, const struct timeval32 *tv)
59f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
60f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("{%u, %u}", tv->tv_sec, tv->tv_usec);
61f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
62f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
63f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic void
64f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browntprint_timeval(struct tcb *tcp, const struct timeval *tv)
65f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
66f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("{%lu, %lu}",
67f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		(unsigned long) tv->tv_sec, (unsigned long) tv->tv_usec);
68f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
69f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
70f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownvoid
71f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprinttv_bitness(struct tcb *tcp, long addr, enum bitness_t bitness, int special)
72f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
7334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (addr == 0)
7434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("NULL");
7534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else if (!verbose(tcp))
7634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", addr);
77f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else {
78f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int rc;
79f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
80f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (bitness == BITNESS_32
81f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(LINUX) && SUPPORTED_PERSONALITIES > 1
82f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		    || personality_wordsize[current_personality] == 4
83f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
84f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			)
85f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		{
86f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			struct timeval32 tv;
87f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
88f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if ((rc = umove(tcp, addr, &tv)) >= 0) {
89f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				if (special && tv.tv_sec == 0 &&
90f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				    tv.tv_usec == UTIME_NOW)
91f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tprintf("UTIME_NOW");
92f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				else if (special && tv.tv_sec == 0 &&
93f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					 tv.tv_usec == UTIME_OMIT)
94f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tprintf("UTIME_OMIT");
95f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				else
96f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tprint_timeval32(tcp, &tv);
97f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			}
98f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		} else {
99f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			struct timeval tv;
100f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
101f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if ((rc = umove(tcp, addr, &tv)) >= 0) {
102f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				if (special && tv.tv_sec == 0 &&
103f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				    tv.tv_usec == UTIME_NOW)
104f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tprintf("UTIME_NOW");
105f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				else if (special && tv.tv_sec == 0 &&
106f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					 tv.tv_usec == UTIME_OMIT)
107f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tprintf("UTIME_OMIT");
108f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				else
109f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tprint_timeval(tcp, &tv);
110f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			}
111f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
112f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (rc < 0)
113f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("{...}");
114f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
11534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
11634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
117f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownvoid
118f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsprinttv(struct tcb *tcp, long addr, enum bitness_t bitness, char *buf)
11934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
120f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (addr == 0)
121f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		strcpy(buf, "NULL");
122f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else if (!verbose(tcp))
123f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		sprintf(buf, "%#lx", addr);
124f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else {
125f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int rc;
12634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
127f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (bitness == BITNESS_32
128f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(LINUX) && SUPPORTED_PERSONALITIES > 1
129f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		    || personality_wordsize[current_personality] == 4
130f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
131f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			)
132f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		{
133f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			struct timeval32 tv;
134f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
135f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if ((rc = umove(tcp, addr, &tv)) >= 0)
136f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				sprintf(buf, "{%u, %u}",
137f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tv.tv_sec, tv.tv_usec);
138f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		} else {
139f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			struct timeval tv;
140f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
141f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if ((rc = umove(tcp, addr, &tv)) >= 0)
142f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				sprintf(buf, "{%lu, %lu}",
143f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					(unsigned long) tv.tv_sec,
144f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					(unsigned long) tv.tv_usec);
145f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
146f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (rc < 0)
147f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			strcpy(buf, "{...}");
148f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
149f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
150f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
151f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownvoid print_timespec(struct tcb *tcp, long addr)
15234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
153f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (addr == 0)
154f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("NULL");
155f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else if (!verbose(tcp))
156f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("%#lx", addr);
157f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else {
158f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int rc;
159f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
160f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(LINUX) && SUPPORTED_PERSONALITIES > 1
161f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (personality_wordsize[current_personality] == 4) {
162f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			struct timeval32 tv;
16334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
164f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if ((rc = umove(tcp, addr, &tv)) >= 0)
165f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf("{%u, %u}",
166f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tv.tv_sec, tv.tv_usec);
167f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		} else
168f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
169f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		{
170f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			struct timespec ts;
171f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
172f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if ((rc = umove(tcp, addr, &ts)) >= 0)
173f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf("{%lu, %lu}",
174f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					(unsigned long) ts.tv_sec,
175f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					(unsigned long) ts.tv_nsec);
176f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
177f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (rc < 0)
178f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("{...}");
179f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
18034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
181f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
182f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownvoid sprint_timespec(char *buf, struct tcb *tcp, long addr)
183f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
184f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (addr == 0)
185f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		strcpy(buf, "NULL");
186f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else if (!verbose(tcp))
187f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		sprintf(buf, "%#lx", addr);
188f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else {
189f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int rc;
190f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
191f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(LINUX) && SUPPORTED_PERSONALITIES > 1
192f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (personality_wordsize[current_personality] == 4) {
193f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			struct timeval32 tv;
194f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
195f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if ((rc = umove(tcp, addr, &tv)) >= 0)
196f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				sprintf(buf, "{%u, %u}",
197f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					tv.tv_sec, tv.tv_usec);
198f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		} else
19934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
200f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		{
201f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			struct timespec ts;
20234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
203f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if ((rc = umove(tcp, addr, &ts)) >= 0)
204f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				sprintf(buf, "{%lu, %lu}",
205f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					(unsigned long) ts.tv_sec,
206f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown					(unsigned long) ts.tv_nsec);
207f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
208f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (rc < 0)
209f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			strcpy(buf, "{...}");
210f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
211f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
21234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
21334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
21434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_time(tcp)
21534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
21634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
21734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (exiting(tcp)) {
21834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef SVR4
21934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printnum(tcp, tcp->u_arg[0], "%ld");
22034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SVR4 */
22134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
22234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
22334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
22434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
22534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
22634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_stime(tcp)
22734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
22834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
22934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (exiting(tcp)) {
23034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printnum(tcp, tcp->u_arg[0], "%ld");
23134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
23234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
23334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
23434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
23534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
23634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_gettimeofday(tcp)
23734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
23834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
23934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (exiting(tcp)) {
24034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp)) {
24134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx, %#lx",
24234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tcp->u_arg[0], tcp->u_arg[1]);
24334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			return 0;
24434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
24534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printtv(tcp, tcp->u_arg[0]);
24634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef SVR4
24734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
24834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printtv(tcp, tcp->u_arg[1]);
24934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !SVR4 */
25034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
25134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
25234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
25334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
25434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
25534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ALPHA
25634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
25734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_osf_gettimeofday(tcp)
25834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
25934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
260f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (exiting(tcp)) {
261f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (syserror(tcp)) {
262f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%#lx, %#lx", tcp->u_arg[0], tcp->u_arg[1]);
263f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			return 0;
264f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
265f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printtv_bitness(tcp, tcp->u_arg[0], BITNESS_32, 0);
26634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef SVR4
267f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
268f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printtv_bitness(tcp, tcp->u_arg[1], BITNESS_32, 0);
26934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !SVR4 */
270f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
271f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
27234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
27334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
27434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
27534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
27634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_settimeofday(tcp)
27734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
27834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
27934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
28034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printtv(tcp, tcp->u_arg[0]);
28134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef SVR4
28234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
28334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printtv(tcp, tcp->u_arg[1]);
28434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !SVR4 */
28534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
28634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
28734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
28834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
28934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ALPHA
29034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
29134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_osf_settimeofday(tcp)
29234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
29334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
294f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
295f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printtv_bitness(tcp, tcp->u_arg[0], BITNESS_32, 0);
29634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef SVR4
297f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
298f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printtv_bitness(tcp, tcp->u_arg[1], BITNESS_32, 0);
29934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* !SVR4 */
300f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
301f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
30234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
30334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
30434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
30534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
30634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_adjtime(tcp)
30734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
30834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
30934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
31034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printtv(tcp, tcp->u_arg[0]);
31134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
31234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
31334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp))
31434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[1]);
31534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
31634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printtv(tcp, tcp->u_arg[1]);
31734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
31834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
31934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
32034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
321f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
322f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_nanosleep(struct tcb *tcp)
323f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
324f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
325f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		print_timespec(tcp, tcp->u_arg[0]);
326f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
327f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
328f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (!tcp->u_arg[1] || is_restart_error(tcp))
329f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			print_timespec(tcp, tcp->u_arg[1]);
330f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
331f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%#lx", tcp->u_arg[1]);
332f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
333f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
334f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
335f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
33634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat which[] = {
33734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ ITIMER_REAL,	"ITIMER_REAL"	},
33834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ ITIMER_VIRTUAL,"ITIMER_VIRTUAL"},
33934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ ITIMER_PROF,	"ITIMER_PROF"	},
34034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0,		NULL		},
34134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
34234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
34334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
344f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintitv_bitness(struct tcb *tcp, long addr, enum bitness_t bitness)
34534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
34634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (addr == 0)
34734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("NULL");
34834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else if (!verbose(tcp))
34934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx", addr);
35034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else {
351f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int rc;
35234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
353f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (bitness == BITNESS_32
354f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if defined(LINUX) && SUPPORTED_PERSONALITIES > 1
355f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		    || personality_wordsize[current_personality] == 4
356f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
357f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			)
358f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		{
359f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			struct {
360f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				struct timeval32 it_interval, it_value;
361f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			} itv;
36234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
363f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if ((rc = umove(tcp, addr, &itv)) >= 0) {
364f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf("{it_interval=");
365f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprint_timeval32(tcp, &itv.it_interval);
366f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf(", it_value=");
367f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprint_timeval32(tcp, &itv.it_value);
368f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf("}");
369f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			}
370f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		} else {
371f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			struct itimerval itv;
37234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
373f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			if ((rc = umove(tcp, addr, &itv)) >= 0)	{
374f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf("{it_interval=");
375f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprint_timeval(tcp, &itv.it_interval);
376f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf(", it_value=");
377f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprint_timeval(tcp, &itv.it_value);
378f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				tprintf("}");
379f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			}
380f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		}
381f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (rc < 0)
382f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("{...}");
383f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
38434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
385f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
386f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#define printitv(tcp, addr)	\
387f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	printitv_bitness((tcp), (addr), BITNESS_CURRENT)
38834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
38934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
39034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_getitimer(tcp)
39134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
39234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
39334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
39434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(which, tcp->u_arg[0], "ITIMER_???");
39534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
39634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
39734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp))
39834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[1]);
39934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
40034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printitv(tcp, tcp->u_arg[1]);
40134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
40234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
40334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
40434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
40534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
40634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ALPHA
40734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
40834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_osf_getitimer(tcp)
40934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
41034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
411f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
412f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(which, tcp->u_arg[0], "ITIMER_???");
413f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
414f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
415f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (syserror(tcp))
416f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%#lx", tcp->u_arg[1]);
417f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
418f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printitv_bitness(tcp, tcp->u_arg[1], BITNESS_32);
419f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
420f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
42134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
42234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
42334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
42434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
42534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_setitimer(tcp)
42634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
42734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
42834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
42934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(which, tcp->u_arg[0], "ITIMER_???");
43034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
43134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printitv(tcp, tcp->u_arg[1]);
43234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
43334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
43434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp))
43534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[2]);
43634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
43734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printitv(tcp, tcp->u_arg[2]);
43834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
43934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
44034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
44134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
44234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef ALPHA
44334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
44434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_osf_setitimer(tcp)
44534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
44634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
447f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
448f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(which, tcp->u_arg[0], "ITIMER_???");
449f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
450f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printitv_bitness(tcp, tcp->u_arg[1], BITNESS_32);
451f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
452f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} else {
453f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (syserror(tcp))
454f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%#lx", tcp->u_arg[2]);
455f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
456f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			printitv_bitness(tcp, tcp->u_arg[2], BITNESS_32);
457f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
458f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
45934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
46034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
46134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
46234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef LINUX
46334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
464f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat adjtimex_modes[] = {
465f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { 0, "0" },
466f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef ADJ_OFFSET
467f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { ADJ_OFFSET, "ADJ_OFFSET" },
468f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
469f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef ADJ_FREQUENCY
470f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { ADJ_FREQUENCY, "ADJ_FREQUENCY" },
471f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
472f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef ADJ_MAXERROR
473f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { ADJ_MAXERROR, "ADJ_MAXERROR" },
474f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
475f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef ADJ_ESTERROR
476f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { ADJ_ESTERROR, "ADJ_ESTERROR" },
477f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
478f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef ADJ_STATUS
479f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { ADJ_STATUS, "ADJ_STATUS" },
480f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
481f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef ADJ_TIMECONST
482f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { ADJ_TIMECONST, "ADJ_TIMECONST" },
483f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
484f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef ADJ_TICK
485f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { ADJ_TICK, "ADJ_TICK" },
486f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
487f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef ADJ_OFFSET_SINGLESHOT
488f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { ADJ_OFFSET_SINGLESHOT, "ADJ_OFFSET_SINGLESHOT" },
489f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
490f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { 0,             NULL }
491f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
492f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
493f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat adjtimex_status[] = {
494f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STA_PLL
495f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { STA_PLL, "STA_PLL" },
496f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
497f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STA_PPSFREQ
498f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { STA_PPSFREQ, "STA_PPSFREQ" },
499f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
500f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STA_PPSTIME
501f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { STA_PPSTIME, "STA_PPSTIME" },
502f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
503f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STA_FLL
504f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { STA_FLL, "STA_FLL" },
505f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
506f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STA_INS
507f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { STA_INS, "STA_INS" },
508f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
509f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STA_DEL
510f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { STA_DEL, "STA_DEL" },
511f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
512f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STA_UNSYNC
513f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { STA_UNSYNC, "STA_UNSYNC" },
514f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
515f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STA_FREQHOLD
516f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { STA_FREQHOLD, "STA_FREQHOLD" },
517f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
518f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STA_PPSSIGNAL
519f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { STA_PPSSIGNAL, "STA_PPSSIGNAL" },
520f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
521f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STA_PPSJITTER
522f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { STA_PPSJITTER, "STA_PPSJITTER" },
523f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
524f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STA_PPSWANDER
525f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { STA_PPSWANDER, "STA_PPSWANDER" },
526f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
527f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STA_PPSERROR
528f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { STA_PPSERROR, "STA_PPSERROR" },
529f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
530f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef STA_CLOCKERR
531f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { STA_CLOCKERR, "STA_CLOCKERR" },
532f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
533f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { 0,             NULL }
534f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
535f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
536f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat adjtimex_state[] = {
537f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef TIME_OK
538f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { TIME_OK, "TIME_OK" },
539f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
540f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef TIME_INS
541f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { TIME_INS, "TIME_INS" },
542f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
543f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef TIME_DEL
544f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { TIME_DEL, "TIME_DEL" },
545f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
546f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef TIME_OOP
547f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { TIME_OOP, "TIME_OOP" },
548f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
549f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef TIME_WAIT
550f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { TIME_WAIT, "TIME_WAIT" },
551f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
552f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef TIME_ERROR
553f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { TIME_ERROR, "TIME_ERROR" },
554f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
555f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { 0,             NULL }
556f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
557f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
558f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if SUPPORTED_PERSONALITIES > 1
559f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
560f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browntprint_timex32(struct tcb *tcp, long addr)
56134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
562f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	struct {
563f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		unsigned int modes;
564f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     offset;
565f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     freq;
566f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     maxerror;
567f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     esterror;
568f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     status;
569f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     constant;
570f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     precision;
571f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     tolerance;
572f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		struct timeval32 time;
573f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     tick;
574f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     ppsfreq;
575f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     jitter;
576f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     shift;
577f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     stabil;
578f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     jitcnt;
579f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     calcnt;
580f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     errcnt;
581f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     stbcnt;
582f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} tx;
583f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
584f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (umove(tcp, addr, &tx) < 0)
585f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return -1;
58634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
587f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("{modes=");
588f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	printflags(adjtimex_modes, tx.modes, "ADJ_???");
589f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf(", offset=%d, freq=%d, maxerror=%d, ",
590f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tx.offset, tx.freq, tx.maxerror);
591f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("esterror=%u, status=", tx.esterror);
592f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	printflags(adjtimex_status, tx.status, "STA_???");
593f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf(", constant=%d, precision=%u, ",
594f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tx.constant, tx.precision);
595f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("tolerance=%d, time=", tx.tolerance);
596f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprint_timeval32(tcp, &tx.time);
597f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf(", tick=%d, ppsfreq=%d, jitter=%d",
598f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tx.tick, tx.ppsfreq, tx.jitter);
599f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf(", shift=%d, stabil=%d, jitcnt=%d",
600f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tx.shift, tx.stabil, tx.jitcnt);
601f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf(", calcnt=%d, errcnt=%d, stbcnt=%d",
602f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tx.calcnt, tx.errcnt, tx.stbcnt);
603f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("}");
604f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
605f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
606f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif /* SUPPORTED_PERSONALITIES > 1 */
607f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
608f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic int
609f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Browntprint_timex(struct tcb *tcp, long addr)
610f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
611f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	struct timex tx;
612f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
613f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if SUPPORTED_PERSONALITIES > 1
614f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (personality_wordsize[current_personality] == 4)
615f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return tprint_timex32(tcp, addr);
616f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
617f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (umove(tcp, addr, &tx) < 0)
618f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return -1;
619f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
620f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if LINUX_VERSION_CODE < 66332
621f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("{mode=%d, offset=%ld, frequency=%ld, ",
622f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tx.mode, tx.offset, tx.frequency);
623f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("maxerror=%ld, esterror=%lu, status=%u, ",
624f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tx.maxerror, tx.esterror, tx.status);
625f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("time_constant=%ld, precision=%lu, ",
626f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tx.time_constant, tx.precision);
627f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("tolerance=%ld, time=", tx.tolerance);
628f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprint_timeval(tcp, &tx.time);
629f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#else
630f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("{modes=");
631f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	printflags(adjtimex_modes, tx.modes, "ADJ_???");
632f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf(", offset=%ld, freq=%ld, maxerror=%ld, ",
633f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tx.offset, tx.freq, tx.maxerror);
634f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("esterror=%lu, status=", tx.esterror);
635f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	printflags(adjtimex_status, tx.status, "STA_???");
636f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf(", constant=%ld, precision=%lu, ",
637f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tx.constant, tx.precision);
638f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("tolerance=%ld, time=", tx.tolerance);
639f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprint_timeval(tcp, &tx.time);
640f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf(", tick=%ld, ppsfreq=%ld, jitter=%ld",
641f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tx.tick, tx.ppsfreq, tx.jitter);
642f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf(", shift=%d, stabil=%ld, jitcnt=%ld",
643f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tx.shift, tx.stabil, tx.jitcnt);
644f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf(", calcnt=%ld, errcnt=%ld, stbcnt=%ld",
645f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tx.calcnt, tx.errcnt, tx.stbcnt);
646f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
647f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	tprintf("}");
648f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
649f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
650f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
651f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
652f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_adjtimex(struct tcb *tcp)
653f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
65434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (exiting(tcp)) {
65534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (tcp->u_arg[0] == 0)
65634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("NULL");
65734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else if (syserror(tcp) || !verbose(tcp))
65834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[0]);
659f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else if (tprint_timex(tcp, tcp->u_arg[0]) < 0)
66034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{...}");
661f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (syserror(tcp))
662f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			return 0;
663f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tcp->auxstr = xlookup(adjtimex_state, tcp->u_rval);
664f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (tcp->auxstr)
665f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			return RVAL_STR;
66634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
66734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
66834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
66934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
67034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat clockflags[] = {
67134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { TIMER_ABSTIME, "TIMER_ABSTIME" },
67234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { 0,             NULL }
67334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
67434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
67534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat clocknames[] = {
67634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef CLOCK_REALTIME
67734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { CLOCK_REALTIME, "CLOCK_REALTIME" },
67834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
67934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef CLOCK_MONOTONIC
68034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project  { CLOCK_MONOTONIC, "CLOCK_MONOTONIC" },
68134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
682f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef CLOCK_PROCESS_CPUTIME_ID
683f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID" },
684f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
685f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef CLOCK_THREAD_CPUTIME_ID
686f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { CLOCK_THREAD_CPUTIME_ID, "CLOCK_THREAD_CPUTIME_ID" },
687f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
688f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef CLOCK_MONOTONIC_RAW
689f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { CLOCK_MONOTONIC_RAW, "CLOCK_MONOTONIC_RAW" },
690f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
691f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef CLOCK_REALTIME_COARSE
692f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { CLOCK_REALTIME_COARSE, "CLOCK_REALTIME_COARSE" },
693f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
694f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifdef CLOCK_MONOTONIC_COARSE
695f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { CLOCK_MONOTONIC_COARSE, "CLOCK_MONOTONIC_COARSE" },
696f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
697f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown  { 0, NULL }
69834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
69934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
70034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
70134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_clock_settime(tcp)
70234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
70334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
70434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
70534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(clocknames, tcp->u_arg[0], "CLOCK_???");
70634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
70734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printtv(tcp, tcp->u_arg[1]);
70834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
70934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
71034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
71134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
71234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
71334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_clock_gettime(tcp)
71434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
71534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
71634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
71734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(clocknames, tcp->u_arg[0], "CLOCK_???");
71834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
71934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
72034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp))
72134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[1]);
72234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
72334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printtv(tcp, tcp->u_arg[1]);
72434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
72534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
72634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
72734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
72834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
72934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_clock_nanosleep(tcp)
73034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
73134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
73234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
73334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(clocknames, tcp->u_arg[0], "CLOCK_???");
73434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
73534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(clockflags, tcp->u_arg[1], "TIMER_???");
73634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
73734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printtv(tcp, tcp->u_arg[2]);
73834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
73934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
74034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp))
74134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[3]);
74234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
74334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printtv(tcp, tcp->u_arg[3]);
74434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
74534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
74634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
74734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
74834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef SIGEV_THREAD_ID
74934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project# define SIGEV_THREAD_ID 4
75034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif
75134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat sigev_value[] = {
75234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SIGEV_SIGNAL+1, "SIGEV_SIGNAL" },
75334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SIGEV_NONE+1, "SIGEV_NONE" },
75434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SIGEV_THREAD+1, "SIGEV_THREAD" },
75534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ SIGEV_THREAD_ID+1, "SIGEV_THREAD_ID" },
75634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	{ 0, NULL }
75734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project};
75834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
759f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if SUPPORTED_PERSONALITIES > 1
760f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic void
761f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintsigevent32(struct tcb *tcp, long arg)
762f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
763f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	struct {
764f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     sigev_value;
765f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     sigev_signo;
766f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		int     sigev_notify;
767f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
768f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		union {
769f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			int     tid;
770f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			struct {
771f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				int     function, attribute;
772f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			} thread;
773f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		} un;
774f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	} sev;
775f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
776f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (umove(tcp, arg, &sev) < 0)
777f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("{...}");
778f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	else {
779f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("{%#x, ", sev.sigev_value);
780f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (sev.sigev_notify == SIGEV_SIGNAL)
781f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%s, ", signame(sev.sigev_signo));
782f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
783f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("%u, ", sev.sigev_signo);
784f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(sigev_value, sev.sigev_notify + 1, "SIGEV_???");
785f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
786f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (sev.sigev_notify == SIGEV_THREAD_ID)
787f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("{%d}", sev.un.tid);
788f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else if (sev.sigev_notify == SIGEV_THREAD)
789f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("{%#x, %#x}",
790f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				sev.un.thread.function,
791f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown				sev.un.thread.attribute);
792f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
793f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown			tprintf("{...}");
794f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("}");
795f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
796f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
797f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
798f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
79934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectvoid
800f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownprintsigevent(struct tcb *tcp, long arg)
80134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
80234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	struct sigevent sev;
803f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
804f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#if SUPPORTED_PERSONALITIES > 1
805f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (personality_wordsize[current_personality] == 4)
806f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{
807f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printsigevent32(tcp, arg);
808f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		return;
809f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
810f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
81134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (umove (tcp, arg, &sev) < 0)
81234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{...}");
81334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else {
81434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("{%p, ", sev.sigev_value.sival_ptr);
81534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (sev.sigev_notify == SIGEV_SIGNAL)
81634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%s, ", signame(sev.sigev_signo));
81734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
81834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%u, ", sev.sigev_signo);
81934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(sigev_value, sev.sigev_notify+1, "SIGEV_???");
82034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
82134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (sev.sigev_notify == SIGEV_THREAD_ID)
82234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			/* _pad[0] is the _tid field which might not be
82334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			   present in the userlevel definition of the
82434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			   struct.  */
82534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{%d}", sev._sigev_un._pad[0]);
82634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else if (sev.sigev_notify == SIGEV_THREAD)
82734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{%p, %p}", sev.sigev_notify_function,
82834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				sev.sigev_notify_attributes);
82934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
83034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{...}");
83134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("}");
83234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
83334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
83434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
83534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
83634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_timer_create(tcp)
83734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
83834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
83934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
84034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printxval(clocknames, tcp->u_arg[0], "CLOCK_???");
84134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
84234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printsigevent(tcp, tcp->u_arg[1]);
84334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
84434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
845f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		void *p;
846f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
847f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		if (syserror(tcp) || umove(tcp, tcp->u_arg[2], &p) < 0)
84834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[2]);
849f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		else
85034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("{%p}", p);
85134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
85234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
85334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
85434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
85534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
85634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_timer_settime(tcp)
85734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
85834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
85934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
86034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, ", tcp->u_arg[0]);
86134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printflags(clockflags, tcp->u_arg[1], "TIMER_???");
86234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
86334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		printitv(tcp, tcp->u_arg[2]);
86434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf(", ");
86534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
86634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp))
86734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[3]);
86834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
86934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printitv(tcp, tcp->u_arg[3]);
87034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
87134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
87234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
87334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
87434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
87534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectsys_timer_gettime(tcp)
87634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
87734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
87834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (entering(tcp)) {
87934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("%#lx, ", tcp->u_arg[0]);
88034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	} else {
88134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (syserror(tcp))
88234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf("%#lx", tcp->u_arg[1]);
88334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		else
88434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			printitv(tcp, tcp->u_arg[1]);
88534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
88634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 0;
88734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
88834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
88934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic void
89034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectprint_rtc(tcp, rt)
89134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
89234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectconst struct rtc_time *rt;
89334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
89434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	tprintf("{tm_sec=%d, tm_min=%d, tm_hour=%d, "
89534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		"tm_mday=%d, tm_mon=%d, tm_year=%d, ",
89634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		rt->tm_sec, rt->tm_min, rt->tm_hour,
89734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		rt->tm_mday, rt->tm_mon, rt->tm_year);
89834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	if (!abbrev(tcp))
89934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("tm_wday=%d, tm_yday=%d, tm_isdst=%d}",
90034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			rt->tm_wday, rt->tm_yday, rt->tm_isdst);
90134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	else
90234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		tprintf("...}");
90334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
90434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project
90534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint
90634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectrtc_ioctl(tcp, code, arg)
90734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp;
90834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectlong code;
90934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectlong arg;
91034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{
91134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	switch (code) {
91234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case RTC_ALM_SET:
91334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case RTC_SET_TIME:
91434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (entering(tcp)) {
91534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			struct rtc_time rt;
91634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (umove(tcp, arg, &rt) < 0)
91734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf(", %#lx", arg);
91834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			else {
91934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf(", ");
92034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				print_rtc(tcp, &rt);
92134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			}
92234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
92334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
92434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case RTC_ALM_READ:
92534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case RTC_RD_TIME:
92634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (exiting(tcp)) {
92734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			struct rtc_time rt;
92834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (syserror(tcp) || umove(tcp, arg, &rt) < 0)
92934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf(", %#lx", arg);
93034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			else {
93134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf(", ");
93234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				print_rtc(tcp, &rt);
93334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			}
93434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
93534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
93634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case RTC_IRQP_SET:
93734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case RTC_EPOCH_SET:
93834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (entering(tcp))
93934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %lu", arg);
94034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
94134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case RTC_IRQP_READ:
94234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case RTC_EPOCH_READ:
94334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (exiting(tcp))
94434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %lu", arg);
94534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
94634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case RTC_WKALM_SET:
94734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (entering(tcp)) {
94834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			struct rtc_wkalrm wk;
94934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (umove(tcp, arg, &wk) < 0)
95034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf(", %#lx", arg);
95134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			else {
95234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf(", {enabled=%d, pending=%d, ",
95334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project					wk.enabled, wk.pending);
95434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				print_rtc(tcp, &wk.time);
95534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf("}");
95634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			}
95734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
95834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
95934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	case RTC_WKALM_RD:
96034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (exiting(tcp)) {
96134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			struct rtc_wkalrm wk;
96234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			if (syserror(tcp) || umove(tcp, arg, &wk) < 0)
96334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf(", %#lx", arg);
96434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			else {
96534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf(", {enabled=%d, pending=%d, ",
96634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project					wk.enabled, wk.pending);
96734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				print_rtc(tcp, &wk.time);
96834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project				tprintf("}");
96934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			}
97034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		}
97134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
97234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	default:
97334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		if (entering(tcp))
97434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project			tprintf(", %#lx", arg);
97534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project		break;
97634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	}
97734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project	return 1;
97834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}
979f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
980f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#ifndef TFD_TIMER_ABSTIME
981f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#define TFD_TIMER_ABSTIME (1 << 0)
982f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown#endif
983f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
984f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstatic const struct xlat timerfdflags[] = {
985f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ TFD_TIMER_ABSTIME,	"TFD_TIMER_ABSTIME"	},
986f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	{ 0,			NULL			}
987f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown};
988f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
989f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
990f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_timerfd(tcp)
991f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownstruct tcb *tcp;
992f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
993f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
994f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		/* It does not matter that the kernel uses itimerspec.  */
995f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf("%ld, ", tcp->u_arg[0]);
996f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(clocknames, tcp->u_arg[1], "CLOCK_???");
997f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
998f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(timerfdflags, tcp->u_arg[2], "TFD_???");
999f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1000f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printitv(tcp, tcp->u_arg[3]);
1001f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1002f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
1003f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
1004f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1005f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
1006f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_timerfd_create(struct tcb *tcp)
1007f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
1008f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
1009f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printxval(clocknames, tcp->u_arg[0], "CLOCK_???");
1010f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1011f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(timerfdflags, tcp->u_arg[1], "TFD_???");
1012f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1013f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
1014f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
1015f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1016f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
1017f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_timerfd_settime(struct tcb *tcp)
1018f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
1019f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
1020f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
1021f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1022f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printflags(timerfdflags, tcp->u_arg[1], "TFD_???");
1023f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1024f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printitv(tcp, tcp->u_arg[2]);
1025f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1026f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printitv(tcp, tcp->u_arg[3]);
1027f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1028f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
1029f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
1030f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
1031f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownint
1032f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brownsys_timerfd_gettime(struct tcb *tcp)
1033f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown{
1034f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	if (entering(tcp)) {
1035f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printfd(tcp, tcp->u_arg[0]);
1036f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		tprintf(", ");
1037f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown		printitv(tcp, tcp->u_arg[1]);
1038f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	}
1039f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown	return 0;
1040f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown}
1041f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown
104234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* LINUX */
1043