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 kernel_ulong_t addr;
12 if (!get_stack_pointer(tcp, &addr))
13 return;
14
15 /* Skip dummy stack frame. */
16 addr += 64;
17
18 #ifdef POWERPC64
19 /* The only sigreturn on ppc64 is compat_sys_sigreturn. */
20 typedef struct {
21 unsigned int _unused[4];
22 int signal;
23 unsigned int handler;
24 unsigned int oldmask;
25 /* all the rest is irrelevant */
26 } sigreturn_context;
27 #else
28 typedef struct sigcontext sigreturn_context;
29 #endif
30
31 sigreturn_context sc;
32
33 if (!umove_or_printaddr(tcp, addr, &sc)) {
34 const unsigned int mask[NSIG_BYTES / sizeof(int)] = {
35 sc.oldmask,
36 sc._unused[3]
37 };
38
39 tprintsigmask_addr(mask);
40 }
41 }