| 
									
										
										
										
											2007-10-23 22:37:24 +02:00
										 |  |  | #ifndef _ASM_X86_SIGCONTEXT_H
 | 
					
						
							|  |  |  | #define _ASM_X86_SIGCONTEXT_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/compiler.h>
 | 
					
						
							|  |  |  | #include <asm/types.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __i386__
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * As documented in the iBCS2 standard.. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The first part of "struct _fpstate" is just the normal i387 | 
					
						
							|  |  |  |  * hardware setup, the extra "status" word is used to save the | 
					
						
							|  |  |  |  * coprocessor status word before entering the handler. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Pentium III FXSR, SSE support | 
					
						
							|  |  |  |  *	Gareth Hughes <gareth@valinux.com>, May 2000 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The FPU state data structure has had to grow to accommodate the | 
					
						
							|  |  |  |  * extended FPU state required by the Streaming SIMD Extensions. | 
					
						
							|  |  |  |  * There is no documented standard to accomplish this at the moment. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct _fpreg { | 
					
						
							|  |  |  | 	unsigned short significand[4]; | 
					
						
							|  |  |  | 	unsigned short exponent; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct _fpxreg { | 
					
						
							|  |  |  | 	unsigned short significand[4]; | 
					
						
							|  |  |  | 	unsigned short exponent; | 
					
						
							|  |  |  | 	unsigned short padding[3]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct _xmmreg { | 
					
						
							|  |  |  | 	unsigned long element[4]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct _fpstate { | 
					
						
							|  |  |  | 	/* Regular FPU environment */ | 
					
						
							|  |  |  | 	unsigned long	cw; | 
					
						
							|  |  |  | 	unsigned long	sw; | 
					
						
							|  |  |  | 	unsigned long	tag; | 
					
						
							|  |  |  | 	unsigned long	ipoff; | 
					
						
							|  |  |  | 	unsigned long	cssel; | 
					
						
							|  |  |  | 	unsigned long	dataoff; | 
					
						
							|  |  |  | 	unsigned long	datasel; | 
					
						
							|  |  |  | 	struct _fpreg	_st[8]; | 
					
						
							|  |  |  | 	unsigned short	status; | 
					
						
							|  |  |  | 	unsigned short	magic;		/* 0xffff = regular FPU data only */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* FXSR FPU environment */ | 
					
						
							|  |  |  | 	unsigned long	_fxsr_env[6];	/* FXSR FPU env is ignored */ | 
					
						
							|  |  |  | 	unsigned long	mxcsr; | 
					
						
							|  |  |  | 	unsigned long	reserved; | 
					
						
							|  |  |  | 	struct _fpxreg	_fxsr_st[8];	/* FXSR FPU reg data is ignored */ | 
					
						
							|  |  |  | 	struct _xmmreg	_xmm[8]; | 
					
						
							|  |  |  | 	unsigned long	padding[56]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define X86_FXSR_MAGIC		0x0000
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-13 16:20:35 +01:00
										 |  |  | #ifdef __KERNEL__
 | 
					
						
							| 
									
										
										
										
											2007-10-23 22:37:24 +02:00
										 |  |  | struct sigcontext { | 
					
						
							|  |  |  | 	unsigned short gs, __gsh; | 
					
						
							|  |  |  | 	unsigned short fs, __fsh; | 
					
						
							|  |  |  | 	unsigned short es, __esh; | 
					
						
							|  |  |  | 	unsigned short ds, __dsh; | 
					
						
							| 
									
										
										
										
											2008-01-30 13:30:56 +01:00
										 |  |  | 	unsigned long di; | 
					
						
							|  |  |  | 	unsigned long si; | 
					
						
							|  |  |  | 	unsigned long bp; | 
					
						
							|  |  |  | 	unsigned long sp; | 
					
						
							|  |  |  | 	unsigned long bx; | 
					
						
							|  |  |  | 	unsigned long dx; | 
					
						
							|  |  |  | 	unsigned long cx; | 
					
						
							|  |  |  | 	unsigned long ax; | 
					
						
							| 
									
										
										
										
											2007-10-23 22:37:24 +02:00
										 |  |  | 	unsigned long trapno; | 
					
						
							|  |  |  | 	unsigned long err; | 
					
						
							| 
									
										
										
										
											2008-01-30 13:30:56 +01:00
										 |  |  | 	unsigned long ip; | 
					
						
							| 
									
										
										
										
											2007-10-23 22:37:24 +02:00
										 |  |  | 	unsigned short cs, __csh; | 
					
						
							| 
									
										
										
										
											2008-01-30 13:30:56 +01:00
										 |  |  | 	unsigned long flags; | 
					
						
							|  |  |  | 	unsigned long sp_at_signal; | 
					
						
							| 
									
										
										
										
											2007-10-23 22:37:24 +02:00
										 |  |  | 	unsigned short ss, __ssh; | 
					
						
							|  |  |  | 	struct _fpstate __user * fpstate; | 
					
						
							|  |  |  | 	unsigned long oldmask; | 
					
						
							|  |  |  | 	unsigned long cr2; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2008-02-13 16:20:35 +01:00
										 |  |  | #else /* __KERNEL__ */
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * User-space might still rely on the old definition: | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct sigcontext { | 
					
						
							|  |  |  | 	unsigned short gs, __gsh; | 
					
						
							|  |  |  | 	unsigned short fs, __fsh; | 
					
						
							|  |  |  | 	unsigned short es, __esh; | 
					
						
							|  |  |  | 	unsigned short ds, __dsh; | 
					
						
							|  |  |  | 	unsigned long edi; | 
					
						
							|  |  |  | 	unsigned long esi; | 
					
						
							|  |  |  | 	unsigned long ebp; | 
					
						
							|  |  |  | 	unsigned long esp; | 
					
						
							|  |  |  | 	unsigned long ebx; | 
					
						
							|  |  |  | 	unsigned long edx; | 
					
						
							|  |  |  | 	unsigned long ecx; | 
					
						
							|  |  |  | 	unsigned long eax; | 
					
						
							|  |  |  | 	unsigned long trapno; | 
					
						
							|  |  |  | 	unsigned long err; | 
					
						
							|  |  |  | 	unsigned long eip; | 
					
						
							|  |  |  | 	unsigned short cs, __csh; | 
					
						
							|  |  |  | 	unsigned long eflags; | 
					
						
							|  |  |  | 	unsigned long esp_at_signal; | 
					
						
							|  |  |  | 	unsigned short ss, __ssh; | 
					
						
							|  |  |  | 	struct _fpstate __user * fpstate; | 
					
						
							|  |  |  | 	unsigned long oldmask; | 
					
						
							|  |  |  | 	unsigned long cr2; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | #endif /* !__KERNEL__ */
 | 
					
						
							| 
									
										
										
										
											2007-10-23 22:37:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #else /* __i386__ */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* FXSAVE frame */ | 
					
						
							|  |  |  | /* Note: reserved1/2 may someday contain valuable data. Always save/restore
 | 
					
						
							|  |  |  |    them when you change signal frames. */ | 
					
						
							|  |  |  | struct _fpstate { | 
					
						
							|  |  |  | 	__u16	cwd; | 
					
						
							|  |  |  | 	__u16	swd; | 
					
						
							|  |  |  | 	__u16	twd;	/* Note this is not the same as the 32bit/x87/FSAVE twd */ | 
					
						
							|  |  |  | 	__u16	fop; | 
					
						
							|  |  |  | 	__u64	rip; | 
					
						
							|  |  |  | 	__u64	rdp; | 
					
						
							|  |  |  | 	__u32	mxcsr; | 
					
						
							|  |  |  | 	__u32	mxcsr_mask; | 
					
						
							|  |  |  | 	__u32	st_space[32];	/* 8*16 bytes for each FP-reg */ | 
					
						
							|  |  |  | 	__u32	xmm_space[64];	/* 16*16 bytes for each XMM-reg  */ | 
					
						
							|  |  |  | 	__u32	reserved2[24]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-13 16:20:35 +01:00
										 |  |  | #ifdef __KERNEL__
 | 
					
						
							| 
									
										
										
										
											2007-10-23 22:37:24 +02:00
										 |  |  | struct sigcontext { | 
					
						
							|  |  |  | 	unsigned long r8; | 
					
						
							|  |  |  | 	unsigned long r9; | 
					
						
							|  |  |  | 	unsigned long r10; | 
					
						
							|  |  |  | 	unsigned long r11; | 
					
						
							|  |  |  | 	unsigned long r12; | 
					
						
							|  |  |  | 	unsigned long r13; | 
					
						
							|  |  |  | 	unsigned long r14; | 
					
						
							|  |  |  | 	unsigned long r15; | 
					
						
							| 
									
										
										
										
											2008-01-30 13:30:56 +01:00
										 |  |  | 	unsigned long di; | 
					
						
							|  |  |  | 	unsigned long si; | 
					
						
							|  |  |  | 	unsigned long bp; | 
					
						
							|  |  |  | 	unsigned long bx; | 
					
						
							|  |  |  | 	unsigned long dx; | 
					
						
							|  |  |  | 	unsigned long ax; | 
					
						
							|  |  |  | 	unsigned long cx; | 
					
						
							|  |  |  | 	unsigned long sp; | 
					
						
							|  |  |  | 	unsigned long ip; | 
					
						
							|  |  |  | 	unsigned long flags; | 
					
						
							| 
									
										
										
										
											2007-10-23 22:37:24 +02:00
										 |  |  | 	unsigned short cs; | 
					
						
							|  |  |  | 	unsigned short gs; | 
					
						
							|  |  |  | 	unsigned short fs; | 
					
						
							|  |  |  | 	unsigned short __pad0; | 
					
						
							|  |  |  | 	unsigned long err; | 
					
						
							|  |  |  | 	unsigned long trapno; | 
					
						
							|  |  |  | 	unsigned long oldmask; | 
					
						
							|  |  |  | 	unsigned long cr2; | 
					
						
							|  |  |  | 	struct _fpstate __user *fpstate;	/* zero when no FPU context */ | 
					
						
							|  |  |  | 	unsigned long reserved1[8]; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2008-02-13 16:20:35 +01:00
										 |  |  | #else /* __KERNEL__ */
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * User-space might still rely on the old definition: | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct sigcontext { | 
					
						
							|  |  |  | 	unsigned long r8; | 
					
						
							|  |  |  | 	unsigned long r9; | 
					
						
							|  |  |  | 	unsigned long r10; | 
					
						
							|  |  |  | 	unsigned long r11; | 
					
						
							|  |  |  | 	unsigned long r12; | 
					
						
							|  |  |  | 	unsigned long r13; | 
					
						
							|  |  |  | 	unsigned long r14; | 
					
						
							|  |  |  | 	unsigned long r15; | 
					
						
							|  |  |  | 	unsigned long rdi; | 
					
						
							|  |  |  | 	unsigned long rsi; | 
					
						
							|  |  |  | 	unsigned long rbp; | 
					
						
							|  |  |  | 	unsigned long rbx; | 
					
						
							|  |  |  | 	unsigned long rdx; | 
					
						
							|  |  |  | 	unsigned long rax; | 
					
						
							|  |  |  | 	unsigned long rcx; | 
					
						
							|  |  |  | 	unsigned long rsp; | 
					
						
							|  |  |  | 	unsigned long rip; | 
					
						
							|  |  |  | 	unsigned long eflags;		/* RFLAGS */ | 
					
						
							|  |  |  | 	unsigned short cs; | 
					
						
							|  |  |  | 	unsigned short gs; | 
					
						
							|  |  |  | 	unsigned short fs; | 
					
						
							|  |  |  | 	unsigned short __pad0; | 
					
						
							|  |  |  | 	unsigned long err; | 
					
						
							|  |  |  | 	unsigned long trapno; | 
					
						
							|  |  |  | 	unsigned long oldmask; | 
					
						
							|  |  |  | 	unsigned long cr2; | 
					
						
							|  |  |  | 	struct _fpstate __user *fpstate;	/* zero when no FPU context */ | 
					
						
							|  |  |  | 	unsigned long reserved1[8]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | #endif /* !__KERNEL__ */
 | 
					
						
							| 
									
										
										
										
											2007-10-23 22:37:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /* !__i386__ */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-10-11 11:20:03 +02:00
										 |  |  | #endif
 |