| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | */ | 
|  | 20 | struct _fpreg { | 
|  | 21 | unsigned short significand[4]; | 
|  | 22 | unsigned short exponent; | 
|  | 23 | }; | 
|  | 24 |  | 
|  | 25 | struct _fpxreg { | 
|  | 26 | unsigned short significand[4]; | 
|  | 27 | unsigned short exponent; | 
|  | 28 | unsigned short padding[3]; | 
|  | 29 | }; | 
|  | 30 |  | 
|  | 31 | struct _xmmreg { | 
|  | 32 | unsigned long element[4]; | 
|  | 33 | }; | 
|  | 34 |  | 
|  | 35 | struct _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 |  | 
|  | 59 | struct 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 |