1 #ifndef _ASMi386_SIGCONTEXT_H 2 #define _ASMi386_SIGCONTEXT_H 3 4 /* 5 * As documented in the iBCS2 standard.. 6 * 7 * The first part of "struct _fpstate" is just the normal i387 8 * hardware setup, the extra "status" word is used to save the 9 * coprocessor status word before entering the handler. 10 * 11 * Pentium III FXSR, SSE support 12 * Gareth Hughes <gareth@valinux.com>, May 2000 13 * 14 * The FPU state data structure has had to grow to accomodate the 15 * extended FPU state required by the Streaming SIMD Extensions. 16 * There is no documented standard to accomplish this at the moment. 17 */ 18 struct _fpreg { 19 unsigned short significand[4]; 20 unsigned short exponent; 21 }; 22 23 struct _fpxreg { 24 unsigned short significand[4]; 25 unsigned short exponent; 26 unsigned short padding[3]; 27 }; 28 29 struct _xmmreg { 30 unsigned long element[4]; 31 }; 32 33 struct _fpstate { 34 /* Regular FPU environment */ 35 unsigned long cw; 36 unsigned long sw; 37 unsigned long tag; 38 unsigned long ipoff; 39 unsigned long cssel; 40 unsigned long dataoff; 41 unsigned long datasel; 42 struct _fpreg _st[8]; 43 unsigned short status; 44 unsigned short magic; /* 0xffff = regular FPU data only */ 45 46 /* FXSR FPU environment */ 47 unsigned long _fxsr_env[6]; /* FXSR FPU env is ignored */ 48 unsigned long mxcsr; 49 unsigned long reserved; 50 struct _fpxreg _fxsr_st[8]; /* FXSR FPU reg data is ignored */ 51 struct _xmmreg _xmm[8]; 52 unsigned long padding[56]; 53 }; 54 55 #define X86_FXSR_MAGIC 0x0000 56 57 struct sigcontext { 58 unsigned short gs, __gsh; 59 unsigned short fs, __fsh; 60 unsigned short es, __esh; 61 unsigned short ds, __dsh; 62 unsigned long edi; 63 unsigned long esi; 64 unsigned long ebp; 65 unsigned long esp; 66 unsigned long ebx; 67 unsigned long edx; 68 unsigned long ecx; 69 unsigned long eax; 70 unsigned long trapno; 71 unsigned long err; 72 unsigned long eip; 73 unsigned short cs, __csh; 74 unsigned long eflags; 75 unsigned long esp_at_signal; 76 unsigned short ss, __ssh; 77 struct _fpstate * fpstate; 78 unsigned long oldmask; 79 unsigned long cr2; 80 }; 81 82 83 #endif 84