1790baaccSWarner Losh /* 2790baaccSWarner Losh * i386 dependent signal definitions 3790baaccSWarner Losh * 4790baaccSWarner Losh * 5790baaccSWarner Losh * This program is free software; you can redistribute it and/or modify 6790baaccSWarner Losh * it under the terms of the GNU General Public License as published by 7790baaccSWarner Losh * the Free Software Foundation; either version 2 of the License, or 8790baaccSWarner Losh * (at your option) any later version. 9790baaccSWarner Losh * 10790baaccSWarner Losh * This program is distributed in the hope that it will be useful, 11790baaccSWarner Losh * but WITHOUT ANY WARRANTY; without even the implied warranty of 12790baaccSWarner Losh * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13790baaccSWarner Losh * GNU General Public License for more details. 14790baaccSWarner Losh * 15790baaccSWarner Losh * You should have received a copy of the GNU General Public License 16790baaccSWarner Losh * along with this program; if not, see <http://www.gnu.org/licenses/>. 17790baaccSWarner Losh */ 18790baaccSWarner Losh #ifndef TARGET_ARCH_SIGNAL_H 19790baaccSWarner Losh #define TARGET_ARCH_SIGNAL_H 20790baaccSWarner Losh 21790baaccSWarner Losh #include "cpu.h" 22790baaccSWarner Losh 23790baaccSWarner Losh /* Size of the signal trampolin code placed on the stack. */ 24790baaccSWarner Losh #define TARGET_SZSIGCODE 0 25790baaccSWarner Losh 26790baaccSWarner Losh /* compare to x86/include/_limits.h */ 27790baaccSWarner Losh #define TARGET_MINSIGSTKSZ (512 * 4) /* min sig stack size */ 28790baaccSWarner Losh #define TARGET_SIGSTKSZ (MINSIGSTKSZ + 32768) /* recommended size */ 29790baaccSWarner Losh 30790baaccSWarner Losh typedef struct target_mcontext { 31*679041b1SWarner Losh abi_ulong mc_onstack; /* XXX - sigcontext compat. */ 32*679041b1SWarner Losh abi_ulong mc_gs; /* machine state (struct trapframe) */ 33*679041b1SWarner Losh abi_ulong mc_fs; 34*679041b1SWarner Losh abi_ulong mc_es; 35*679041b1SWarner Losh abi_ulong mc_ds; 36*679041b1SWarner Losh abi_ulong mc_edi; 37*679041b1SWarner Losh abi_ulong mc_esi; 38*679041b1SWarner Losh abi_ulong mc_ebp; 39*679041b1SWarner Losh abi_ulong mc_isp; 40*679041b1SWarner Losh abi_ulong mc_ebx; 41*679041b1SWarner Losh abi_ulong mc_edx; 42*679041b1SWarner Losh abi_ulong mc_ecx; 43*679041b1SWarner Losh abi_ulong mc_eax; 44*679041b1SWarner Losh abi_ulong mc_trapno; 45*679041b1SWarner Losh abi_ulong mc_err; 46*679041b1SWarner Losh abi_ulong mc_eip; 47*679041b1SWarner Losh abi_ulong mc_cs; 48*679041b1SWarner Losh abi_ulong mc_eflags; 49*679041b1SWarner Losh abi_ulong mc_esp; 50*679041b1SWarner Losh abi_ulong mc_ss; 51*679041b1SWarner Losh 52*679041b1SWarner Losh int32_t mc_len; /* sizeof(mcontext_t) */ 53*679041b1SWarner Losh #define _MC_FPFMT_NODEV 0x10000 /* device not present or configured */ 54*679041b1SWarner Losh #define _MC_FPFMT_387 0x10001 55*679041b1SWarner Losh #define _MC_FPFMT_XMM 0x10002 56*679041b1SWarner Losh int32_t mc_fpformat; 57*679041b1SWarner Losh #define _MC_FPOWNED_NONE 0x20000 /* FP state not used */ 58*679041b1SWarner Losh #define _MC_FPOWNED_FPU 0x20001 /* FP state came from FPU */ 59*679041b1SWarner Losh #define _MC_FPOWNED_PCB 0x20002 /* FP state came from PCB */ 60*679041b1SWarner Losh int32_t mc_ownedfp; 61*679041b1SWarner Losh abi_ulong mc_flags; 62*679041b1SWarner Losh /* 63*679041b1SWarner Losh * See <machine/npx.h> for the internals of mc_fpstate[]. 64*679041b1SWarner Losh */ 65*679041b1SWarner Losh int32_t mc_fpstate[128] __aligned(16); 66*679041b1SWarner Losh 67*679041b1SWarner Losh abi_ulong mc_fsbase; 68*679041b1SWarner Losh abi_ulong mc_gsbase; 69*679041b1SWarner Losh 70*679041b1SWarner Losh abi_ulong mc_xfpustate; 71*679041b1SWarner Losh abi_ulong mc_xfpustate_len; 72*679041b1SWarner Losh 73*679041b1SWarner Losh int32_t mc_spare2[4]; 74790baaccSWarner Losh } target_mcontext_t; 75790baaccSWarner Losh 76*679041b1SWarner Losh #define TARGET_MCONTEXT_SIZE 640 77*679041b1SWarner Losh #define TARGET_UCONTEXT_SIZE 704 78*679041b1SWarner Losh 79c504713fSWarner Losh #include "target_os_ucontext.h" 80790baaccSWarner Losh 81790baaccSWarner Losh struct target_sigframe { 82790baaccSWarner Losh abi_ulong sf_signum; 83790baaccSWarner Losh abi_ulong sf_siginfo; /* code or pointer to sf_si */ 84790baaccSWarner Losh abi_ulong sf_ucontext; /* points to sf_uc */ 85790baaccSWarner Losh abi_ulong sf_addr; /* undocumented 4th arg */ 86790baaccSWarner Losh target_ucontext_t sf_uc; /* = *sf_uncontext */ 87790baaccSWarner Losh target_siginfo_t sf_si; /* = *sf_siginfo (SA_SIGINFO case)*/ 88790baaccSWarner Losh uint32_t __spare__[2]; 89790baaccSWarner Losh }; 90790baaccSWarner Losh 91790baaccSWarner Losh /* 92790baaccSWarner Losh * Compare to i386/i386/machdep.c sendsig() 93790baaccSWarner Losh * Assumes that target stack frame memory is locked. 94790baaccSWarner Losh */ 95790baaccSWarner Losh static inline abi_long set_sigtramp_args(CPUX86State *regs, 96790baaccSWarner Losh int sig, struct target_sigframe *frame, abi_ulong frame_addr, 97790baaccSWarner Losh struct target_sigaction *ka) 98790baaccSWarner Losh { 99790baaccSWarner Losh /* XXX return -TARGET_EOPNOTSUPP; */ 100790baaccSWarner Losh return 0; 101790baaccSWarner Losh } 102790baaccSWarner Losh 103790baaccSWarner Losh /* Compare to i386/i386/machdep.c get_mcontext() */ 104790baaccSWarner Losh static inline abi_long get_mcontext(CPUX86State *regs, 105790baaccSWarner Losh target_mcontext_t *mcp, int flags) 106790baaccSWarner Losh { 107790baaccSWarner Losh /* XXX */ 108790baaccSWarner Losh return -TARGET_EOPNOTSUPP; 109790baaccSWarner Losh } 110790baaccSWarner Losh 111790baaccSWarner Losh /* Compare to i386/i386/machdep.c set_mcontext() */ 112790baaccSWarner Losh static inline abi_long set_mcontext(CPUX86State *regs, 113790baaccSWarner Losh target_mcontext_t *mcp, int srflag) 114790baaccSWarner Losh { 115790baaccSWarner Losh /* XXX */ 116790baaccSWarner Losh return -TARGET_EOPNOTSUPP; 117790baaccSWarner Losh } 118790baaccSWarner Losh 119790baaccSWarner Losh static inline abi_long get_ucontext_sigreturn(CPUX86State *regs, 120790baaccSWarner Losh abi_ulong target_sf, abi_ulong *target_uc) 121790baaccSWarner Losh { 122790baaccSWarner Losh /* XXX */ 123790baaccSWarner Losh *target_uc = 0; 124790baaccSWarner Losh return -TARGET_EOPNOTSUPP; 125790baaccSWarner Losh } 126790baaccSWarner Losh 127790baaccSWarner Losh #endif /* TARGET_ARCH_SIGNAL_H */ 128