xref: /qemu/bsd-user/i386/target_arch_signal.h (revision 679041b1efc03cb6ff2343024b5d209d1fc231f1)
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