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 unsigned long addr, sp;
12
13 /* Fetch pointer to struct sigcontext. */
14 if (!get_stack_pointer(tcp, &sp) ||
15 umove_or_printaddr(tcp, sp + 2 * sizeof(int), &addr))
16 return;
17
18 unsigned long mask[NSIG_BYTES / sizeof(long)];
19 /* Fetch first word of signal mask. */
20 if (umove_or_printaddr(tcp, addr, &mask[0]))
21 return;
22
23 /* Fetch remaining words of signal mask, located immediately before. */
24 addr -= sizeof(mask) - sizeof(long);
25 if (umoven_or_printaddr(tcp, addr, sizeof(mask) - sizeof(long), &mask[1]))
26 return;
27
28 tprintsigmask_addr(mask);
29 }