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: releng/10.3/sys/compat/ia32/ia32_signal.h 230426 2012-01-21 17:45:27Z kib $ 30114987Speter */ 31114987Speter 32215741Skib#ifndef _COMPAT_IA32_IA32_SIGNAL_H 33215741Skib#define _COMPAT_IA32_IA32_SIGNAL_H 34215741Skib 35230426Skib#define _MC_IA32_HASSEGS 0x1 36230426Skib#define _MC_IA32_HASBASES 0x2 37230426Skib#define _MC_IA32_HASFPXSTATE 0x4 38230426Skib#define _MC_IA32_FLAG_MASK \ 39230426Skib (_MC_IA32_HASSEGS | _MC_IA32_HASBASES | _MC_IA32_HASFPXSTATE) 40230426Skib 41114987Speterstruct ia32_mcontext { 42144689Speter u_int32_t mc_onstack; /* XXX - sigcontext compat. */ 43144689Speter u_int32_t mc_gs; /* machine state (struct trapframe) */ 44144689Speter u_int32_t mc_fs; 45144689Speter u_int32_t mc_es; 46144689Speter u_int32_t mc_ds; 47144689Speter u_int32_t mc_edi; 48144689Speter u_int32_t mc_esi; 49144689Speter u_int32_t mc_ebp; 50144689Speter u_int32_t mc_isp; 51144689Speter u_int32_t mc_ebx; 52144689Speter u_int32_t mc_edx; 53144689Speter u_int32_t mc_ecx; 54144689Speter u_int32_t mc_eax; 55144689Speter u_int32_t mc_trapno; 56144689Speter u_int32_t mc_err; 57144689Speter u_int32_t mc_eip; 58144689Speter u_int32_t mc_cs; 59144689Speter u_int32_t mc_eflags; 60144689Speter u_int32_t mc_esp; 61144689Speter u_int32_t mc_ss; 62144689Speter u_int32_t mc_len; /* sizeof(struct ia32_mcontext) */ 63114987Speter /* We use the same values for fpformat and ownedfp */ 64144689Speter u_int32_t mc_fpformat; 65144689Speter u_int32_t mc_ownedfp; 66230426Skib u_int32_t mc_flags; 67114987Speter /* 68122277Speter * See <i386/include/npx.h> for the internals of mc_fpstate[]. 69114987Speter */ 70144689Speter u_int32_t mc_fpstate[128] __aligned(16); 71190616Skib u_int32_t mc_fsbase; 72190616Skib u_int32_t mc_gsbase; 73230426Skib u_int32_t mc_xfpustate; 74230426Skib u_int32_t mc_xfpustate_len; 75230426Skib u_int32_t mc_spare2[4]; 76114987Speter}; 77114987Speter 78114987Speterstruct ia32_ucontext { 79114987Speter sigset_t uc_sigmask; 80114987Speter struct ia32_mcontext uc_mcontext; 81114987Speter u_int32_t uc_link; 82163018Sdavidxu struct sigaltstack32 uc_stack; 83144689Speter u_int32_t uc_flags; 84144689Speter u_int32_t __spare__[4]; 85114987Speter}; 86114987Speter 87114987Speter 88114987Speter#if defined(COMPAT_FREEBSD4) 89114987Speterstruct ia32_mcontext4 { 90144689Speter u_int32_t mc_onstack; /* XXX - sigcontext compat. */ 91144689Speter u_int32_t mc_gs; /* machine state (struct trapframe) */ 92144689Speter u_int32_t mc_fs; 93144689Speter u_int32_t mc_es; 94144689Speter u_int32_t mc_ds; 95144689Speter u_int32_t mc_edi; 96144689Speter u_int32_t mc_esi; 97144689Speter u_int32_t mc_ebp; 98144689Speter u_int32_t mc_isp; 99144689Speter u_int32_t mc_ebx; 100144689Speter u_int32_t mc_edx; 101144689Speter u_int32_t mc_ecx; 102144689Speter u_int32_t mc_eax; 103144689Speter u_int32_t mc_trapno; 104144689Speter u_int32_t mc_err; 105144689Speter u_int32_t mc_eip; 106144689Speter u_int32_t mc_cs; 107144689Speter u_int32_t mc_eflags; 108144689Speter u_int32_t mc_esp; 109144689Speter u_int32_t mc_ss; 110144689Speter u_int32_t mc_fpregs[28]; 111144689Speter u_int32_t __spare__[17]; 112114987Speter}; 113114987Speter 114114987Speterstruct ia32_ucontext4 { 115114987Speter sigset_t uc_sigmask; 116114987Speter struct ia32_mcontext4 uc_mcontext; 117114987Speter u_int32_t uc_link; 118163018Sdavidxu struct sigaltstack32 uc_stack; 119144689Speter u_int32_t __spare__[8]; 120114987Speter}; 121114987Speter#endif 122114987Speter 123220238Skib#ifdef COMPAT_43 124128262Speterstruct ia32_sigcontext3 { 125144689Speter u_int32_t sc_onstack; 126144689Speter u_int32_t sc_mask; 127144689Speter u_int32_t sc_esp; 128144689Speter u_int32_t sc_ebp; 129144689Speter u_int32_t sc_isp; 130144689Speter u_int32_t sc_eip; 131144689Speter u_int32_t sc_eflags; 132144689Speter u_int32_t sc_es; 133144689Speter u_int32_t sc_ds; 134144689Speter u_int32_t sc_cs; 135144689Speter u_int32_t sc_ss; 136144689Speter u_int32_t sc_edi; 137144689Speter u_int32_t sc_esi; 138144689Speter u_int32_t sc_ebx; 139144689Speter u_int32_t sc_edx; 140144689Speter u_int32_t sc_ecx; 141144689Speter u_int32_t sc_eax; 142144689Speter u_int32_t sc_gs; 143144689Speter u_int32_t sc_fs; 144144689Speter u_int32_t sc_trapno; 145144689Speter u_int32_t sc_err; 146128262Speter}; 147128262Speter#endif 148128262Speter 149114987Speter/* 150114987Speter * Signal frames, arguments passed to application signal handlers. 151114987Speter */ 152114987Speter 153114987Speter#ifdef COMPAT_FREEBSD4 154114987Speterstruct ia32_sigframe4 { 155114987Speter u_int32_t sf_signum; 156114987Speter u_int32_t sf_siginfo; /* code or pointer to sf_si */ 157114987Speter u_int32_t sf_ucontext; /* points to sf_uc */ 158114987Speter u_int32_t sf_addr; /* undocumented 4th arg */ 159114987Speter u_int32_t sf_ah; /* action/handler pointer */ 160114987Speter struct ia32_ucontext4 sf_uc; /* = *sf_ucontext */ 161163018Sdavidxu struct siginfo32 sf_si; /* = *sf_siginfo (SA_SIGINFO case) */ 162114987Speter}; 163114987Speter#endif 164114987Speter 165114987Speterstruct ia32_sigframe { 166114987Speter u_int32_t sf_signum; 167114987Speter u_int32_t sf_siginfo; /* code or pointer to sf_si */ 168114987Speter u_int32_t sf_ucontext; /* points to sf_uc */ 169114987Speter u_int32_t sf_addr; /* undocumented 4th arg */ 170114987Speter u_int32_t sf_ah; /* action/handler pointer */ 171126091Speter /* Beware, hole due to ucontext being 16 byte aligned! */ 172114987Speter struct ia32_ucontext sf_uc; /* = *sf_ucontext */ 173163018Sdavidxu struct siginfo32 sf_si; /* = *sf_siginfo (SA_SIGINFO case) */ 174114987Speter}; 175114987Speter 176220238Skib#ifdef COMPAT_43 177128262Speterstruct ia32_siginfo3 { 178128262Speter struct ia32_sigcontext3 si_sc; 179128262Speter int si_signo; 180128262Speter int si_code; 181163018Sdavidxu union sigval32 si_value; 182128262Speter}; 183128262Speterstruct ia32_sigframe3 { 184128262Speter int sf_signum; 185128262Speter u_int32_t sf_arg2; /* int or siginfo_t */ 186128262Speter u_int32_t sf_scp; 187128262Speter u_int32_t sf_addr; 188128262Speter u_int32_t sf_ah; /* action/handler pointer */ 189128262Speter struct ia32_siginfo3 sf_siginfo; 190128262Speter}; 191128262Speter#endif 192128262Speter 193151316Sdavidxustruct ksiginfo; 194206136Sbzstruct image_params; 195114987Speterextern char ia32_sigcode[]; 196114987Speterextern char freebsd4_ia32_sigcode[]; 197220238Skibextern char ia32_osigcode[]; 198220238Skibextern char lcall_tramp; 199114987Speterextern int sz_ia32_sigcode; 200114987Speterextern int sz_freebsd4_ia32_sigcode; 201220238Skibextern int sz_ia32_osigcode; 202220238Skibextern int sz_lcall_tramp; 203220238Skibvoid ia32_sendsig(sig_t, struct ksiginfo *, sigset_t *); 204220238Skibvoid ia32_setregs(struct thread *td, struct image_params *imgp, 205205642Snwhitehorn u_long stack); 206220238Skibint setup_lcall_gate(void); 207215741Skib 208215741Skib#endif 209