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