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