Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 |