| static void |
| arch_sigreturn(struct tcb *tcp) |
| { |
| /* Skip dummy stack frame. */ |
| const unsigned long addr = ppc_regs.gpr[1] + 64; |
| |
| #ifdef POWERPC64 |
| /* The only sigreturn on ppc64 is compat_sys_sigreturn. */ |
| typedef struct { |
| unsigned int _unused[4]; |
| int signal; |
| unsigned int handler; |
| unsigned int oldmask; |
| /* all the rest is irrelevant */ |
| } sigreturn_context; |
| #else |
| typedef struct sigcontext sigreturn_context; |
| #endif |
| |
| sigreturn_context sc; |
| |
| if (umove(tcp, addr, &sc) < 0) { |
| tprintf("{mask=%#lx}", addr); |
| } else { |
| const unsigned int mask[NSIG_BYTES / sizeof(int)] = { |
| sc.oldmask, |
| sc._unused[3] |
| }; |
| |
| tprintsigmask_addr("{mask=", mask); |
| tprints("}"); |
| } |
| } |