+
+#ifndef TFD_TIMER_ABSTIME
+#define TFD_TIMER_ABSTIME (1 << 0)
+#endif
+
+static const struct xlat timerfdflags[] = {
+ { TFD_TIMER_ABSTIME, "TFD_TIMER_ABSTIME" },
+ { 0, NULL }
+};
+
+int
+sys_timerfd(tcp)
+struct tcb *tcp;
+{
+ if (entering(tcp)) {
+ /* It does not matter that the kernel uses itimerspec. */
+ tprintf("%ld, ", tcp->u_arg[0]);
+ printxval(clocknames, tcp->u_arg[1], "CLOCK_???");
+ tprintf(", ");
+ printflags(timerfdflags, tcp->u_arg[2], "TFD_???");
+ tprintf(", ");
+ printitv(tcp, tcp->u_arg[3]);
+ }
+ return 0;
+}
+
+int
+sys_timerfd_create(struct tcb *tcp)
+{
+ if (entering(tcp)) {
+ printxval(clocknames, tcp->u_arg[0], "CLOCK_???");
+ tprintf(", ");
+ printflags(timerfdflags, tcp->u_arg[1], "TFD_???");
+ }
+ return 0;
+}
+
+int
+sys_timerfd_settime(struct tcb *tcp)
+{
+ if (entering(tcp)) {
+ printfd(tcp, tcp->u_arg[0]);
+ tprintf(", ");
+ printflags(timerfdflags, tcp->u_arg[1], "TFD_???");
+ tprintf(", ");
+ printitv(tcp, tcp->u_arg[2]);
+ tprintf(", ");
+ printitv(tcp, tcp->u_arg[3]);
+ }
+ return 0;
+}
+
+int
+sys_timerfd_gettime(struct tcb *tcp)
+{
+ if (entering(tcp)) {
+ printfd(tcp, tcp->u_arg[0]);
+ tprintf(", ");
+ printitv(tcp, tcp->u_arg[1]);
+ }
+ return 0;
+}
+