Branch data Line data Source code
1 : : static void
2 : 1 : arch_sigreturn(struct tcb *tcp)
3 : : {
4 : : /*
5 : : * On i386, sigcontext is followed on stack by struct fpstate
6 : : * and after it an additional u32 extramask which holds
7 : : * upper half of the mask.
8 : : */
9 : : struct {
10 : : uint32_t struct_sigcontext_padding1[20];
11 : : uint32_t oldmask;
12 : : uint32_t struct_sigcontext_padding2;
13 : : uint32_t struct_fpstate_padding[156];
14 : : uint32_t extramask;
15 : : } frame;
16 : :
17 [ - + ]: 1 : if (umove(tcp, *i386_esp_ptr, &frame) < 0) {
18 : 0 : tprintf("{mask=%#lx}", (unsigned long) *i386_esp_ptr);
19 : : } else {
20 : 1 : uint32_t mask[2] = { frame.oldmask, frame.extramask };
21 : 1 : tprintsigmask_addr("{mask=", mask);
22 : 1 : tprints("}");
23 : : }
24 : 1 : }
|