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