Before this patch: 27192 rt_sigtimedwait([HUP INT QUIT TERM TSTP TTIN TTOU], 0x8cb4594) = -1 EAGAIN (Resource temporarily unavailable) ^^^^^^^^^ wrong (must be 0)! also, rest is not decoded 27192 rt_sigtimedwait([HUP INT QUIT TERM TSTP TTIN TTOU], 0x8cb4594) = -1 EAGAIN (Resource temporarily unavailable) 27192 rt_sigtimedwait([HUP INT QUIT TERM TSTP TTIN TTOU], 0, 0x80ed85c, 8) = 2 ^^^^^^^^^ timespec is not decoded 27192 rt_sigtimedwait([HUP INT QUIT TERM TSTP TTIN TTOU], 0x8cb4594) = -1 EAGAIN (Resource temporarily unavailable) 27192 rt_sigtimedwait([HUP INT QUIT TERM TSTP TTIN TTOU], 0x8cb4594) = -1 EAGAIN (Resource temporarily unavailable)
After: rt_sigtimedwait([HUP INT QUIT TERM TSTP TTIN TTOU], NULL, {0, 0}, 8) = -1 EAGAIN (Resource temporarily unavailable) rt_sigtimedwait([HUP INT QUIT TERM TSTP TTIN TTOU], NULL, {0, 0}, 8) = -1 EAGAIN (Resource temporarily unavailable) rt_sigtimedwait([HUP INT QUIT TERM TSTP TTIN TTOU], NULL, {0, 0}, 8) = 2 rt_sigtimedwait([HUP INT QUIT TERM TSTP TTIN TTOU], NULL, {0, 0}, 8) = -1 EAGAIN (Resource temporarily unavailable) rt_sigtimedwait([HUP INT QUIT TERM TSTP TTIN TTOU], NULL, {0, 0}, 8) = -1 EAGAIN (Resource temporarily unavailable) Changelog: * signal.c (sys_rt_sigtimedwait): Fix siginfo display, show timespec and sigset length too. -- vda diff -d -urpN strace.4/signal.c strace.5/signal.c --- strace.4/signal.c 2009-03-31 17:29:09.000000000 +0200 +++ strace.5/signal.c 2009-03-31 17:29:16.000000000 +0200 @@ -2032,21 +2032,32 @@ int sys_rt_sigtimedwait(struct tcb *tcp) else printsigmask(&sigset, 1); tprintf(", "); + /* This is the only "return" parameter, */ + if (tcp->u_arg[1] != 0) + return 0; + /* ... if it's NULL, can decode all on entry */ + tprintf("NULL, "); } - else { + else if (tcp->u_arg[1] != 0) { + /* syscall exit, and u_arg[1] wasn't NULL */ if (syserror(tcp)) - tprintf("%#lx", tcp->u_arg[0]); + tprintf("%#lx, ", tcp->u_arg[1]); else { siginfo_t si; if (umove(tcp, tcp->u_arg[1], &si) < 0) - tprintf("%#lx", tcp->u_arg[1]); - else + tprintf("%#lx, ", tcp->u_arg[1]); + else { printsiginfo(&si, verbose(tcp)); - /* XXX For now */ - tprintf(", %#lx", tcp->u_arg[2]); - tprintf(", %d", (int) tcp->u_arg[3]); + tprintf(", "); + } } } + else { + /* syscall exit, and u_arg[1] was NULL */ + return 0; + } + print_timespec(tcp, tcp->u_arg[2]); + tprintf(", %d", (int) tcp->u_arg[3]); return 0; }; ------------------------------------------------------------------------------ _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel