| static void |
| arch_sigreturn(struct tcb *tcp) |
| { |
| /* |
| * On i386, sigcontext is followed on stack by struct fpstate |
| * and after it an additional u32 extramask which holds |
| * upper half of the mask. |
| */ |
| struct { |
| uint32_t struct_sigcontext_padding1[20]; |
| uint32_t oldmask; |
| uint32_t struct_sigcontext_padding2; |
| uint32_t struct_fpstate_padding[156]; |
| uint32_t extramask; |
| } frame; |
| |
| if (umove(tcp, *i386_esp_ptr, &frame) < 0) { |
| tprintf("{mask=%#lx}", (unsigned long) *i386_esp_ptr); |
| } else { |
| uint32_t mask[2] = { frame.oldmask, frame.extramask }; |
| tprintsigmask_addr("{mask=", mask); |
| tprints("}"); |
| } |
| } |