* tests/run_expect_termsig.c: New file.
* tests/unblock_reset_raise.c: Likewise.
* tests/termsig.test: New test.
* tests/.gitignore: Add run_expect_termsig and unblock_reset_raise.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(MISC_TESTS): Add termsig.test.
rt_sigsuspend
rt_sigtimedwait
rt_tgsigqueueinfo
+run_expect_termsig
sched_get_priority_mxx
sched_rr_get_interval
sched_xetaffinity
umovestr2
umovestr3
uname
+unblock_reset_raise
unix-pair-send-recv
unix-pair-sendto-recvfrom
unlink
quotactl-xfs-v \
redirect-fds \
restart_syscall \
+ run_expect_termsig \
scm_rights \
seccomp-filter-v \
seccomp-strict \
sleep \
stack-fcall \
threads-execve \
+ unblock_reset_raise \
unix-pair-send-recv \
unix-pair-sendto-recvfrom \
vfork-f \
strace-t.test \
strace-tt.test \
strace-ttt.test \
+ termsig.test \
threads-execve.test \
# end of MISC_TESTS
--- /dev/null
+/*
+ * Execute a command, expect its termination with a specified signal.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/wait.h>
+
+int
+main(int ac, char **av)
+{
+ if (ac < 3)
+ error_msg_and_fail("usage: run_expect_termsig signo path...");
+
+ signal(SIGCHLD, SIG_DFL);
+
+ pid_t pid = fork();
+ if (pid < 0)
+ perror_msg_and_fail("fork");
+
+ if (!pid) {
+ execvp(av[2], av + 2);
+ perror_msg_and_fail("execvp: %s", av[2]);
+ }
+
+ int status;
+ if (waitpid(pid, &status, 0) != pid)
+ perror_msg_and_fail("waitpid");
+
+ return !(WIFSIGNALED(status) && WTERMSIG(status) == atoi(av[1]));
+}
--- /dev/null
+#!/bin/sh
+
+# Check termination signal forwarding.
+
+. "${srcdir=.}/init.sh"
+
+run_expect_termsig="../run_expect_termsig 15"
+unblock_reset_raise="../unblock_reset_raise 15"
+
+run_prog $run_expect_termsig $unblock_reset_raise
+STRACE="$run_expect_termsig $STRACE"
+
+for i in 1 2 3 4; do
+ run_strace -I$i -enone -esignal=none $unblock_reset_raise
+done
--- /dev/null
+/*
+ * Unblock, reset, and raise a signal.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(int ac, char **av)
+{
+ if (ac != 2)
+ error_msg_and_fail("usage: unblock_raise signo");
+
+ sigset_t mask;
+ sigemptyset(&mask);
+ const int signo = atoi(av[1]);
+ if (sigaddset(&mask, signo))
+ perror_msg_and_fail("sigaddset: %s", av[1]);
+ if (sigprocmask(SIG_UNBLOCK, &mask, NULL))
+ perror_msg_and_fail("sigprocmask");
+ if (signal(signo, SIG_DFL) == SIG_ERR)
+ perror_msg_and_fail("signal: %s", av[1]);
+ if (raise(signo))
+ perror_msg_and_fail("raise: %s", av[1]);
+
+ return 0;
+}