1790baaccSWarner Losh /* 2790baaccSWarner Losh * x86_64 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 */ 189c092804SMarkus Armbruster 199c092804SMarkus Armbruster #ifndef TARGET_ARCH_SIGNAL_H 209c092804SMarkus Armbruster #define TARGET_ARCH_SIGNAL_H 21790baaccSWarner Losh 22790baaccSWarner Losh #include "cpu.h" 23790baaccSWarner Losh 24790baaccSWarner Losh /* Size of the signal trampolin code placed on the stack. */ 25790baaccSWarner Losh #define TARGET_SZSIGCODE 0 26790baaccSWarner Losh 27790baaccSWarner Losh /* compare to x86/include/_limits.h */ 28790baaccSWarner Losh #define TARGET_MINSIGSTKSZ (512 * 4) /* min sig stack size */ 29790baaccSWarner Losh #define TARGET_SIGSTKSZ (MINSIGSTKSZ + 32768) /* recommended size */ 30790baaccSWarner Losh 31790baaccSWarner Losh typedef struct target_mcontext { 32164f94bcSWarner Losh abi_ulong mc_onstack; /* XXX - sigcontext compat. */ 33164f94bcSWarner Losh abi_ulong mc_rdi; /* machine state (struct trapframe) */ 34164f94bcSWarner Losh abi_ulong mc_rsi; 35164f94bcSWarner Losh abi_ulong mc_rdx; 36164f94bcSWarner Losh abi_ulong mc_rcx; 37164f94bcSWarner Losh abi_ulong mc_r8; 38164f94bcSWarner Losh abi_ulong mc_r9; 39164f94bcSWarner Losh abi_ulong mc_rax; 40164f94bcSWarner Losh abi_ulong mc_rbx; 41164f94bcSWarner Losh abi_ulong mc_rbp; 42164f94bcSWarner Losh abi_ulong mc_r10; 43164f94bcSWarner Losh abi_ulong mc_r11; 44164f94bcSWarner Losh abi_ulong mc_r12; 45164f94bcSWarner Losh abi_ulong mc_r13; 46164f94bcSWarner Losh abi_ulong mc_r14; 47164f94bcSWarner Losh abi_ulong mc_r15; 48164f94bcSWarner Losh uint32_t mc_trapno; 49164f94bcSWarner Losh uint16_t mc_fs; 50164f94bcSWarner Losh uint16_t mc_gs; 51164f94bcSWarner Losh abi_ulong mc_addr; 52164f94bcSWarner Losh uint32_t mc_flags; 53164f94bcSWarner Losh uint16_t mc_es; 54164f94bcSWarner Losh uint16_t mc_ds; 55164f94bcSWarner Losh abi_ulong mc_err; 56164f94bcSWarner Losh abi_ulong mc_rip; 57164f94bcSWarner Losh abi_ulong mc_cs; 58164f94bcSWarner Losh abi_ulong mc_rflags; 59164f94bcSWarner Losh abi_ulong mc_rsp; 60164f94bcSWarner Losh abi_ulong mc_ss; 61164f94bcSWarner Losh 62164f94bcSWarner Losh abi_long mc_len; /* sizeof(mcontext_t) */ 63164f94bcSWarner Losh 64164f94bcSWarner Losh #define _MC_FPFMT_NODEV 0x10000 /* device not present or configured */ 65164f94bcSWarner Losh #define _MC_FPFMT_XMM 0x10002 66164f94bcSWarner Losh abi_long mc_fpformat; 67164f94bcSWarner Losh #define _MC_FPOWNED_NONE 0x20000 /* FP state not used */ 68164f94bcSWarner Losh #define _MC_FPOWNED_FPU 0x20001 /* FP state came from FPU */ 69164f94bcSWarner Losh #define _MC_FPOWNED_PCB 0x20002 /* FP state came from PCB */ 70164f94bcSWarner Losh abi_long mc_ownedfp; 71164f94bcSWarner Losh /* 72164f94bcSWarner Losh * See <machine/fpu.h> for the internals of mc_fpstate[]. 73164f94bcSWarner Losh */ 74164f94bcSWarner Losh abi_long mc_fpstate[64] __aligned(16); 75164f94bcSWarner Losh 76164f94bcSWarner Losh abi_ulong mc_fsbase; 77164f94bcSWarner Losh abi_ulong mc_gsbase; 78164f94bcSWarner Losh 79164f94bcSWarner Losh abi_ulong mc_xfpustate; 80164f94bcSWarner Losh abi_ulong mc_xfpustate_len; 81164f94bcSWarner Losh 82164f94bcSWarner Losh abi_long mc_spare[4]; 83790baaccSWarner Losh } target_mcontext_t; 84790baaccSWarner Losh 85164f94bcSWarner Losh #define TARGET_MCONTEXT_SIZE 800 86164f94bcSWarner Losh #define TARGET_UCONTEXT_SIZE 880 87164f94bcSWarner Losh 88c104b750SWarner Losh #include "target_os_ucontext.h" 89790baaccSWarner Losh 90790baaccSWarner Losh struct target_sigframe { 91790baaccSWarner Losh abi_ulong sf_signum; 92790baaccSWarner Losh abi_ulong sf_siginfo; /* code or pointer to sf_si */ 93790baaccSWarner Losh abi_ulong sf_ucontext; /* points to sf_uc */ 94790baaccSWarner Losh abi_ulong sf_addr; /* undocumented 4th arg */ 95790baaccSWarner Losh target_ucontext_t sf_uc; /* = *sf_uncontext */ 96790baaccSWarner Losh target_siginfo_t sf_si; /* = *sf_siginfo (SA_SIGINFO case)*/ 97790baaccSWarner Losh uint32_t __spare__[2]; 98790baaccSWarner Losh }; 99790baaccSWarner Losh 100*5fa2a10bSWarner Losh #define TARGET_SIGSTACK_ALIGN 16 101*5fa2a10bSWarner Losh 1029c092804SMarkus Armbruster #endif /* TARGET_ARCH_SIGNAL_H */ 103