1 static void 2 arch_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