1 /*
2 * Copyright (c) 2015-2021 The strace developers.
3 * All rights reserved.
4 *
5 * SPDX-License-Identifier: LGPL-2.1-or-later
6 */
7
8 static void
9 arch_sigreturn(struct tcb *tcp)
10 {
11 /*
12 * On i386, sigcontext is followed on stack by struct fpstate
13 * and after it an additional u32 extramask which holds
14 * upper half of the mask.
15 */
16 struct {
17 uint32_t struct_sigcontext_padding1[20];
18 uint32_t oldmask;
19 uint32_t struct_sigcontext_padding2;
20 uint32_t struct_fpstate_padding[156];
21 uint32_t extramask;
22 } frame;
23 kernel_ulong_t sp;
24
25 if (get_stack_pointer(tcp, &sp) &&
26 !umove_or_printaddr(tcp, sp, &frame)) {
27 uint32_t mask[2] = { frame.oldmask, frame.extramask };
28 tprintsigmask_addr(mask);
29 }
30 }