2 * Copyright (c) 2015-2018 Dmitry V. Levin <ldv@altlinux.org>
3 * Copyright (c) 2015-2019 The strace developers.
6 * SPDX-License-Identifier: GPL-2.0-or-later
12 #if defined __powerpc64__ \
13 || (defined __sparc__ && defined __arch64__)
14 /* Old sigreturn is defined but not implemented in the kernel. */
15 # undef __NR_sigreturn
25 # define RT_0 ASM_SIGRTMIN
27 /* Linux kernel >= 3.18 defines SIGRTMIN to 32 on all architectures. */
41 sigaddset(&set, SIGINT);
42 sigaddset(&set, SIGUSR2);
43 sigaddset(&set, SIGCHLD);
44 sigaddset(&set, RT_0 + 3);
45 sigaddset(&set, RT_0 + 4);
46 sigaddset(&set, RT_0 + 5);
47 sigaddset(&set, RT_0 + 26);
48 sigaddset(&set, RT_0 + 27);
49 if (sigprocmask(SIG_SETMASK, &set, NULL))
50 perror_msg_and_fail("sigprocmask");
53 /* This should result to old sigreturn. */
54 if (signal(SIGUSR1, handler) == SIG_ERR)
55 perror_msg_and_fail("sigaction");
58 perror_msg_and_fail("raise");
60 static const char *const sigs =
61 (SIGUSR2 < SIGCHLD) ? "INT USR2 CHLD" : "INT CHLD USR2";
62 static const char *const rt_sigs = "RT_3 RT_4 RT_5 RT_26 RT_27";
63 printf("sigreturn({mask=[%s %s]}) = 0\n", sigs, rt_sigs);
65 puts("+++ exited with 0 +++");
71 SKIP_MAIN_UNDEFINED("__NR_sigreturn")