1*2aba6e7aSPeter Holm#!/bin/sh 2*2aba6e7aSPeter Holm 3*2aba6e7aSPeter Holm# Test scenario from: 4*2aba6e7aSPeter Holm# Bug 265889 - sys.kern.basic_signal.trap_signal_test crashes bhyve in i386 VM 5*2aba6e7aSPeter Holm# Test scenario by: Li-Wen Hsu <lwhsu@FreeBSD.org> 6*2aba6e7aSPeter Holm 7*2aba6e7aSPeter Holmcat > /tmp/signal2.c <<EOF 8*2aba6e7aSPeter Holm#include <stdio.h> 9*2aba6e7aSPeter Holm#include <signal.h> 10*2aba6e7aSPeter Holm 11*2aba6e7aSPeter Holm#include <machine/psl.h> 12*2aba6e7aSPeter Holm#define SET_TRACE_FLAG(ucp) (ucp)->uc_mcontext.mc_eflags |= PSL_T 13*2aba6e7aSPeter Holm#define CLR_TRACE_FLAG(ucp) (ucp)->uc_mcontext.mc_eflags &= ~PSL_T 14*2aba6e7aSPeter Holm 15*2aba6e7aSPeter Holmstatic volatile sig_atomic_t trap_signal_fired = 0; 16*2aba6e7aSPeter Holm 17*2aba6e7aSPeter Holmstatic void 18*2aba6e7aSPeter Holmtrap_sig_handler(int signo __unused, siginfo_t *info __unused, void *_ucp) 19*2aba6e7aSPeter Holm{ 20*2aba6e7aSPeter Holm ucontext_t *ucp = _ucp; 21*2aba6e7aSPeter Holm 22*2aba6e7aSPeter Holm if (trap_signal_fired < 9) { 23*2aba6e7aSPeter Holm SET_TRACE_FLAG(ucp); 24*2aba6e7aSPeter Holm } else { 25*2aba6e7aSPeter Holm CLR_TRACE_FLAG(ucp); 26*2aba6e7aSPeter Holm } 27*2aba6e7aSPeter Holm trap_signal_fired++; 28*2aba6e7aSPeter Holm} 29*2aba6e7aSPeter Holm 30*2aba6e7aSPeter Holmint main() { 31*2aba6e7aSPeter Holm struct sigaction sa = { 32*2aba6e7aSPeter Holm .sa_sigaction = trap_sig_handler, 33*2aba6e7aSPeter Holm .sa_flags = SA_SIGINFO, 34*2aba6e7aSPeter Holm }; 35*2aba6e7aSPeter Holm 36*2aba6e7aSPeter Holm sigemptyset(&sa.sa_mask); 37*2aba6e7aSPeter Holm sigaction(SIGTRAP, &sa, NULL); 38*2aba6e7aSPeter Holm 39*2aba6e7aSPeter Holm raise(SIGTRAP); 40*2aba6e7aSPeter Holm 41*2aba6e7aSPeter Holm printf("test\n"); 42*2aba6e7aSPeter Holm} 43*2aba6e7aSPeter HolmEOF 44*2aba6e7aSPeter Holmcc -o /tmp/signal2 -Wall -Wextra -O0 -m32 /tmp/signal2.c || exit 1 45*2aba6e7aSPeter Holm 46*2aba6e7aSPeter Holm/tmp/signal2; s=$? 47*2aba6e7aSPeter Holmfor i in `jot 30`; do 48*2aba6e7aSPeter Holm /tmp/signal2 & 49*2aba6e7aSPeter Holmdone > /dev/null 50*2aba6e7aSPeter Holmwait 51*2aba6e7aSPeter Holm 52*2aba6e7aSPeter Holmrm -f /tmp/signal2 /tmp/signal2.c 53*2aba6e7aSPeter Holmexit $s 54