1static void
2arch_sigreturn(struct tcb *tcp)
3{
4	long addr;
5
6	if (upeek(tcp->pid, 4*PT_USP, &addr) < 0)
7		return;
8	/* Fetch pointer to struct sigcontext.  */
9	if (umove(tcp, addr + 2 * sizeof(int), &addr) < 0)
10		return;
11
12	unsigned long mask[NSIG / 8 / sizeof(long)];
13	/* Fetch first word of signal mask.  */
14	if (umove(tcp, addr, &mask[0]) < 0)
15		return;
16
17	/* Fetch remaining words of signal mask, located immediately before.  */
18	addr -= sizeof(mask) - sizeof(long);
19	if (umoven(tcp, addr, sizeof(mask) - sizeof(long), &mask[1]) < 0)
20		return;
21
22	tprintsigmask_addr("{mask=", mask);
23	tprints("}");
24}
25