time.c revision 3e3490acf776124a52c0315a113cb2e364d1bc40
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 822fb4db3e7aa1d6ac6b4b43f47597197492a846ddDenys Vlasenko || personality_wordsize[current_personality] == 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 1381d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko if (personality_wordsize[current_personality] == 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 25964acaa1193173c965ef32919aa5c092ce912d57cDenys Vlasenko * if syscall was interrupted. We print only its address 26064acaa1193173c965ef32919aa5c092ce912d57cDenys Vlasenko * on _success_, since kernel doesn't modify its value. 26164acaa1193173c965ef32919aa5c092ce912d57cDenys Vlasenko */ 26264acaa1193173c965ef32919aa5c092ce912d57cDenys Vlasenko if (is_restart_error(tcp) || !tcp->u_arg[1]) 26364acaa1193173c965ef32919aa5c092ce912d57cDenys Vlasenko /* Interrupted (or NULL) */ 2642e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin print_timespec(tcp, tcp->u_arg[1]); 2652e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin else 26664acaa1193173c965ef32919aa5c092ce912d57cDenys Vlasenko /* Success */ 2672e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin tprintf("%#lx", tcp->u_arg[1]); 2682e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin } 2692e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin return 0; 2702e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin} 2712e55ff4562e87f8361f0c1db5a42ee6e9ac0cc56Dmitry V. Levin 272d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat which[] = { 27376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { ITIMER_REAL, "ITIMER_REAL" }, 27476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { ITIMER_VIRTUAL,"ITIMER_VIRTUAL"}, 27576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { ITIMER_PROF, "ITIMER_PROF" }, 27676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman { 0, NULL }, 27776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman}; 27876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 27976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstatic void 2801cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levinprintitv_bitness(struct tcb *tcp, long addr, enum bitness_t bitness) 28176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 28276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (addr == 0) 28360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("NULL"); 28476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else if (!verbose(tcp)) 28576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", addr); 2861d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko else { 2871d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko int rc; 28876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 2891cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin if (bitness == BITNESS_32 2908470374cba7df0e70653d95c4f336a4082c68d82Denys Vlasenko#if SUPPORTED_PERSONALITIES > 1 2911cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin || personality_wordsize[current_personality] == 4 2921cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin#endif 2931cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin ) 2941cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin { 2951d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko struct { 2961cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin struct timeval32 it_interval, it_value; 2971cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin } itv; 2981cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin 2995d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko rc = umove(tcp, addr, &itv); 3005d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko if (rc >= 0) { 30160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{it_interval="); 3021cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin tprint_timeval32(tcp, &itv.it_interval); 30360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", it_value="); 3041cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin tprint_timeval32(tcp, &itv.it_value); 30560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 306e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath } 3071d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } else { 3081cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin struct itimerval itv; 3091cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin 3105d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko rc = umove(tcp, addr, &itv); 3115d64581e106f47c474707001f924ee15ef22830bDenys Vlasenko if (rc >= 0) { 31260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{it_interval="); 3131cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin tprint_timeval(tcp, &itv.it_interval); 31460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", it_value="); 3151cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin tprint_timeval(tcp, &itv.it_value); 31660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 317e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath } 3181cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin } 3191cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin if (rc < 0) 32060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 3211cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin } 322f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman} 3231cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin 3241cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin#define printitv(tcp, addr) \ 3251cad25dd44afc58a5345e704dcbe4ec0d57e58ebDmitry V. Levin printitv_bitness((tcp), (addr), BITNESS_CURRENT) 326f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 32776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 3281201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_getitimer(struct tcb *tcp) 32976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 33076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 33176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(which, tcp->u_arg[0], "ITIMER_???"); 33260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 33376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 33476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 33576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 33676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 33776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printitv(tcp, tcp->u_arg[1]); 33876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 33976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 34076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 34176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 342f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef ALPHA 343f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkermanint 3441201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_osf_getitimer(struct tcb *tcp) 345f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman{ 3461d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko if (entering(tcp)) { 3471d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printxval(which, tcp->u_arg[0], "ITIMER_???"); 34860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3491d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } else { 3501d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko if (syserror(tcp)) 3511d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("%#lx", tcp->u_arg[1]); 3521d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko else 3531d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printitv_bitness(tcp, tcp->u_arg[1], BITNESS_32); 3541d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } 3551d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko return 0; 356f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman} 357f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 358f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 35976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 3601201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_setitimer(struct tcb *tcp) 36176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 36276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 36376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printxval(which, tcp->u_arg[0], "ITIMER_???"); 36460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 36576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printitv(tcp, tcp->u_arg[1]); 36660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 36776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 36876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 36976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[2]); 37076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 37176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printitv(tcp, tcp->u_arg[2]); 37276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 37376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 37476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 37576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 376f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#ifdef ALPHA 377f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkermanint 3781201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_osf_setitimer(struct tcb *tcp) 379f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman{ 3801d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko if (entering(tcp)) { 3811d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printxval(which, tcp->u_arg[0], "ITIMER_???"); 38260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3831d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printitv_bitness(tcp, tcp->u_arg[1], BITNESS_32); 38460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 3851d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } else { 3861d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko if (syserror(tcp)) 3871d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko tprintf("%#lx", tcp->u_arg[2]); 3881d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko else 3891d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko printitv_bitness(tcp, tcp->u_arg[2], BITNESS_32); 3901d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko } 3911d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko return 0; 392f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman} 393f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman#endif 394f5eeabb156641482abd504fb98b039e1aae4ae87Wichert Akkerman 3951a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levinstatic const struct xlat adjtimex_modes[] = { 3963e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { 0, "0" }, 3971a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_OFFSET 3983e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { ADJ_OFFSET, "ADJ_OFFSET" }, 3991a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4001a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_FREQUENCY 4013e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { ADJ_FREQUENCY, "ADJ_FREQUENCY" }, 4021a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4031a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_MAXERROR 4043e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { ADJ_MAXERROR, "ADJ_MAXERROR" }, 4051a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4061a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_ESTERROR 4073e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { ADJ_ESTERROR, "ADJ_ESTERROR" }, 4081a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4091a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_STATUS 4103e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { ADJ_STATUS, "ADJ_STATUS" }, 4111a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4121a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_TIMECONST 4133e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { ADJ_TIMECONST, "ADJ_TIMECONST" }, 4141a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4151a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_TICK 4163e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { ADJ_TICK, "ADJ_TICK" }, 4171a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4181a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef ADJ_OFFSET_SINGLESHOT 4193e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { ADJ_OFFSET_SINGLESHOT, "ADJ_OFFSET_SINGLESHOT" }, 4201a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4213e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { 0, NULL } 4221a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin}; 4231a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin 4241a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levinstatic const struct xlat adjtimex_status[] = { 4251a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PLL 4263e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { STA_PLL, "STA_PLL" }, 4271a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4281a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PPSFREQ 4293e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { STA_PPSFREQ, "STA_PPSFREQ" }, 4301a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4311a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PPSTIME 4323e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { STA_PPSTIME, "STA_PPSTIME" }, 4331a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4341a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_FLL 4353e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { STA_FLL, "STA_FLL" }, 4361a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4371a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_INS 4383e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { STA_INS, "STA_INS" }, 4391a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4401a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_DEL 4413e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { STA_DEL, "STA_DEL" }, 4421a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4431a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_UNSYNC 4443e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { STA_UNSYNC, "STA_UNSYNC" }, 4451a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4461a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_FREQHOLD 4473e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { STA_FREQHOLD, "STA_FREQHOLD" }, 4481a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4491a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PPSSIGNAL 4503e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { STA_PPSSIGNAL, "STA_PPSSIGNAL" }, 4511a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4521a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PPSJITTER 4533e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { STA_PPSJITTER, "STA_PPSJITTER" }, 4541a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4551a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PPSWANDER 4563e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { STA_PPSWANDER, "STA_PPSWANDER" }, 4571a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4581a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_PPSERROR 4593e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { STA_PPSERROR, "STA_PPSERROR" }, 4601a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4611a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef STA_CLOCKERR 4623e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { STA_CLOCKERR, "STA_CLOCKERR" }, 4631a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4643e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { 0, NULL } 4651a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin}; 4661a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin 4671a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levinstatic const struct xlat adjtimex_state[] = { 4681a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef TIME_OK 4693e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { TIME_OK, "TIME_OK" }, 4701a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4711a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef TIME_INS 4723e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { TIME_INS, "TIME_INS" }, 4731a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4741a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef TIME_DEL 4753e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { TIME_DEL, "TIME_DEL" }, 4761a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4771a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef TIME_OOP 4783e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { TIME_OOP, "TIME_OOP" }, 4791a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4801a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef TIME_WAIT 4813e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { TIME_WAIT, "TIME_WAIT" }, 4821a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4831a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#ifdef TIME_ERROR 4843e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { TIME_ERROR, "TIME_ERROR" }, 4851a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin#endif 4863e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { 0, NULL } 4871a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin}; 4881a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin 489165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 490165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levinstatic int 491165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levintprint_timex32(struct tcb *tcp, long addr) 492165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin{ 4931d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko struct { 494165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin unsigned int modes; 495165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int offset; 496165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int freq; 497165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int maxerror; 498165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int esterror; 499165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int status; 500165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int constant; 501165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int precision; 502165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int tolerance; 503165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin struct timeval32 time; 504165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int tick; 505165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int ppsfreq; 506165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int jitter; 507165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int shift; 508165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int stabil; 509165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int jitcnt; 510165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int calcnt; 511165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int errcnt; 512165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin int stbcnt; 513165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin } tx; 514165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin 515165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin if (umove(tcp, addr, &tx) < 0) 516165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin return -1; 517165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin 51860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{modes="); 51971d7089055b0ce830bf13d9322f06b87d6ce47c0Dmitry V. Levin printflags(adjtimex_modes, tx.modes, "ADJ_???"); 520165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", offset=%d, freq=%d, maxerror=%d, ", 521165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.offset, tx.freq, tx.maxerror); 522165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf("esterror=%u, status=", tx.esterror); 523165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin printflags(adjtimex_status, tx.status, "STA_???"); 524165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", constant=%d, precision=%u, ", 525165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.constant, tx.precision); 526165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf("tolerance=%d, time=", tx.tolerance); 527165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprint_timeval32(tcp, &tx.time); 528165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", tick=%d, ppsfreq=%d, jitter=%d", 529165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.tick, tx.ppsfreq, tx.jitter); 530165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", shift=%d, stabil=%d, jitcnt=%d", 531165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.shift, tx.stabil, tx.jitcnt); 532165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", calcnt=%d, errcnt=%d, stbcnt=%d", 533165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.calcnt, tx.errcnt, tx.stbcnt); 53460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 535165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin return 0; 536165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin} 537165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#endif /* SUPPORTED_PERSONALITIES > 1 */ 538165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin 539165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levinstatic int 540165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levintprint_timex(struct tcb *tcp, long addr) 54176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 5421a684d6ebee655035b06facee28c83f94c7dfbb9Dmitry V. Levin struct timex tx; 54376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 544165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 545165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin if (personality_wordsize[current_personality] == 4) 546165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin return tprint_timex32(tcp, addr); 547165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#endif 548165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin if (umove(tcp, addr, &tx) < 0) 549165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin return -1; 550165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin 551165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#if LINUX_VERSION_CODE < 66332 552165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf("{mode=%d, offset=%ld, frequency=%ld, ", 553165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.mode, tx.offset, tx.frequency); 554165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf("maxerror=%ld, esterror=%lu, status=%u, ", 555165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.maxerror, tx.esterror, tx.status); 556165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf("time_constant=%ld, precision=%lu, ", 557165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tx.time_constant, tx.precision); 558165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf("tolerance=%ld, time=", tx.tolerance); 559165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprint_timeval(tcp, &tx.time); 560165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#else 56160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{modes="); 56271d7089055b0ce830bf13d9322f06b87d6ce47c0Dmitry V. Levin printflags(adjtimex_modes, tx.modes, "ADJ_???"); 563165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", offset=%ld, freq=%ld, maxerror=%ld, ", 5640b315b65432cda20c7e5608c5124289036522fa7H.J. Lu (long) tx.offset, (long) tx.freq, (long) tx.maxerror); 5650b315b65432cda20c7e5608c5124289036522fa7H.J. Lu tprintf("esterror=%lu, status=", (long) tx.esterror); 566165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin printflags(adjtimex_status, tx.status, "STA_???"); 567165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", constant=%ld, precision=%lu, ", 5680b315b65432cda20c7e5608c5124289036522fa7H.J. Lu (long) tx.constant, (long) tx.precision); 5690b315b65432cda20c7e5608c5124289036522fa7H.J. Lu tprintf("tolerance=%ld, time=", (long) tx.tolerance); 570165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprint_timeval(tcp, &tx.time); 571165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", tick=%ld, ppsfreq=%ld, jitter=%ld", 5720b315b65432cda20c7e5608c5124289036522fa7H.J. Lu (long) tx.tick, (long) tx.ppsfreq, (long) tx.jitter); 573165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", shift=%d, stabil=%ld, jitcnt=%ld", 5740b315b65432cda20c7e5608c5124289036522fa7H.J. Lu tx.shift, (long) tx.stabil, (long) tx.jitcnt); 575165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin tprintf(", calcnt=%ld, errcnt=%ld, stbcnt=%ld", 5760b315b65432cda20c7e5608c5124289036522fa7H.J. Lu (long) tx.calcnt, (long) tx.errcnt, (long) tx.stbcnt); 577165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin#endif 57860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 579165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin return 0; 580165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin} 581165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin 58273215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levinstatic int 58373215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levindo_adjtimex(struct tcb *tcp, long addr) 58473215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin{ 58573215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin if (addr == 0) 58673215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin tprints("NULL"); 58773215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin else if (syserror(tcp) || !verbose(tcp)) 58873215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin tprintf("%#lx", addr); 58973215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin else if (tprint_timex(tcp, addr) < 0) 59073215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin tprints("{...}"); 59173215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin if (syserror(tcp)) 59273215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin return 0; 59373215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin tcp->auxstr = xlookup(adjtimex_state, tcp->u_rval); 59473215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin if (tcp->auxstr) 59573215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin return RVAL_STR; 59673215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin return 0; 59773215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin} 59873215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin 599165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levinint 600165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levinsys_adjtimex(struct tcb *tcp) 601165b15dbe8ca39334dd7059883c955829c95ac70Dmitry V. Levin{ 60273215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin if (exiting(tcp)) 60373215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin return do_adjtimex(tcp, tcp->u_arg[0]); 60476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 60576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 6061e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 607d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat clockflags[] = { 6083e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { TIMER_ABSTIME, "TIMER_ABSTIME" }, 6093e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { 0, NULL } 6101e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath}; 6111e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 612d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat clocknames[] = { 61355a00f8092d9596a4ca619017bfba0dea2e085d1Roland McGrath#ifdef CLOCK_REALTIME 6143e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { CLOCK_REALTIME, "CLOCK_REALTIME" }, 61555a00f8092d9596a4ca619017bfba0dea2e085d1Roland McGrath#endif 61655a00f8092d9596a4ca619017bfba0dea2e085d1Roland McGrath#ifdef CLOCK_MONOTONIC 6173e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { CLOCK_MONOTONIC, "CLOCK_MONOTONIC" }, 61855a00f8092d9596a4ca619017bfba0dea2e085d1Roland McGrath#endif 619cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#ifdef CLOCK_PROCESS_CPUTIME_ID 6203e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID" }, 621cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#endif 622cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#ifdef CLOCK_THREAD_CPUTIME_ID 6233e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { CLOCK_THREAD_CPUTIME_ID, "CLOCK_THREAD_CPUTIME_ID" }, 624cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#endif 625cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#ifdef CLOCK_MONOTONIC_RAW 6263e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { CLOCK_MONOTONIC_RAW, "CLOCK_MONOTONIC_RAW" }, 627cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#endif 628cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#ifdef CLOCK_REALTIME_COARSE 6293e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { CLOCK_REALTIME_COARSE, "CLOCK_REALTIME_COARSE" }, 630cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#endif 631cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#ifdef CLOCK_MONOTONIC_COARSE 6323e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { CLOCK_MONOTONIC_COARSE, "CLOCK_MONOTONIC_COARSE" }, 633cbaaf799115b2354b0db69013324f4c9ada9afcdDmitry V. Levin#endif 6343e3490acf776124a52c0315a113cb2e364d1bc40Denys Vlasenko { 0, NULL } 63554a4edd69a320542ddd0dffec05dacab7443d453Roland McGrath}; 63654a4edd69a320542ddd0dffec05dacab7443d453Roland McGrath 6371e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathint 6381201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_clock_settime(struct tcb *tcp) 6391e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 6401e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (entering(tcp)) { 64154a4edd69a320542ddd0dffec05dacab7443d453Roland McGrath printxval(clocknames, tcp->u_arg[0], "CLOCK_???"); 64260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 6431e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printtv(tcp, tcp->u_arg[1]); 6441e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 6451e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath return 0; 6461e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 6471e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 6481e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathint 6491201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_clock_gettime(struct tcb *tcp) 6501e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 6511e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (entering(tcp)) { 65254a4edd69a320542ddd0dffec05dacab7443d453Roland McGrath printxval(clocknames, tcp->u_arg[0], "CLOCK_???"); 65360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 6541e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } else { 6551e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (syserror(tcp)) 6561e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx", tcp->u_arg[1]); 6571e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath else 6581e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printtv(tcp, tcp->u_arg[1]); 6591e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 6601e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath return 0; 6611e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 6621e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 6631e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathint 6641201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_clock_nanosleep(struct tcb *tcp) 6651e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 6661e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (entering(tcp)) { 66754a4edd69a320542ddd0dffec05dacab7443d453Roland McGrath printxval(clocknames, tcp->u_arg[0], "CLOCK_???"); 66860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 669b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(clockflags, tcp->u_arg[1], "TIMER_???"); 67060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 6711e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printtv(tcp, tcp->u_arg[2]); 67260fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 6731e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } else { 6741e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (syserror(tcp)) 6751e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx", tcp->u_arg[3]); 6761e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath else 6771e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printtv(tcp, tcp->u_arg[3]); 6781e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 6791e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath return 0; 6801e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 6811e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 68273215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levinint 68373215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levinsys_clock_adjtime(struct tcb *tcp) 68473215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin{ 68573215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin if (exiting(tcp)) 68673215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin return do_adjtimex(tcp, tcp->u_arg[1]); 68773215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin printxval(clocknames, tcp->u_arg[0], "CLOCK_???"); 68873215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin tprints(", "); 68973215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin return 0; 69073215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin} 69173215473cea2bc53a520b5285775be84501b1f2dDmitry V. Levin 6921e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath#ifndef SIGEV_THREAD_ID 6931e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath# define SIGEV_THREAD_ID 4 6941e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath#endif 695d9f816f60457930af27349fac3d23b3b78338036Roland McGrathstatic const struct xlat sigev_value[] = { 6961e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath { SIGEV_SIGNAL+1, "SIGEV_SIGNAL" }, 6971e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath { SIGEV_NONE+1, "SIGEV_NONE" }, 6981e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath { SIGEV_THREAD+1, "SIGEV_THREAD" }, 6991e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath { SIGEV_THREAD_ID+1, "SIGEV_THREAD_ID" }, 7001e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath { 0, NULL } 7011e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath}; 7021e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 703d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 704d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levinstatic void 705d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levinprintsigevent32(struct tcb *tcp, long arg) 706d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin{ 7071d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko struct { 708d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin int sigev_value; 709d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin int sigev_signo; 710d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin int sigev_notify; 711d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin 7121d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko union { 713d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin int tid; 7141d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko struct { 715d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin int function, attribute; 716d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin } thread; 717d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin } un; 718d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin } sev; 719d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin 720d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin if (umove(tcp, arg, &sev) < 0) 72160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 7221d632468c09756d3382d1a92f99a8413636e75d3Denys Vlasenko else { 723d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin tprintf("{%#x, ", sev.sigev_value); 724d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin if (sev.sigev_notify == SIGEV_SIGNAL) 725d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin tprintf("%s, ", signame(sev.sigev_signo)); 726d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin else 727d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin tprintf("%u, ", sev.sigev_signo); 728d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin printxval(sigev_value, sev.sigev_notify + 1, "SIGEV_???"); 72960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 730d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin if (sev.sigev_notify == SIGEV_THREAD_ID) 731d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin tprintf("{%d}", sev.un.tid); 732d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin else if (sev.sigev_notify == SIGEV_THREAD) 733d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin tprintf("{%#x, %#x}", 734d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin sev.un.thread.function, 735d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin sev.un.thread.attribute); 736d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin else 73760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 73860fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 739d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin } 740d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin} 741d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin#endif 742d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin 7431e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathvoid 744d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levinprintsigevent(struct tcb *tcp, long arg) 7451e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 7461e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath struct sigevent sev; 747d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin 748d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin#if SUPPORTED_PERSONALITIES > 1 7497b609d5ba0852e6c56ba311350ebd4412361777bDenys Vlasenko if (personality_wordsize[current_personality] == 4) { 750d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin printsigevent32(tcp, arg); 751d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin return; 752d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin } 753d3cb392f8520cb1a6a3d6c93febe2a2424560574Dmitry V. Levin#endif 754b63256e69bf3f1a74aadb0e14556490bc8f4ef95Denys Vlasenko if (umove(tcp, arg, &sev) < 0) 75560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 7561e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath else { 757675d4a6dba13915527309c962c38f5f961ec2996Roland McGrath tprintf("{%p, ", sev.sigev_value.sival_ptr); 758675d4a6dba13915527309c962c38f5f961ec2996Roland McGrath if (sev.sigev_notify == SIGEV_SIGNAL) 759675d4a6dba13915527309c962c38f5f961ec2996Roland McGrath tprintf("%s, ", signame(sev.sigev_signo)); 760675d4a6dba13915527309c962c38f5f961ec2996Roland McGrath else 761675d4a6dba13915527309c962c38f5f961ec2996Roland McGrath tprintf("%u, ", sev.sigev_signo); 7621e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printxval(sigev_value, sev.sigev_notify+1, "SIGEV_???"); 76360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 7641e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (sev.sigev_notify == SIGEV_THREAD_ID) 7651e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath /* _pad[0] is the _tid field which might not be 7661e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath present in the userlevel definition of the 7671e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath struct. */ 7681e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("{%d}", sev._sigev_un._pad[0]); 769d4c85ebbc64b1eb141b310a4634c6ca37fd352c1Roland McGrath else if (sev.sigev_notify == SIGEV_THREAD) 770d4c85ebbc64b1eb141b310a4634c6ca37fd352c1Roland McGrath tprintf("{%p, %p}", sev.sigev_notify_function, 771d4c85ebbc64b1eb141b310a4634c6ca37fd352c1Roland McGrath sev.sigev_notify_attributes); 7721e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath else 77360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("{...}"); 77460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 7751e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 7761e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 7771e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 7781e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathint 7791201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_timer_create(struct tcb *tcp) 7801e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 7811e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (entering(tcp)) { 782675d4a6dba13915527309c962c38f5f961ec2996Roland McGrath printxval(clocknames, tcp->u_arg[0], "CLOCK_???"); 78360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 7841e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printsigevent(tcp, tcp->u_arg[1]); 78560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 7861e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } else { 787732f39656d933c6112a0586bbefcf8288d57bda4Andi Kleen int timer_id; 788ac518d10777f9dd95aad22939da6c867cf4c193eDmitry V. Levin 789732f39656d933c6112a0586bbefcf8288d57bda4Andi Kleen if (syserror(tcp) || umove(tcp, tcp->u_arg[2], &timer_id) < 0) 7901e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx", tcp->u_arg[2]); 791ac518d10777f9dd95aad22939da6c867cf4c193eDmitry V. Levin else 792732f39656d933c6112a0586bbefcf8288d57bda4Andi Kleen tprintf("{%d}", timer_id); 7931e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 7941e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath return 0; 7951e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 7961e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 7971e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathint 7981201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_timer_settime(struct tcb *tcp) 7991e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 8001e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (entering(tcp)) { 8011e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx, ", tcp->u_arg[0]); 802b2dee13345a62c80a677f3342cd525d611fbc632Roland McGrath printflags(clockflags, tcp->u_arg[1], "TIMER_???"); 80360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 8041e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printitv(tcp, tcp->u_arg[2]); 80560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 8061e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } else { 8071e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (syserror(tcp)) 8081e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx", tcp->u_arg[3]); 8091e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath else 8101e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printitv(tcp, tcp->u_arg[3]); 8111e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 8121e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath return 0; 8131e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 8141e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath 8151e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrathint 8161201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_timer_gettime(struct tcb *tcp) 8171e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath{ 8181e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (entering(tcp)) { 8191e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx, ", tcp->u_arg[0]); 8201e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } else { 8211e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath if (syserror(tcp)) 8221e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath tprintf("%#lx", tcp->u_arg[1]); 8231e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath else 8241e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath printitv(tcp, tcp->u_arg[1]); 8251e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath } 8261e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath return 0; 8271e35679bbb8c840bd0b107c68cb187feeb3e3282Roland McGrath} 828d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath 829d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrathstatic void 8301201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkoprint_rtc(struct tcb *tcp, const struct rtc_time *rt) 831d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath{ 832d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf("{tm_sec=%d, tm_min=%d, tm_hour=%d, " 833d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath "tm_mday=%d, tm_mon=%d, tm_year=%d, ", 834d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath rt->tm_sec, rt->tm_min, rt->tm_hour, 835d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath rt->tm_mday, rt->tm_mon, rt->tm_year); 836d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (!abbrev(tcp)) 837d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf("tm_wday=%d, tm_yday=%d, tm_isdst=%d}", 838d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath rt->tm_wday, rt->tm_yday, rt->tm_isdst); 839d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath else 84060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("...}"); 841d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath} 842d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath 843d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrathint 8441201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkortc_ioctl(struct tcb *tcp, long code, long arg) 845d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath{ 846d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath switch (code) { 847d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_ALM_SET: 848d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_SET_TIME: 849d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (entering(tcp)) { 850d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath struct rtc_time rt; 851d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (umove(tcp, arg, &rt) < 0) 852d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %#lx", arg); 853d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath else { 85460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 855d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath print_rtc(tcp, &rt); 856d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 857d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 858d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 859d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_ALM_READ: 860d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_RD_TIME: 861d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (exiting(tcp)) { 862d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath struct rtc_time rt; 863d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (syserror(tcp) || umove(tcp, arg, &rt) < 0) 864d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %#lx", arg); 865d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath else { 86660fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 867d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath print_rtc(tcp, &rt); 868d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 869d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 870d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 871d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_IRQP_SET: 872d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_EPOCH_SET: 873d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (entering(tcp)) 874d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %lu", arg); 875d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 876d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_IRQP_READ: 877d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_EPOCH_READ: 878d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (exiting(tcp)) 879d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %lu", arg); 880d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 881d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_WKALM_SET: 882d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (entering(tcp)) { 883d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath struct rtc_wkalrm wk; 884d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (umove(tcp, arg, &wk) < 0) 885d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %#lx", arg); 886d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath else { 887d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", {enabled=%d, pending=%d, ", 888d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath wk.enabled, wk.pending); 889d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath print_rtc(tcp, &wk.time); 89060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 891d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 892d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 893d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 894d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath case RTC_WKALM_RD: 895d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (exiting(tcp)) { 896d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath struct rtc_wkalrm wk; 897d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (syserror(tcp) || umove(tcp, arg, &wk) < 0) 898d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %#lx", arg); 899d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath else { 900d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", {enabled=%d, pending=%d, ", 901d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath wk.enabled, wk.pending); 902d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath print_rtc(tcp, &wk.time); 90360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints("}"); 904d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 905d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 906d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 907d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath default: 908d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath if (entering(tcp)) 909d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath tprintf(", %#lx", arg); 910d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath break; 911d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath } 912d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath return 1; 913d83c50b8e44db2a2e19d048ab7d1e1caf1fa1996Roland McGrath} 914e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath 915e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath#ifndef TFD_TIMER_ABSTIME 916e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath#define TFD_TIMER_ABSTIME (1 << 0) 917e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath#endif 918e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath 919e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrathstatic const struct xlat timerfdflags[] = { 920e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath { TFD_TIMER_ABSTIME, "TFD_TIMER_ABSTIME" }, 921e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath { 0, NULL } 922e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath}; 923e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath 924e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrathint 9251201426dd43f5b4e12dfe520e2a9c5027d33dc11Denys Vlasenkosys_timerfd(struct tcb *tcp) 926e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath{ 927e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath if (entering(tcp)) { 928e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath /* It does not matter that the kernel uses itimerspec. */ 929e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath tprintf("%ld, ", tcp->u_arg[0]); 930e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath printxval(clocknames, tcp->u_arg[1], "CLOCK_???"); 93160fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 932e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath printflags(timerfdflags, tcp->u_arg[2], "TFD_???"); 93360fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 934e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath printitv(tcp, tcp->u_arg[3]); 935e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath } 936e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath return 0; 937e46623403567c7dab387c8a9c6e40ae891c6ab21Roland McGrath} 938de328e684f86405d85881cdc489b88a27332d256Roland McGrath 939de328e684f86405d85881cdc489b88a27332d256Roland McGrathint 940de328e684f86405d85881cdc489b88a27332d256Roland McGrathsys_timerfd_create(struct tcb *tcp) 941de328e684f86405d85881cdc489b88a27332d256Roland McGrath{ 942de328e684f86405d85881cdc489b88a27332d256Roland McGrath if (entering(tcp)) { 943de328e684f86405d85881cdc489b88a27332d256Roland McGrath printxval(clocknames, tcp->u_arg[0], "CLOCK_???"); 94460fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 945de328e684f86405d85881cdc489b88a27332d256Roland McGrath printflags(timerfdflags, tcp->u_arg[1], "TFD_???"); 946de328e684f86405d85881cdc489b88a27332d256Roland McGrath } 947de328e684f86405d85881cdc489b88a27332d256Roland McGrath return 0; 948de328e684f86405d85881cdc489b88a27332d256Roland McGrath} 949de328e684f86405d85881cdc489b88a27332d256Roland McGrath 950de328e684f86405d85881cdc489b88a27332d256Roland McGrathint 951de328e684f86405d85881cdc489b88a27332d256Roland McGrathsys_timerfd_settime(struct tcb *tcp) 952de328e684f86405d85881cdc489b88a27332d256Roland McGrath{ 953de328e684f86405d85881cdc489b88a27332d256Roland McGrath if (entering(tcp)) { 9543138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 95560fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 956de328e684f86405d85881cdc489b88a27332d256Roland McGrath printflags(timerfdflags, tcp->u_arg[1], "TFD_???"); 95760fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 958de328e684f86405d85881cdc489b88a27332d256Roland McGrath printitv(tcp, tcp->u_arg[2]); 95960fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 960de328e684f86405d85881cdc489b88a27332d256Roland McGrath printitv(tcp, tcp->u_arg[3]); 961de328e684f86405d85881cdc489b88a27332d256Roland McGrath } 962de328e684f86405d85881cdc489b88a27332d256Roland McGrath return 0; 963de328e684f86405d85881cdc489b88a27332d256Roland McGrath} 964de328e684f86405d85881cdc489b88a27332d256Roland McGrath 965de328e684f86405d85881cdc489b88a27332d256Roland McGrathint 966de328e684f86405d85881cdc489b88a27332d256Roland McGrathsys_timerfd_gettime(struct tcb *tcp) 967de328e684f86405d85881cdc489b88a27332d256Roland McGrath{ 968de328e684f86405d85881cdc489b88a27332d256Roland McGrath if (entering(tcp)) { 9693138213bc9a827a372ad9f8009ebcc5d8797ce2dDmitry V. Levin printfd(tcp, tcp->u_arg[0]); 97060fe8c139c6f2febefe595781812ddf0864a6ab8Denys Vlasenko tprints(", "); 971de328e684f86405d85881cdc489b88a27332d256Roland McGrath printitv(tcp, tcp->u_arg[1]); 972de328e684f86405d85881cdc489b88a27332d256Roland McGrath } 973de328e684f86405d85881cdc489b88a27332d256Roland McGrath return 0; 974de328e684f86405d85881cdc489b88a27332d256Roland McGrath} 975