stress2: Added a regression test
This commit is contained in:
parent
83e8c23178
commit
2aba6e7aaf
53
tools/test/stress2/misc/signal2.sh
Executable file
53
tools/test/stress2/misc/signal2.sh
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Test scenario from:
|
||||||
|
# Bug 265889 - sys.kern.basic_signal.trap_signal_test crashes bhyve in i386 VM
|
||||||
|
# Test scenario by: Li-Wen Hsu <lwhsu@FreeBSD.org>
|
||||||
|
|
||||||
|
cat > /tmp/signal2.c <<EOF
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
#include <machine/psl.h>
|
||||||
|
#define SET_TRACE_FLAG(ucp) (ucp)->uc_mcontext.mc_eflags |= PSL_T
|
||||||
|
#define CLR_TRACE_FLAG(ucp) (ucp)->uc_mcontext.mc_eflags &= ~PSL_T
|
||||||
|
|
||||||
|
static volatile sig_atomic_t trap_signal_fired = 0;
|
||||||
|
|
||||||
|
static void
|
||||||
|
trap_sig_handler(int signo __unused, siginfo_t *info __unused, void *_ucp)
|
||||||
|
{
|
||||||
|
ucontext_t *ucp = _ucp;
|
||||||
|
|
||||||
|
if (trap_signal_fired < 9) {
|
||||||
|
SET_TRACE_FLAG(ucp);
|
||||||
|
} else {
|
||||||
|
CLR_TRACE_FLAG(ucp);
|
||||||
|
}
|
||||||
|
trap_signal_fired++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
struct sigaction sa = {
|
||||||
|
.sa_sigaction = trap_sig_handler,
|
||||||
|
.sa_flags = SA_SIGINFO,
|
||||||
|
};
|
||||||
|
|
||||||
|
sigemptyset(&sa.sa_mask);
|
||||||
|
sigaction(SIGTRAP, &sa, NULL);
|
||||||
|
|
||||||
|
raise(SIGTRAP);
|
||||||
|
|
||||||
|
printf("test\n");
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
cc -o /tmp/signal2 -Wall -Wextra -O0 -m32 /tmp/signal2.c || exit 1
|
||||||
|
|
||||||
|
/tmp/signal2; s=$?
|
||||||
|
for i in `jot 30`; do
|
||||||
|
/tmp/signal2 &
|
||||||
|
done > /dev/null
|
||||||
|
wait
|
||||||
|
|
||||||
|
rm -f /tmp/signal2 /tmp/signal2.c
|
||||||
|
exit $s
|
Loading…
Reference in New Issue
Block a user