1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef _ASM_X86_SIGCONTEXT_H 2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _ASM_X86_SIGCONTEXT_H 3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/compiler.h> 5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <asm/types.h> 6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef __i386__ 8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * As documented in the iBCS2 standard.. 10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * The first part of "struct _fpstate" is just the normal i387 12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * hardware setup, the extra "status" word is used to save the 13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * coprocessor status word before entering the handler. 14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Pentium III FXSR, SSE support 16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Gareth Hughes <gareth@valinux.com>, May 2000 17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * The FPU state data structure has had to grow to accommodate the 19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * extended FPU state required by the Streaming SIMD Extensions. 20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * There is no documented standard to accomplish this at the moment. 21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct _fpreg { 23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short significand[4]; 24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short exponent; 25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct _fpxreg { 28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short significand[4]; 29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short exponent; 30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short padding[3]; 31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct _xmmreg { 34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long element[4]; 35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct _fpstate { 38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* Regular FPU environment */ 39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long cw; 40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long sw; 41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long tag; 42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long ipoff; 43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long cssel; 44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long dataoff; 45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long datasel; 46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct _fpreg _st[8]; 47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short status; 48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short magic; /* 0xffff = regular FPU data only */ 49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* FXSR FPU environment */ 51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long _fxsr_env[6]; /* FXSR FPU env is ignored */ 52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long mxcsr; 53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long reserved; 54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct _fpxreg _fxsr_st[8]; /* FXSR FPU reg data is ignored */ 55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct _xmmreg _xmm[8]; 56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long padding[56]; 57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define X86_FXSR_MAGIC 0x0000 60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct sigcontext { 62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short gs, __gsh; 63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short fs, __fsh; 64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short es, __esh; 65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short ds, __dsh; 66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long edi; 67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long esi; 68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long ebp; 69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long esp; 70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long ebx; 71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long edx; 72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long ecx; 73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long eax; 74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long trapno; 75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long err; 76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long eip; 77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short cs, __csh; 78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long eflags; 79c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long esp_at_signal; 80c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short ss, __ssh; 81c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct _fpstate __user * fpstate; 82c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long oldmask; 83c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long cr2; 84c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 85c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 86c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else /* __i386__ */ 87c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 88c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* FXSAVE frame */ 89c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Note: reserved1/2 may someday contain valuable data. Always save/restore 90c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru them when you change signal frames. */ 91c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct _fpstate { 92c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 cwd; 93c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 swd; 94c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 twd; /* Note this is not the same as the 32bit/x87/FSAVE twd */ 95c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u16 fop; 96c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u64 rip; 97c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u64 rdp; 98c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 mxcsr; 99c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 mxcsr_mask; 100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 st_space[32]; /* 8*16 bytes for each FP-reg */ 101c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg */ 102c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 reserved2[24]; 103c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 104c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 105c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct sigcontext { 106c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long r8; 107c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long r9; 108c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long r10; 109c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long r11; 110c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long r12; 111c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long r13; 112c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long r14; 113c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long r15; 114c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long rdi; 115c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long rsi; 116c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long rbp; 117c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long rbx; 118c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long rdx; 119c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long rax; 120c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long rcx; 121c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long rsp; 122c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long rip; 123c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long eflags; /* RFLAGS */ 124c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short cs; 125c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short gs; 126c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short fs; 127c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned short __pad0; 128c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long err; 129c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long trapno; 130c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long oldmask; 131c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long cr2; 132c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct _fpstate __user *fpstate; /* zero when no FPU context */ 133c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long reserved1[8]; 134c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 135c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 136c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* !__i386__ */ 137c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 138c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 139