This is done similar to timer_settime syscall parser. * time.c (SYS_FUNC(timerfd_settime)): retrieve old_value argument on exiting and not on entering. Return 0 instead of RVAL_DECODED (since call hasn't been decoded in full on entering). --- time.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/time.c b/time.c index 963d0ea..b32eddf 100644 --- a/time.c +++ b/time.c @@ -314,15 +314,17 @@ SYS_FUNC(timerfd_create) SYS_FUNC(timerfd_settime) { - printfd(tcp, tcp->u_arg[0]); - tprints(", "); - printflags(timerfdflags, tcp->u_arg[1], "TFD_???"); - tprints(", "); - print_itimerspec(tcp, tcp->u_arg[2]); - tprints(", "); - print_itimerspec(tcp, tcp->u_arg[3]); - - return RVAL_DECODED; + if (entering(tcp)) { + printfd(tcp, tcp->u_arg[0]); + tprints(", "); + printflags(timerfdflags, tcp->u_arg[1], "TFD_???"); + tprints(", "); + print_itimerspec(tcp, tcp->u_arg[2]); + tprints(", "); + } else { + print_itimerspec(tcp, tcp->u_arg[3]); + } + return 0; } SYS_FUNC(timerfd_gettime) -- 1.7.10.4 ------------------------------------------------------------------------------ _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel