time.c revision bae549e91b1bf0d2261d1137c7f2bf08180ad9e6
176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman/* 276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl> 376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl> 476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com> 576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * All rights reserved. 676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Redistribution and use in source and binary forms, with or without 876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * modification, are permitted provided that the following conditions 976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * are met: 1076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 1. Redistributions of source code must retain the above copyright 1176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * notice, this list of conditions and the following disclaimer. 1276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 2. Redistributions in binary form must reproduce the above copyright 1376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * notice, this list of conditions and the following disclaimer in the 1476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * documentation and/or other materials provided with the distribution. 1576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 3. The name of the author may not be used to endorse or promote products 1676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * derived from this software without specific prior written permission. 1776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 1876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman */ 2976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include "defs.h" 3176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <linux/version.h> 32d856b99aff36012d1c8bc72012d0ede414e17971Wichert Akkerman#include <sys/timex.h> 33d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath#include <linux/ioctl.h> 34d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath#include <linux/rtc.h> 356afc5659acc3df3d2e446ba4aa3a76bdd7264e1bRoland McGrath 366afc5659acc3df3d2e446ba4aa3a76bdd7264e1bRoland McGrath#ifndef UTIME_NOW 376afc5659acc3df3d2e446ba4aa3a76bdd7264e1bRoland McGrath#define UTIME_NOW ((1l << 30) - 1l) 386afc5659acc3df3d2e446ba4aa3a76bdd7264e1bRoland McGrath#endif 396afc5659acc3df3d2e446ba4aa3a76bdd7264e1bRoland McGrath#ifndef UTIME_OMIT 406afc5659acc3df3d2e446ba4aa3a76bdd7264e1bRoland McGrath#define UTIME_OMIT ((1l << 30) - 2l) 416afc5659acc3df3d2e446ba4aa3a76bdd7264e1bRoland McGrath#endif 4276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 43a7945a3d4e144674a8dd1d885e7086bc274e391bDmitry V. Levinstruct timeval32 4476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 45a7945a3d4e144674a8dd1d885e7086bc274e391bDmitry V. Levin u_int32_t tv_sec, tv_usec; 46a7945a3d4e144674a8dd1d885e7086bc274e391bDmitry V. Levin}; 4776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 481cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levinstatic void 491cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levintprint_timeval32(struct tcb *tcp, const struct timeval32 *tv) 501cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin{ 511cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin tprintf("{%u, %u}", tv->tv_sec, tv->tv_usec); 521cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin} 531cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin 541cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levinstatic void 551cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levintprint_timeval(struct tcb *tcp, const struct timeval *tv) 561cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin{ 571cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin tprintf("{%lu, %lu}", 581cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin (unsigned long) tv->tv_sec, (unsigned long) tv->tv_usec); 591cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin} 601cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin 61a7945a3d4e144674a8dd1d885e7086bc274e391bDmitry V. Levinvoid 626afc5659acc3df3d2e446ba4aa3a76bdd7264e1bRoland McGrathprinttv_bitness(struct tcb *tcp, long addr, enum bitness_t bitness, int special) 63a7945a3d4e144674a8dd1d885e7086bc274e391bDmitry V. Levin{ 64a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko char buf[TIMEVAL_TEXT_BUFSIZE]; 65a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko sprinttv(buf, tcp, addr, bitness, special); 66a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko tprints(buf); 67a7945a3d4e144674a8dd1d885e7086bc274e391bDmitry V. Levin} 68221f54f721a2f74e629bb70e34888205f68e95ccWichert Akkerman 692fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenkochar * 70a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenkosprinttv(char *buf, struct tcb *tcp, long addr, enum bitness_t bitness, int special) 71f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman{ 722fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko int rc; 732fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko 74a7945a3d4e144674a8dd1d885e7086bc274e391bDmitry V. Levin if (addr == 0) 752fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko return stpcpy(buf, "NULL"); 76a7945a3d4e144674a8dd1d885e7086bc274e391bDmitry V. Levin 77b9c7ae621172bba141ef96e95e43f658c3643c71Denys Vlasenko if (!verbose(tcp)) 78b9c7ae621172bba141ef96e95e43f658c3643c71Denys Vlasenko return buf + sprintf(buf, "%#lx", addr); 792fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko 802fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko if (bitness == BITNESS_32 818470374cba7df0e70653d95c4f336a4082c68d82Denys Vlasenko#if SUPPORTED_PERSONALITIES > 1 829fd4f96d2a2527ac7ca90c156bfc11ce10118684Denys Vlasenko || current_wordsize == 4 83f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 842fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko ) 852fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko { 862fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko struct timeval32 tv; 872fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko 882fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko rc = umove(tcp, addr, &tv); 89a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko if (rc >= 0) { 90a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko if (special && tv.tv_sec == 0) { 91a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko if (tv.tv_usec == UTIME_NOW) 92a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko return stpcpy(buf, "UTIME_NOW"); 93a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko if (tv.tv_usec == UTIME_OMIT) 94a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko return stpcpy(buf, "UTIME_OMIT"); 95a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko } 96b9c7ae621172bba141ef96e95e43f658c3643c71Denys Vlasenko return buf + sprintf(buf, "{%u, %u}", 972fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko tv.tv_sec, tv.tv_usec); 98a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko } 992fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko } else { 1002fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko struct timeval tv; 1012fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko 1022fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko rc = umove(tcp, addr, &tv); 103a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko if (rc >= 0) { 104a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko if (special && tv.tv_sec == 0) { 105a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko if (tv.tv_usec == UTIME_NOW) 106a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko return stpcpy(buf, "UTIME_NOW"); 107a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko if (tv.tv_usec == UTIME_OMIT) 108a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko return stpcpy(buf, "UTIME_OMIT"); 109a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko } 110b9c7ae621172bba141ef96e95e43f658c3643c71Denys Vlasenko return buf + sprintf(buf, "{%lu, %lu}", 1112fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko (unsigned long) tv.tv_sec, 1122fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko (unsigned long) tv.tv_usec); 113a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko } 114a7945a3d4e144674a8dd1d885e7086bc274e391bDmitry V. Levin } 1152fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko 116b9c7ae621172bba141ef96e95e43f658c3643c71Denys Vlasenko return stpcpy(buf, "{...}"); 117a7945a3d4e144674a8dd1d885e7086bc274e391bDmitry V. Levin} 118f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 119a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenkovoid 120a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenkoprint_timespec(struct tcb *tcp, long addr) 1216bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath{ 122a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko char buf[TIMESPEC_TEXT_BUFSIZE]; 123a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko sprint_timespec(buf, tcp, addr); 124a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenko tprints(buf); 1256bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath} 1266bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath 127a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenkovoid 128a1d541ec56e2fb4716f083fcc814b1dedde63d87Denys Vlasenkosprint_timespec(char *buf, struct tcb *tcp, long addr) 1296bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath{ 1306bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath if (addr == 0) 1316bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath strcpy(buf, "NULL"); 1326bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath else if (!verbose(tcp)) 1336bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath sprintf(buf, "%#lx", addr); 1346bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath else { 1351d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko int rc; 1366bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath 1378470374cba7df0e70653d95c4f336a4082c68d82Denys Vlasenko#if SUPPORTED_PERSONALITIES > 1 1389fd4f96d2a2527ac7ca90c156bfc11ce10118684Denys Vlasenko if (current_wordsize == 4) { 1396bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath struct timeval32 tv; 1406bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath 1415d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko rc = umove(tcp, addr, &tv); 1425d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko if (rc >= 0) 1436bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath sprintf(buf, "{%u, %u}", 1446bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath tv.tv_sec, tv.tv_usec); 1456bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath } else 1466bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath#endif 1471d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko { 1486bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath struct timespec ts; 1496bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath 1505d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko rc = umove(tcp, addr, &ts); 1515d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko if (rc >= 0) 1526bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath sprintf(buf, "{%lu, %lu}", 1536bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath (unsigned long) ts.tv_sec, 1546bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath (unsigned long) ts.tv_nsec); 1556bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath } 1566bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath if (rc < 0) 1576bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath strcpy(buf, "{...}"); 1586bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath } 1596bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath} 1606bc09daaf6b249b35dec4283b165b1f39e6d6a0dRoland McGrath 16176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 1621201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_time(struct tcb *tcp) 16376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 16476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (exiting(tcp)) { 16576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printnum(tcp, tcp->u_arg[0], "%ld"); 16676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 16776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 16876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 16976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 17076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 1711201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_stime(struct tcb *tcp) 17276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 17376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (exiting(tcp)) { 17476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printnum(tcp, tcp->u_arg[0], "%ld"); 17576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 17676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 17776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 17876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 17976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 1801201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_gettimeofday(struct tcb *tcp) 18176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 18276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (exiting(tcp)) { 18376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) { 18476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx, %#lx", 18576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->u_arg[0], tcp->u_arg[1]); 18676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 18776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 18876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printtv(tcp, tcp->u_arg[0]); 18960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 19076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printtv(tcp, tcp->u_arg[1]); 19176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 19276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 19376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 19476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 195f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef ALPHA 196f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkermanint 1971201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_osf_gettimeofday(struct tcb *tcp) 198f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman{ 1991d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko if (exiting(tcp)) { 2001d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko if (syserror(tcp)) { 2011d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("%#lx, %#lx", tcp->u_arg[0], tcp->u_arg[1]); 2021d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko return 0; 2031d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } 2041d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printtv_bitness(tcp, tcp->u_arg[0], BITNESS_32, 0); 20560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 2061d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printtv_bitness(tcp, tcp->u_arg[1], BITNESS_32, 0); 2071d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } 2081d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko return 0; 209f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman} 210f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 211f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 21276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 2131201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_settimeofday(struct tcb *tcp) 21476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 21576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 21676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printtv(tcp, tcp->u_arg[0]); 21760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 21876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printtv(tcp, tcp->u_arg[1]); 21976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 22076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 22176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 22276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 223f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef ALPHA 224f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkermanint 2251201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_osf_settimeofday(struct tcb *tcp) 226f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman{ 2271d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko if (entering(tcp)) { 2281d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printtv_bitness(tcp, tcp->u_arg[0], BITNESS_32, 0); 22960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 2301d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printtv_bitness(tcp, tcp->u_arg[1], BITNESS_32, 0); 2311d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } 2321d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko return 0; 233f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman} 234f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 235f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 23676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 2371201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_adjtime(struct tcb *tcp) 23876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 23976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 24076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printtv(tcp, tcp->u_arg[0]); 24160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 24276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 24376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 24476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 24576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 24676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printtv(tcp, tcp->u_arg[1]); 24776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 24876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 24976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 25076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 2512e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levinint 2522e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levinsys_nanosleep(struct tcb *tcp) 2532e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin{ 2542e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin if (entering(tcp)) { 2552e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin print_timespec(tcp, tcp->u_arg[0]); 25660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 2572e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin } else { 25864acaa1193173c965ef32919aa5c092ce912d57cDenys Vlasenko /* Second (returned) timespec is only significant 2594793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko * if syscall was interrupted. On success, we print 2604793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko * only its address, since kernel doesn't modify it, 2614793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko * and printing the value may show uninitialized data. 26264acaa1193173c965ef32919aa5c092ce912d57cDenys Vlasenko */ 2634793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko switch (tcp->u_error) { 2644793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko default: 2654793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko /* Not interrupted (slept entire interval) */ 2664793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko if (tcp->u_arg[1]) { 2674793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko tprintf("%#lx", tcp->u_arg[1]); 2684793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko break; 2694793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko } 2704793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko /* Fall through: print_timespec(NULL) prints "NULL" */ 2714793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko case ERESTARTSYS: 2724793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko case ERESTARTNOINTR: 2734793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko case ERESTARTNOHAND: 2744793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko case ERESTART_RESTARTBLOCK: 2754793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko /* Interrupted */ 2762e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin print_timespec(tcp, tcp->u_arg[1]); 2774793221a53fb69aa519bc91ab19a79524c0df097Denys Vlasenko } 2782e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin } 2792e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin return 0; 2802e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin} 2812e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin 282d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat which[] = { 283bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ITIMER_REAL), 284bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ITIMER_VIRTUAL), 285bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ITIMER_PROF), 28676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { 0, NULL }, 28776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 28876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 28976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstatic void 2901cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levinprintitv_bitness(struct tcb *tcp, long addr, enum bitness_t bitness) 29176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 29276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (addr == 0) 29360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("NULL"); 29476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else if (!verbose(tcp)) 29576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", addr); 2961d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko else { 2971d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko int rc; 29876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 2991cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin if (bitness == BITNESS_32 3008470374cba7df0e70653d95c4f336a4082c68d82Denys Vlasenko#if SUPPORTED_PERSONALITIES > 1 3019fd4f96d2a2527ac7ca90c156bfc11ce10118684Denys Vlasenko || current_wordsize == 4 3021cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin#endif 3031cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin ) 3041cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin { 3051d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko struct { 3061cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin struct timeval32 it_interval, it_value; 3071cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin } itv; 3081cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin 3095d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko rc = umove(tcp, addr, &itv); 3105d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko if (rc >= 0) { 31160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{it_interval="); 3121cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin tprint_timeval32(tcp, &itv.it_interval); 31360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", it_value="); 3141cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin tprint_timeval32(tcp, &itv.it_value); 31560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 316e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath } 3171d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } else { 3181cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin struct itimerval itv; 3191cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin 3205d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko rc = umove(tcp, addr, &itv); 3215d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko if (rc >= 0) { 32260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{it_interval="); 3231cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin tprint_timeval(tcp, &itv.it_interval); 32460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", it_value="); 3251cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin tprint_timeval(tcp, &itv.it_value); 32660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 327e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath } 3281cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin } 3291cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin if (rc < 0) 33060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 3311cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin } 332f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman} 3331cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin 3341cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin#define printitv(tcp, addr) \ 3351cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin printitv_bitness((tcp), (addr), BITNESS_CURRENT) 336f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 33776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 3381201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_getitimer(struct tcb *tcp) 33976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 34076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 34176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(which, tcp->u_arg[0], "ITIMER_???"); 34260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 34376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 34476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 34576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 34676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 34776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printitv(tcp, tcp->u_arg[1]); 34876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 34976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 35076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 35176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 352f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef ALPHA 353f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkermanint 3541201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_osf_getitimer(struct tcb *tcp) 355f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman{ 3561d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko if (entering(tcp)) { 3571d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printxval(which, tcp->u_arg[0], "ITIMER_???"); 35860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3591d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } else { 3601d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko if (syserror(tcp)) 3611d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("%#lx", tcp->u_arg[1]); 3621d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko else 3631d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printitv_bitness(tcp, tcp->u_arg[1], BITNESS_32); 3641d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } 3651d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko return 0; 366f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman} 367f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 368f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 36976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 3701201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_setitimer(struct tcb *tcp) 37176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 37276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 37376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(which, tcp->u_arg[0], "ITIMER_???"); 37460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 37576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printitv(tcp, tcp->u_arg[1]); 37660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 37776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 37876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 37976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[2]); 38076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 38176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printitv(tcp, tcp->u_arg[2]); 38276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 38376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 38476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 38576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 386f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef ALPHA 387f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkermanint 3881201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_osf_setitimer(struct tcb *tcp) 389f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman{ 3901d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko if (entering(tcp)) { 3911d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printxval(which, tcp->u_arg[0], "ITIMER_???"); 39260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3931d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printitv_bitness(tcp, tcp->u_arg[1], BITNESS_32); 39460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3951d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } else { 3961d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko if (syserror(tcp)) 3971d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("%#lx", tcp->u_arg[2]); 3981d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko else 3991d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printitv_bitness(tcp, tcp->u_arg[2], BITNESS_32); 4001d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } 4011d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko return 0; 402f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman} 403f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 404f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 4051a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levinstatic const struct xlat adjtimex_modes[] = { 406bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(0), 4071a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_OFFSET 408bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ADJ_OFFSET), 4091a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4101a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_FREQUENCY 411bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ADJ_FREQUENCY), 4121a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4131a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_MAXERROR 414bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ADJ_MAXERROR), 4151a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4161a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_ESTERROR 417bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ADJ_ESTERROR), 4181a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4191a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_STATUS 420bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ADJ_STATUS), 4211a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4221a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_TIMECONST 423bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ADJ_TIMECONST), 4241a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 425cdf022afa471ce2fd4c50e2b6b4500f4cfb0d56dStefan Sørensen#ifdef ADJ_TAI 426bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ADJ_TAI), 427cdf022afa471ce2fd4c50e2b6b4500f4cfb0d56dStefan Sørensen#endif 428cdf022afa471ce2fd4c50e2b6b4500f4cfb0d56dStefan Sørensen#ifdef ADJ_SETOFFSET 429bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ADJ_SETOFFSET), 430cdf022afa471ce2fd4c50e2b6b4500f4cfb0d56dStefan Sørensen#endif 431cdf022afa471ce2fd4c50e2b6b4500f4cfb0d56dStefan Sørensen#ifdef ADJ_MICRO 432bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ADJ_MICRO), 433cdf022afa471ce2fd4c50e2b6b4500f4cfb0d56dStefan Sørensen#endif 434cdf022afa471ce2fd4c50e2b6b4500f4cfb0d56dStefan Sørensen#ifdef ADJ_NANO 435bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ADJ_NANO), 436cdf022afa471ce2fd4c50e2b6b4500f4cfb0d56dStefan Sørensen#endif 4371a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_TICK 438bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ADJ_TICK), 4391a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4401a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_OFFSET_SINGLESHOT 441bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ADJ_OFFSET_SINGLESHOT), 4421a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 443cdf022afa471ce2fd4c50e2b6b4500f4cfb0d56dStefan Sørensen#ifdef ADJ_OFFSET_SS_READ 444bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(ADJ_OFFSET_SS_READ), 445cdf022afa471ce2fd4c50e2b6b4500f4cfb0d56dStefan Sørensen#endif 4463e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { 0, NULL } 4471a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin}; 4481a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin 4491a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levinstatic const struct xlat adjtimex_status[] = { 4501a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PLL 451bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_PLL), 4521a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4531a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PPSFREQ 454bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_PPSFREQ), 4551a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4561a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PPSTIME 457bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_PPSTIME), 4581a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4591a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_FLL 460bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_FLL), 4611a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4621a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_INS 463bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_INS), 4641a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4651a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_DEL 466bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_DEL), 4671a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4681a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_UNSYNC 469bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_UNSYNC), 4701a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4711a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_FREQHOLD 472bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_FREQHOLD), 4731a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4741a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PPSSIGNAL 475bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_PPSSIGNAL), 4761a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4771a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PPSJITTER 478bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_PPSJITTER), 4791a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4801a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PPSWANDER 481bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_PPSWANDER), 4821a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4831a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PPSERROR 484bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_PPSERROR), 4851a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4861a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_CLOCKERR 487bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_CLOCKERR), 4881a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 489a28fbfd523f9758438985847cf9cd6b9c08433b1Dmitry V. Levin#ifdef STA_NANO 490bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_NANO), 491a28fbfd523f9758438985847cf9cd6b9c08433b1Dmitry V. Levin#endif 492a28fbfd523f9758438985847cf9cd6b9c08433b1Dmitry V. Levin#ifdef STA_MODE 493bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_MODE), 494a28fbfd523f9758438985847cf9cd6b9c08433b1Dmitry V. Levin#endif 495a28fbfd523f9758438985847cf9cd6b9c08433b1Dmitry V. Levin#ifdef STA_CLK 496bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(STA_CLK), 497a28fbfd523f9758438985847cf9cd6b9c08433b1Dmitry V. Levin#endif 4983e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { 0, NULL } 4991a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin}; 5001a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin 5011a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levinstatic const struct xlat adjtimex_state[] = { 5021a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef TIME_OK 503bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(TIME_OK), 5041a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 5051a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef TIME_INS 506bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(TIME_INS), 5071a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 5081a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef TIME_DEL 509bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(TIME_DEL), 5101a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 5111a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef TIME_OOP 512bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(TIME_OOP), 5131a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 5141a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef TIME_WAIT 515bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(TIME_WAIT), 5161a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 5171a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef TIME_ERROR 518bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(TIME_ERROR), 5191a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 5203e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { 0, NULL } 5211a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin}; 5221a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin 523165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 524165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levinstatic int 525165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levintprint_timex32(struct tcb *tcp, long addr) 526165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin{ 5271d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko struct { 528165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin unsigned int modes; 529165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int offset; 530165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int freq; 531165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int maxerror; 532165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int esterror; 533165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int status; 534165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int constant; 535165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int precision; 536165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int tolerance; 537165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin struct timeval32 time; 538165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int tick; 539165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int ppsfreq; 540165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int jitter; 541165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int shift; 542165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int stabil; 543165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int jitcnt; 544165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int calcnt; 545165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int errcnt; 546165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int stbcnt; 547165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin } tx; 548165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin 549165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin if (umove(tcp, addr, &tx) < 0) 550165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin return -1; 551165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin 55260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{modes="); 55371d7089055b0ce830bf13d9322f06b87d6ce47c0Dmitry V. Levin printflags(adjtimex_modes, tx.modes, "ADJ_???"); 554165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", offset=%d, freq=%d, maxerror=%d, ", 555165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.offset, tx.freq, tx.maxerror); 556165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf("esterror=%u, status=", tx.esterror); 557165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin printflags(adjtimex_status, tx.status, "STA_???"); 558165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", constant=%d, precision=%u, ", 559165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.constant, tx.precision); 560165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf("tolerance=%d, time=", tx.tolerance); 561165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprint_timeval32(tcp, &tx.time); 562165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", tick=%d, ppsfreq=%d, jitter=%d", 563165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.tick, tx.ppsfreq, tx.jitter); 564165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", shift=%d, stabil=%d, jitcnt=%d", 565165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.shift, tx.stabil, tx.jitcnt); 566165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", calcnt=%d, errcnt=%d, stbcnt=%d", 567165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.calcnt, tx.errcnt, tx.stbcnt); 56860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 569165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin return 0; 570165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin} 571165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#endif /* SUPPORTED_PERSONALITIES > 1 */ 572165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin 573165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levinstatic int 574165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levintprint_timex(struct tcb *tcp, long addr) 57576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 5761a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin struct timex tx; 57776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 578165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 5799fd4f96d2a2527ac7ca90c156bfc11ce10118684Denys Vlasenko if (current_wordsize == 4) 580165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin return tprint_timex32(tcp, addr); 581165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#endif 582165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin if (umove(tcp, addr, &tx) < 0) 583165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin return -1; 584165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin 585165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#if LINUX_VERSION_CODE < 66332 586165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf("{mode=%d, offset=%ld, frequency=%ld, ", 587165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.mode, tx.offset, tx.frequency); 588165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf("maxerror=%ld, esterror=%lu, status=%u, ", 589165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.maxerror, tx.esterror, tx.status); 590165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf("time_constant=%ld, precision=%lu, ", 591165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.time_constant, tx.precision); 592165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf("tolerance=%ld, time=", tx.tolerance); 593165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprint_timeval(tcp, &tx.time); 594165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#else 59560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{modes="); 59671d7089055b0ce830bf13d9322f06b87d6ce47c0Dmitry V. Levin printflags(adjtimex_modes, tx.modes, "ADJ_???"); 597165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", offset=%ld, freq=%ld, maxerror=%ld, ", 5980b315b65432cda20c7e5608c5124289036522fa7H.J. Lu (long) tx.offset, (long) tx.freq, (long) tx.maxerror); 5990b315b65432cda20c7e5608c5124289036522fa7H.J. Lu tprintf("esterror=%lu, status=", (long) tx.esterror); 600165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin printflags(adjtimex_status, tx.status, "STA_???"); 601165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", constant=%ld, precision=%lu, ", 6020b315b65432cda20c7e5608c5124289036522fa7H.J. Lu (long) tx.constant, (long) tx.precision); 6030b315b65432cda20c7e5608c5124289036522fa7H.J. Lu tprintf("tolerance=%ld, time=", (long) tx.tolerance); 604165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprint_timeval(tcp, &tx.time); 605165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", tick=%ld, ppsfreq=%ld, jitter=%ld", 6060b315b65432cda20c7e5608c5124289036522fa7H.J. Lu (long) tx.tick, (long) tx.ppsfreq, (long) tx.jitter); 607165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", shift=%d, stabil=%ld, jitcnt=%ld", 6080b315b65432cda20c7e5608c5124289036522fa7H.J. Lu tx.shift, (long) tx.stabil, (long) tx.jitcnt); 609165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", calcnt=%ld, errcnt=%ld, stbcnt=%ld", 6100b315b65432cda20c7e5608c5124289036522fa7H.J. Lu (long) tx.calcnt, (long) tx.errcnt, (long) tx.stbcnt); 611165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#endif 61260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 613165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin return 0; 614165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin} 615165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin 61673215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levinstatic int 61773215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levindo_adjtimex(struct tcb *tcp, long addr) 61873215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin{ 61973215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin if (addr == 0) 62073215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin tprints("NULL"); 62173215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin else if (syserror(tcp) || !verbose(tcp)) 62273215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin tprintf("%#lx", addr); 62373215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin else if (tprint_timex(tcp, addr) < 0) 62473215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin tprints("{...}"); 62573215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin if (syserror(tcp)) 62673215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin return 0; 62773215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin tcp->auxstr = xlookup(adjtimex_state, tcp->u_rval); 62873215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin if (tcp->auxstr) 62973215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin return RVAL_STR; 63073215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin return 0; 63173215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin} 63273215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin 633165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levinint 634165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levinsys_adjtimex(struct tcb *tcp) 635165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin{ 63673215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin if (exiting(tcp)) 63773215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin return do_adjtimex(tcp, tcp->u_arg[0]); 63876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 63976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 6401e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 641d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat clockflags[] = { 642bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(TIMER_ABSTIME), 6433e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { 0, NULL } 6441e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath}; 6451e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 646d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat clocknames[] = { 64755a00f8092d9596a4ca619017bfba0dea2e085d1Roland McGrath#ifdef CLOCK_REALTIME 648bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CLOCK_REALTIME), 64955a00f8092d9596a4ca619017bfba0dea2e085d1Roland McGrath#endif 65055a00f8092d9596a4ca619017bfba0dea2e085d1Roland McGrath#ifdef CLOCK_MONOTONIC 651bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CLOCK_MONOTONIC), 65255a00f8092d9596a4ca619017bfba0dea2e085d1Roland McGrath#endif 653cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#ifdef CLOCK_PROCESS_CPUTIME_ID 654bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CLOCK_PROCESS_CPUTIME_ID), 655cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#endif 656cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#ifdef CLOCK_THREAD_CPUTIME_ID 657bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CLOCK_THREAD_CPUTIME_ID), 658cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#endif 659cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#ifdef CLOCK_MONOTONIC_RAW 660bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CLOCK_MONOTONIC_RAW), 661cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#endif 662cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#ifdef CLOCK_REALTIME_COARSE 663bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CLOCK_REALTIME_COARSE), 664cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#endif 665cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#ifdef CLOCK_MONOTONIC_COARSE 666bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CLOCK_MONOTONIC_COARSE), 667cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#endif 6683e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { 0, NULL } 66954a4edd69a320542ddd0dffec05dacab7443d453Roland McGrath}; 67054a4edd69a320542ddd0dffec05dacab7443d453Roland McGrath 671a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen#ifdef CLOCKID_TO_FD 672a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensenstatic const struct xlat cpuclocknames[] = { 673bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CPUCLOCK_PROF), 674bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CPUCLOCK_VIRT), 675bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(CPUCLOCK_SCHED), 676a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen { 0, NULL } 677a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen}; 678a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen#endif 679a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen 680a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensenstatic void 681a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensenprintclockname(int clockid) 682a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen{ 683a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen#ifdef CLOCKID_TO_FD 684a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen if (clockid < 0) { 685a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen if ((clockid & CLOCKFD_MASK) == CLOCKFD) 686a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen tprintf("FD_TO_CLOCKID(%d)", CLOCKID_TO_FD(clockid)); 687a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen else { 688a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen if(CPUCLOCK_PERTHREAD(clockid)) 689a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen tprintf("MAKE_THREAD_CPUCLOCK(%d,", CPUCLOCK_PID(clockid)); 690a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen else 691a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen tprintf("MAKE_PROCESS_CPUCLOCK(%d,", CPUCLOCK_PID(clockid)); 692a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen printxval(cpuclocknames, clockid & CLOCKFD_MASK, "CPUCLOCK_???"); 693a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen tprints(")"); 694a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen } 695a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen } 696a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen else 697a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen#endif 698a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen printxval(clocknames, clockid, "CLOCK_???"); 699a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen} 700a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen 7011e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathint 7021201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_clock_settime(struct tcb *tcp) 7031e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 7041e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (entering(tcp)) { 705a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen printclockname(tcp->u_arg[0]); 70660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 7071e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printtv(tcp, tcp->u_arg[1]); 7081e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 7091e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath return 0; 7101e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 7111e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 7121e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathint 7131201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_clock_gettime(struct tcb *tcp) 7141e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 7151e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (entering(tcp)) { 716a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen printclockname(tcp->u_arg[0]); 71760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 7181e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } else { 7191e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (syserror(tcp)) 7201e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx", tcp->u_arg[1]); 7211e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath else 7221e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printtv(tcp, tcp->u_arg[1]); 7231e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 7241e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath return 0; 7251e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 7261e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 7271e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathint 7281201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_clock_nanosleep(struct tcb *tcp) 7291e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 7301e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (entering(tcp)) { 731a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen printclockname(tcp->u_arg[0]); 73260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 733b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(clockflags, tcp->u_arg[1], "TIMER_???"); 73460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 7351e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printtv(tcp, tcp->u_arg[2]); 73660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 7371e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } else { 7381e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (syserror(tcp)) 7391e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx", tcp->u_arg[3]); 7401e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath else 7411e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printtv(tcp, tcp->u_arg[3]); 7421e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 7431e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath return 0; 7441e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 7451e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 74673215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levinint 74773215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levinsys_clock_adjtime(struct tcb *tcp) 74873215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin{ 74973215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin if (exiting(tcp)) 75073215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin return do_adjtimex(tcp, tcp->u_arg[1]); 751a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen printclockname(tcp->u_arg[0]); 75273215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin tprints(", "); 75373215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin return 0; 75473215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin} 75573215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin 7561e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath#ifndef SIGEV_THREAD_ID 7571e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath# define SIGEV_THREAD_ID 4 7581e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath#endif 759d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat sigev_value[] = { 760bae549e91b1bf0d2261d1137c7f2bf08180ad9e6Dmitry V. Levin XLAT(SIGEV_SIGNAL), 761bae549e91b1bf0d2261d1137c7f2bf08180ad9e6Dmitry V. Levin XLAT(SIGEV_NONE), 762bae549e91b1bf0d2261d1137c7f2bf08180ad9e6Dmitry V. Levin XLAT(SIGEV_THREAD), 763bae549e91b1bf0d2261d1137c7f2bf08180ad9e6Dmitry V. Levin XLAT(SIGEV_THREAD_ID), 7641e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath { 0, NULL } 7651e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath}; 7661e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 767d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 768d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levinstatic void 769d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levinprintsigevent32(struct tcb *tcp, long arg) 770d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin{ 7711d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko struct { 772d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin int sigev_value; 773d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin int sigev_signo; 774d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin int sigev_notify; 775d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin 7761d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko union { 777d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin int tid; 7781d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko struct { 779d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin int function, attribute; 780d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin } thread; 781d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin } un; 782d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin } sev; 783d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin 784d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin if (umove(tcp, arg, &sev) < 0) 78560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 7861d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko else { 787d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin tprintf("{%#x, ", sev.sigev_value); 788d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin if (sev.sigev_notify == SIGEV_SIGNAL) 789d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin tprintf("%s, ", signame(sev.sigev_signo)); 790d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin else 791d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin tprintf("%u, ", sev.sigev_signo); 792bae549e91b1bf0d2261d1137c7f2bf08180ad9e6Dmitry V. Levin printxval(sigev_value, sev.sigev_notify, "SIGEV_???"); 79360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 794d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin if (sev.sigev_notify == SIGEV_THREAD_ID) 795d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin tprintf("{%d}", sev.un.tid); 796d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin else if (sev.sigev_notify == SIGEV_THREAD) 797d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin tprintf("{%#x, %#x}", 798d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin sev.un.thread.function, 799d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin sev.un.thread.attribute); 800d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin else 80160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 80260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 803d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin } 804d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin} 805d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin#endif 806d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin 8071e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathvoid 808d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levinprintsigevent(struct tcb *tcp, long arg) 8091e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 8101e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath struct sigevent sev; 811d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin 812d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 8139fd4f96d2a2527ac7ca90c156bfc11ce10118684Denys Vlasenko if (current_wordsize == 4) { 814d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin printsigevent32(tcp, arg); 815d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin return; 816d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin } 817d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin#endif 818b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko if (umove(tcp, arg, &sev) < 0) 81960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 8201e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath else { 821675d4a6dba13915527309c962c38f5f961ec2996Roland McGrath tprintf("{%p, ", sev.sigev_value.sival_ptr); 822675d4a6dba13915527309c962c38f5f961ec2996Roland McGrath if (sev.sigev_notify == SIGEV_SIGNAL) 823675d4a6dba13915527309c962c38f5f961ec2996Roland McGrath tprintf("%s, ", signame(sev.sigev_signo)); 824675d4a6dba13915527309c962c38f5f961ec2996Roland McGrath else 825675d4a6dba13915527309c962c38f5f961ec2996Roland McGrath tprintf("%u, ", sev.sigev_signo); 826bae549e91b1bf0d2261d1137c7f2bf08180ad9e6Dmitry V. Levin printxval(sigev_value, sev.sigev_notify, "SIGEV_???"); 82760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 8281e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (sev.sigev_notify == SIGEV_THREAD_ID) 829ae5aa47370455123bf84e52dd8354d26c29efea8Dmitry V. Levin#if defined(HAVE_STRUCT_SIGEVENT__SIGEV_UN__PAD) 8301e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath /* _pad[0] is the _tid field which might not be 8311e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath present in the userlevel definition of the 8321e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath struct. */ 8331e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("{%d}", sev._sigev_un._pad[0]); 834ae5aa47370455123bf84e52dd8354d26c29efea8Dmitry V. Levin#elif defined(HAVE_STRUCT_SIGEVENT___PAD) 835ae5aa47370455123bf84e52dd8354d26c29efea8Dmitry V. Levin tprintf("{%d}", sev.__pad[0]); 836ae5aa47370455123bf84e52dd8354d26c29efea8Dmitry V. Levin#else 837ae5aa47370455123bf84e52dd8354d26c29efea8Dmitry V. Levin# warning unfamiliar struct sigevent => incomplete SIGEV_THREAD_ID decoding 838ae5aa47370455123bf84e52dd8354d26c29efea8Dmitry V. Levin tprints("{...}"); 839ae5aa47370455123bf84e52dd8354d26c29efea8Dmitry V. Levin#endif 840d4c85ebbc64b1eb141b310a4634c6ca37fd352c1Roland McGrath else if (sev.sigev_notify == SIGEV_THREAD) 841d4c85ebbc64b1eb141b310a4634c6ca37fd352c1Roland McGrath tprintf("{%p, %p}", sev.sigev_notify_function, 842d4c85ebbc64b1eb141b310a4634c6ca37fd352c1Roland McGrath sev.sigev_notify_attributes); 8431e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath else 84460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 84560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 8461e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 8471e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 8481e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 8491e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathint 8501201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_timer_create(struct tcb *tcp) 8511e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 8521e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (entering(tcp)) { 853a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen printclockname(tcp->u_arg[0]); 85460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 8551e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printsigevent(tcp, tcp->u_arg[1]); 85660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 8571e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } else { 858732f39656d933c6112a0586bbefcf8288d57bda4Andi Kleen int timer_id; 859ac518d10777f9dd95aad22939da6c867cf4c193eDmitry V. Levin 860732f39656d933c6112a0586bbefcf8288d57bda4Andi Kleen if (syserror(tcp) || umove(tcp, tcp->u_arg[2], &timer_id) < 0) 8611e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx", tcp->u_arg[2]); 862ac518d10777f9dd95aad22939da6c867cf4c193eDmitry V. Levin else 863732f39656d933c6112a0586bbefcf8288d57bda4Andi Kleen tprintf("{%d}", timer_id); 8641e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 8651e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath return 0; 8661e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 8671e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 8681e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathint 8691201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_timer_settime(struct tcb *tcp) 8701e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 8711e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (entering(tcp)) { 8721e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx, ", tcp->u_arg[0]); 873b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(clockflags, tcp->u_arg[1], "TIMER_???"); 87460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 8751e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printitv(tcp, tcp->u_arg[2]); 87660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 8771e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } else { 8781e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (syserror(tcp)) 8791e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx", tcp->u_arg[3]); 8801e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath else 8811e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printitv(tcp, tcp->u_arg[3]); 8821e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 8831e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath return 0; 8841e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 8851e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 8861e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathint 8871201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_timer_gettime(struct tcb *tcp) 8881e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 8891e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (entering(tcp)) { 8901e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx, ", tcp->u_arg[0]); 8911e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } else { 8921e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (syserror(tcp)) 8931e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx", tcp->u_arg[1]); 8941e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath else 8951e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printitv(tcp, tcp->u_arg[1]); 8961e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 8971e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath return 0; 8981e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 899d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath 900d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrathstatic void 9011201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkoprint_rtc(struct tcb *tcp, const struct rtc_time *rt) 902d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath{ 903d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf("{tm_sec=%d, tm_min=%d, tm_hour=%d, " 904d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath "tm_mday=%d, tm_mon=%d, tm_year=%d, ", 905d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath rt->tm_sec, rt->tm_min, rt->tm_hour, 906d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath rt->tm_mday, rt->tm_mon, rt->tm_year); 907d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (!abbrev(tcp)) 908d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf("tm_wday=%d, tm_yday=%d, tm_isdst=%d}", 909d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath rt->tm_wday, rt->tm_yday, rt->tm_isdst); 910d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath else 91160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("...}"); 912d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath} 913d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath 914d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrathint 9151201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkortc_ioctl(struct tcb *tcp, long code, long arg) 916d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath{ 917d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath switch (code) { 918d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_ALM_SET: 919d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_SET_TIME: 920d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (entering(tcp)) { 921d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath struct rtc_time rt; 922d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (umove(tcp, arg, &rt) < 0) 923d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %#lx", arg); 924d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath else { 92560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 926d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath print_rtc(tcp, &rt); 927d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 928d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 929d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 930d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_ALM_READ: 931d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_RD_TIME: 932d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (exiting(tcp)) { 933d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath struct rtc_time rt; 934d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (syserror(tcp) || umove(tcp, arg, &rt) < 0) 935d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %#lx", arg); 936d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath else { 93760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 938d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath print_rtc(tcp, &rt); 939d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 940d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 941d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 942d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_IRQP_SET: 943d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_EPOCH_SET: 944d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (entering(tcp)) 945d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %lu", arg); 946d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 947d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_IRQP_READ: 948d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_EPOCH_READ: 949d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (exiting(tcp)) 950d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %lu", arg); 951d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 952d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_WKALM_SET: 953d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (entering(tcp)) { 954d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath struct rtc_wkalrm wk; 955d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (umove(tcp, arg, &wk) < 0) 956d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %#lx", arg); 957d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath else { 958d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", {enabled=%d, pending=%d, ", 959d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath wk.enabled, wk.pending); 960d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath print_rtc(tcp, &wk.time); 96160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 962d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 963d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 964d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 965d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_WKALM_RD: 966d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (exiting(tcp)) { 967d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath struct rtc_wkalrm wk; 968d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (syserror(tcp) || umove(tcp, arg, &wk) < 0) 969d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %#lx", arg); 970d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath else { 971d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", {enabled=%d, pending=%d, ", 972d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath wk.enabled, wk.pending); 973d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath print_rtc(tcp, &wk.time); 97460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 975d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 976d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 977d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 978d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath default: 979d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (entering(tcp)) 980d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %#lx", arg); 981d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 982d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 983d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath return 1; 984d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath} 985e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath 986e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath#ifndef TFD_TIMER_ABSTIME 987e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath#define TFD_TIMER_ABSTIME (1 << 0) 988e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath#endif 989e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath 990e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrathstatic const struct xlat timerfdflags[] = { 991bce0cc6a2d103e1da4c15a4c5396fdc5676294f7Dmitry V. Levin XLAT(TFD_TIMER_ABSTIME), 992e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath { 0, NULL } 993e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath}; 994e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath 995e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrathint 9961201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_timerfd(struct tcb *tcp) 997e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath{ 998e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath if (entering(tcp)) { 999e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath /* It does not matter that the kernel uses itimerspec. */ 1000e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath tprintf("%ld, ", tcp->u_arg[0]); 1001a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen printclockname(tcp->u_arg[0]); 100260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 1003e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath printflags(timerfdflags, tcp->u_arg[2], "TFD_???"); 100460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 1005e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath printitv(tcp, tcp->u_arg[3]); 1006e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath } 1007e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath return 0; 1008e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath} 1009de328e684f86405d85881cdc489b88a27332d256Roland McGrath 1010de328e684f86405d85881cdc489b88a27332d256Roland McGrathint 1011de328e684f86405d85881cdc489b88a27332d256Roland McGrathsys_timerfd_create(struct tcb *tcp) 1012de328e684f86405d85881cdc489b88a27332d256Roland McGrath{ 1013de328e684f86405d85881cdc489b88a27332d256Roland McGrath if (entering(tcp)) { 1014a5fea9060f382fb57f3c4c6492184cd2a7f92b40Stefan Sørensen printclockname(tcp->u_arg[0]); 101560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 1016de328e684f86405d85881cdc489b88a27332d256Roland McGrath printflags(timerfdflags, tcp->u_arg[1], "TFD_???"); 1017de328e684f86405d85881cdc489b88a27332d256Roland McGrath } 1018de328e684f86405d85881cdc489b88a27332d256Roland McGrath return 0; 1019de328e684f86405d85881cdc489b88a27332d256Roland McGrath} 1020de328e684f86405d85881cdc489b88a27332d256Roland McGrath 1021de328e684f86405d85881cdc489b88a27332d256Roland McGrathint 1022de328e684f86405d85881cdc489b88a27332d256Roland McGrathsys_timerfd_settime(struct tcb *tcp) 1023de328e684f86405d85881cdc489b88a27332d256Roland McGrath{ 1024de328e684f86405d85881cdc489b88a27332d256Roland McGrath if (entering(tcp)) { 10253138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 102660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 1027de328e684f86405d85881cdc489b88a27332d256Roland McGrath printflags(timerfdflags, tcp->u_arg[1], "TFD_???"); 102860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 1029de328e684f86405d85881cdc489b88a27332d256Roland McGrath printitv(tcp, tcp->u_arg[2]); 103060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 1031de328e684f86405d85881cdc489b88a27332d256Roland McGrath printitv(tcp, tcp->u_arg[3]); 1032de328e684f86405d85881cdc489b88a27332d256Roland McGrath } 1033de328e684f86405d85881cdc489b88a27332d256Roland McGrath return 0; 1034de328e684f86405d85881cdc489b88a27332d256Roland McGrath} 1035de328e684f86405d85881cdc489b88a27332d256Roland McGrath 1036de328e684f86405d85881cdc489b88a27332d256Roland McGrathint 1037de328e684f86405d85881cdc489b88a27332d256Roland McGrathsys_timerfd_gettime(struct tcb *tcp) 1038de328e684f86405d85881cdc489b88a27332d256Roland McGrath{ 1039de328e684f86405d85881cdc489b88a27332d256Roland McGrath if (entering(tcp)) { 10403138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 104160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 1042de328e684f86405d85881cdc489b88a27332d256Roland McGrath printitv(tcp, tcp->u_arg[1]); 1043de328e684f86405d85881cdc489b88a27332d256Roland McGrath } 1044de328e684f86405d85881cdc489b88a27332d256Roland McGrath return 0; 1045de328e684f86405d85881cdc489b88a27332d256Roland McGrath} 1046