summaryrefslogtreecommitdiff
path: root/time.c
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2012-03-11 21:25:51 +0000
committerDmitry V. Levin <ldv@altlinux.org>2012-03-11 21:25:51 +0000
commit73215473cea2bc53a520b5285775be84501b1f2d (patch)
tree8e6c146f2282760fa7d6f7219d058a842ebf0a2c /time.c
parent51dba35d387153c8a2310b92296ba30518df4f88 (diff)
downloadstrace-73215473cea2bc53a520b5285775be84501b1f2d.tar.gz
strace-73215473cea2bc53a520b5285775be84501b1f2d.tar.bz2
strace-73215473cea2bc53a520b5285775be84501b1f2d.tar.xz
Implement clock_adjtime syscall decoder
* linux/dummy.h (sys_clock_adjtime): Remove. * linux/syscall.h (sys_clock_adjtime): New prototype. * time.c (do_adjtimex): New function, based on sys_adjtimex. (sys_adjtimex): Use it. (sys_clock_adjtime): New function.
Diffstat (limited to 'time.c')
-rw-r--r--time.c42
1 files changed, 29 insertions, 13 deletions
diff --git a/time.c b/time.c
index 066cf40..5662455 100644
--- a/time.c
+++ b/time.c
@@ -582,22 +582,28 @@ tprint_timex(struct tcb *tcp, long addr)
return 0;
}
+static int
+do_adjtimex(struct tcb *tcp, long addr)
+{
+ if (addr == 0)
+ tprints("NULL");
+ else if (syserror(tcp) || !verbose(tcp))
+ tprintf("%#lx", addr);
+ else if (tprint_timex(tcp, addr) < 0)
+ tprints("{...}");
+ if (syserror(tcp))
+ return 0;
+ tcp->auxstr = xlookup(adjtimex_state, tcp->u_rval);
+ if (tcp->auxstr)
+ return RVAL_STR;
+ return 0;
+}
+
int
sys_adjtimex(struct tcb *tcp)
{
- if (exiting(tcp)) {
- if (tcp->u_arg[0] == 0)
- tprints("NULL");
- else if (syserror(tcp) || !verbose(tcp))
- tprintf("%#lx", tcp->u_arg[0]);
- else if (tprint_timex(tcp, tcp->u_arg[0]) < 0)
- tprints("{...}");
- if (syserror(tcp))
- return 0;
- tcp->auxstr = xlookup(adjtimex_state, tcp->u_rval);
- if (tcp->auxstr)
- return RVAL_STR;
- }
+ if (exiting(tcp))
+ return do_adjtimex(tcp, tcp->u_arg[0]);
return 0;
}
@@ -676,6 +682,16 @@ sys_clock_nanosleep(struct tcb *tcp)
return 0;
}
+int
+sys_clock_adjtime(struct tcb *tcp)
+{
+ if (exiting(tcp))
+ return do_adjtimex(tcp, tcp->u_arg[1]);
+ printxval(clocknames, tcp->u_arg[0], "CLOCK_???");
+ tprints(", ");
+ return 0;
+}
+
#ifndef SIGEV_THREAD_ID
# define SIGEV_THREAD_ID 4
#endif