ia32_signal.h revision 114987
1114987Speter/*- 2114987Speter * Copyright (c) 1999 Marcel Moolenaar 3114987Speter * Copyright (c) 2003 Peter Wemm 4114987Speter * All rights reserved. 5114987Speter * 6114987Speter * Redistribution and use in source and binary forms, with or without 7114987Speter * modification, are permitted provided that the following conditions 8114987Speter * are met: 9114987Speter * 1. Redistributions of source code must retain the above copyright 10114987Speter * notice, this list of conditions and the following disclaimer 11114987Speter * in this position and unchanged. 12114987Speter * 2. Redistributions in binary form must reproduce the above copyright 13114987Speter * notice, this list of conditions and the following disclaimer in the 14114987Speter * documentation and/or other materials provided with the distribution. 15114987Speter * 3. The name of the author may not be used to endorse or promote products 16114987Speter * derived from this software without specific prior written permission. 17114987Speter * 18114987Speter * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19114987Speter * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20114987Speter * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21114987Speter * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 22114987Speter * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 23114987Speter * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24114987Speter * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25114987Speter * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26114987Speter * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27114987Speter * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28114987Speter * 29114987Speter * $FreeBSD: head/sys/compat/ia32/ia32_signal.h 114987 2003-05-14 04:10:49Z peter $ 30114987Speter */ 31114987Speter 32114987Speterstruct ia32_sigaltstack { 33114987Speter u_int32_t ss_sp; /* signal stack base */ 34114987Speter u_int32_t ss_size; /* signal stack length */ 35114987Speter int ss_flags; /* SS_DISABLE and/or SS_ONSTACK */ 36114987Speter}; 37114987Speter 38114987Speter/* XXX should be 640 bytes long; check and see if __packed is needed */ 39114987Speterstruct ia32_mcontext { 40114987Speter int mc_onstack; /* XXX - sigcontext compat. */ 41114987Speter int mc_gs; /* machine state (struct trapframe) */ 42114987Speter int mc_fs; 43114987Speter int mc_es; 44114987Speter int mc_ds; 45114987Speter int mc_edi; 46114987Speter int mc_esi; 47114987Speter int mc_ebp; 48114987Speter int mc_isp; 49114987Speter int mc_ebx; 50114987Speter int mc_edx; 51114987Speter int mc_ecx; 52114987Speter int mc_eax; 53114987Speter int mc_trapno; 54114987Speter int mc_err; 55114987Speter int mc_eip; 56114987Speter int mc_cs; 57114987Speter int mc_eflags; 58114987Speter int mc_esp; 59114987Speter int mc_ss; 60114987Speter int mc_len; /* sizeof(struct ia32_mcontext) */ 61114987Speter /* We use the same values for fpformat and ownedfp */ 62114987Speter int mc_fpformat; 63114987Speter int mc_ownedfp; 64114987Speter int mc_spare1[1]; /* align next field to 16 bytes */ 65114987Speter /* 66114987Speter * See <machine/npx.h> for the internals of mc_fpstate[]. 67114987Speter */ 68114987Speter int mc_fpstate[128] __aligned(16); 69114987Speter int mc_spare2[8]; 70114987Speter}; 71114987Speter 72114987Speter/* XXX should be 704 bytes long; check and see if __packed is needed */ 73114987Speterstruct ia32_ucontext { 74114987Speter sigset_t uc_sigmask; 75114987Speter struct ia32_mcontext uc_mcontext; 76114987Speter u_int32_t uc_link; 77114987Speter struct ia32_sigaltstack uc_stack; 78114987Speter int uc_flags; 79114987Speter int __spare__[4]; 80114987Speter}; 81114987Speter 82114987Speter 83114987Speter#if defined(COMPAT_FREEBSD4) 84114987Speterstruct ia32_mcontext4 { 85114987Speter int mc_onstack; /* XXX - sigcontext compat. */ 86114987Speter int mc_gs; /* machine state (struct trapframe) */ 87114987Speter int mc_fs; 88114987Speter int mc_es; 89114987Speter int mc_ds; 90114987Speter int mc_edi; 91114987Speter int mc_esi; 92114987Speter int mc_ebp; 93114987Speter int mc_isp; 94114987Speter int mc_ebx; 95114987Speter int mc_edx; 96114987Speter int mc_ecx; 97114987Speter int mc_eax; 98114987Speter int mc_trapno; 99114987Speter int mc_err; 100114987Speter int mc_eip; 101114987Speter int mc_cs; 102114987Speter int mc_eflags; 103114987Speter int mc_esp; 104114987Speter int mc_ss; 105114987Speter int mc_fpregs[28]; 106114987Speter int __spare__[17]; 107114987Speter}; 108114987Speter 109114987Speterstruct ia32_ucontext4 { 110114987Speter sigset_t uc_sigmask; 111114987Speter struct ia32_mcontext4 uc_mcontext; 112114987Speter u_int32_t uc_link; 113114987Speter struct ia32_sigaltstack uc_stack; 114114987Speter int __spare__[8]; 115114987Speter}; 116114987Speter#endif 117114987Speter 118114987Speter/* 119114987Speter * Signal frames, arguments passed to application signal handlers. 120114987Speter */ 121114987Speterunion ia32_sigval { 122114987Speter int sigval_int; 123114987Speter u_int32_t sigval_ptr; 124114987Speter}; 125114987Speterstruct ia32_siginfo { 126114987Speter int si_signo; /* signal number */ 127114987Speter int si_errno; /* errno association */ 128114987Speter int si_code; /* signal code */ 129114987Speter int32_t si_pid; /* sending process */ 130114987Speter u_int32_t si_uid; /* sender's ruid */ 131114987Speter int si_status; /* exit value */ 132114987Speter u_int32_t si_addr; /* faulting instruction */ 133114987Speter union ia32_sigval si_value; /* signal value */ 134114987Speter int32_t si_band; /* band event for SIGPOLL */ 135114987Speter int __spare__[7]; /* gimme some slack */ 136114987Speter}; 137114987Speter 138114987Speter#ifdef COMPAT_FREEBSD4 139114987Speterstruct ia32_sigframe4 { 140114987Speter u_int32_t sf_signum; 141114987Speter u_int32_t sf_siginfo; /* code or pointer to sf_si */ 142114987Speter u_int32_t sf_ucontext; /* points to sf_uc */ 143114987Speter u_int32_t sf_addr; /* undocumented 4th arg */ 144114987Speter u_int32_t sf_ah; /* action/handler pointer */ 145114987Speter struct ia32_ucontext4 sf_uc; /* = *sf_ucontext */ 146114987Speter struct ia32_siginfo sf_si; /* = *sf_siginfo (SA_SIGINFO case) */ 147114987Speter}; 148114987Speter#endif 149114987Speter 150114987Speterstruct ia32_sigframe { 151114987Speter u_int32_t sf_signum; 152114987Speter u_int32_t sf_siginfo; /* code or pointer to sf_si */ 153114987Speter u_int32_t sf_ucontext; /* points to sf_uc */ 154114987Speter u_int32_t sf_addr; /* undocumented 4th arg */ 155114987Speter u_int32_t sf_ah; /* action/handler pointer */ 156114987Speter struct ia32_ucontext sf_uc; /* = *sf_ucontext */ 157114987Speter struct ia32_siginfo sf_si; /* = *sf_siginfo (SA_SIGINFO case) */ 158114987Speter}; 159114987Speter 160114987Speterextern char ia32_sigcode[]; 161114987Speterextern char freebsd4_ia32_sigcode[]; 162114987Speterextern int sz_ia32_sigcode; 163114987Speterextern int sz_freebsd4_ia32_sigcode; 164114987Speterextern void ia32_sendsig(sig_t, int, sigset_t *, u_long); 165