if (!umove_or_printaddr(tcp, addr, &si))
printsiginfo(&si, verbose(tcp));
}
+
+static bool
+print_siginfo_t(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data)
+{
+ const siginfo_t *si = elem_buf;
+
+ printsiginfo(si, verbose(tcp));
+
+ return true;
+}
+
+MPERS_PRINTER_DECL(void, print_siginfo_array)(struct tcb *tcp, unsigned long addr, unsigned long len)
+{
+ siginfo_t si;
+
+ print_array(tcp, addr, len, &si, sizeof(si),
+ umoven_or_printaddr, print_siginfo_t, 0);
+}
case PTRACE_GETREGSET:
case PTRACE_GETSIGINFO:
case PTRACE_GETSIGMASK:
+ case PTRACE_PEEKSIGINFO:
case PTRACE_SECCOMP_GET_FILTER:
if (verbose(tcp)) {
/* print data on exiting syscall */
case PTRACE_GETSIGMASK:
print_sigset_addr_len(tcp, data, addr);
break;
+ case PTRACE_PEEKSIGINFO:
+ if (syserror(tcp))
+ printaddr(data);
+ else
+ print_siginfo_array(tcp, data, tcp->u_rval);
+ break;
case PTRACE_SECCOMP_GET_FILTER:
if (syserror(tcp))
printaddr(data);