summaryrefslogtreecommitdiff
path: root/stream.c
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2013-07-18 17:02:21 +0200
committerDenys Vlasenko <dvlasenk@redhat.com>2013-07-18 17:31:42 +0200
commit5e133aa68498626afdbdcf29e22300257a21bf57 (patch)
treed260f4a986bcf5a22c18dc53536366fcf2946b82 /stream.c
parent80b73a24a9c94e2a76dc8e6b49160e6792cfc3d3 (diff)
downloadstrace-5e133aa68498626afdbdcf29e22300257a21bf57.tar.gz
strace-5e133aa68498626afdbdcf29e22300257a21bf57.tar.bz2
strace-5e133aa68498626afdbdcf29e22300257a21bf57.tar.xz
Fix sigset printing via print_sigset().
Replace print_sigset() with print_sigset_addr_len(), which takes not only addr, but also len parameter. This allows us to drop "do we need to print RT signals?" parameter, and this fixes RT signals printing in many syscalls. sys_epoll_pwait: print RT signals too, print sigmask size argument. sys_sigprocmask: print_sigset -> print_sigset_addr_len(current_wordsize), no change in functionality. sys_sigpending: use print_sigset_addr_len(current_wordsize) instead of open-coding it. sys_rt_sigprocmask: use print_sigset_addr_len instead of open-coding it. sys_rt_sigpending: ditto. sys_rt_sigsuspend: ditto. sys_rt_sigtimedwait: ditto. do_signalfd: print_sigset -> print_sigset_addr_len. This fixes RT signals printing (wasn't showing them before). sys_ppoll: ditto. copy_sigset_len() is folded into its only user, print_sigset_addr_len(), and copy_sigset() is gone. While at it, checked kernel sources and noted where kernel enforces sigset_size == NSIG / 8 (== sizeof(kernel_sigset_t)), and where it allows word-sized sigset_size ([rt_]sigpending). Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'stream.c')
-rw-r--r--stream.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/stream.c b/stream.c
index 8c90838..18a8ca9 100644
--- a/stream.c
+++ b/stream.c
@@ -422,7 +422,8 @@ sys_ppoll(struct tcb *tcp)
if (entering(tcp)) {
print_timespec(tcp, tcp->u_arg[2]);
tprints(", ");
- print_sigset(tcp, tcp->u_arg[3], 0);
+ /* NB: kernel requires arg[4] == NSIG / 8 */
+ print_sigset_addr_len(tcp, tcp->u_arg[3], tcp->u_arg[4]);
tprintf(", %lu", tcp->u_arg[4]);
}
return rc;