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

Reply via email to