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