sigcontext.h
001: #ifndef _ASM_X86_SIGCONTEXT_H
002: #define _ASM_X86_SIGCONTEXT_H
003:
004:
005: #include <linux/types.h>
006:
007: #define FP_XSTATE_MAGIC1 0x46505853U
008: #define FP_XSTATE_MAGIC2 0x46505845U
009: #define FP_XSTATE_MAGIC2_SIZE sizeof(FP_XSTATE_MAGIC2)
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023: struct _fpx_sw_bytes {
024: __u32 magic1;
025: __u32 extended_size;
026:
027:
028: __u64 xstate_bv;
029:
030:
031:
032:
033: __u32 xstate_size;
034:
035:
036:
037:
038: __u32 padding[7];
039: };
040:
041: #ifdef __i386__
042:
043:
044:
045:
046:
047:
048:
049:
050: <gareth@valinux.com>
051:
052:
053:
054:
055:
056: struct _fpreg {
057: unsigned short significand[4];
058: unsigned short exponent;
059: };
060:
061: struct _fpxreg {
062: unsigned short significand[4];
063: unsigned short exponent;
064: unsigned short padding[3];
065: };
066:
067: struct _xmmreg {
068: unsigned long element[4];
069: };
070:
071: struct _fpstate {
072:
073: unsigned long cw;
074: unsigned long sw;
075: unsigned long tag;
076: unsigned long ipoff;
077: unsigned long cssel;
078: unsigned long dataoff;
079: unsigned long datasel;
080: struct _fpreg _st[8];
081: unsigned short status;
082: unsigned short magic;
083:
084:
085: unsigned long _fxsr_env[6];
086: unsigned long mxcsr;
087: unsigned long reserved;
088: struct _fpxreg _fxsr_st[8];
089: struct _xmmreg _xmm[8];
090: unsigned long padding1[44];
091:
092: union {
093: unsigned long padding2[12];
094: struct _fpx_sw_bytes sw_reserved;
095:
096: };
097: };
098:
099: #define X86_FXSR_MAGIC 0x0000
100:
101:
102:
103:
104: struct sigcontext {
105: unsigned short gs, __gsh;
106: unsigned short fs, __fsh;
107: unsigned short es, __esh;
108: unsigned short ds, __dsh;
109: unsigned long edi;
110: unsigned long esi;
111: unsigned long ebp;
112: unsigned long esp;
113: unsigned long ebx;
114: unsigned long edx;
115: unsigned long ecx;
116: unsigned long eax;
117: unsigned long trapno;
118: unsigned long err;
119: unsigned long eip;
120: unsigned short cs, __csh;
121: unsigned long eflags;
122: unsigned long esp_at_signal;
123: unsigned short ss, __ssh;
124: struct _fpstate *fpstate;
125: unsigned long oldmask;
126: unsigned long cr2;
127: };
128:
129: #else
130:
131:
132:
133:
134: struct _fpstate {
135: __u16 cwd;
136: __u16 swd;
137: __u16 twd;
138:
139: __u16 fop;
140: __u64 rip;
141: __u64 rdp;
142: __u32 mxcsr;
143: __u32 mxcsr_mask;
144: __u32 st_space[32];
145: __u32 xmm_space[64];
146: __u32 reserved2[12];
147: union {
148: __u32 reserved3[12];
149: struct _fpx_sw_bytes sw_reserved;
150:
151: };
152: };
153:
154:
155:
156:
157: struct sigcontext {
158: unsigned long r8;
159: unsigned long r9;
160: unsigned long r10;
161: unsigned long r11;
162: unsigned long r12;
163: unsigned long r13;
164: unsigned long r14;
165: unsigned long r15;
166: unsigned long rdi;
167: unsigned long rsi;
168: unsigned long rbp;
169: unsigned long rbx;
170: unsigned long rdx;
171: unsigned long rax;
172: unsigned long rcx;
173: unsigned long rsp;
174: unsigned long rip;
175: unsigned long eflags;
176: unsigned short cs;
177: unsigned short gs;
178: unsigned short fs;
179: unsigned short __pad0;
180: unsigned long err;
181: unsigned long trapno;
182: unsigned long oldmask;
183: unsigned long cr2;
184: struct _fpstate *fpstate;
185: unsigned long reserved1[8];
186: };
187:
188: #endif
189:
190: struct _xsave_hdr {
191: __u64 xstate_bv;
192: __u64 reserved1[2];
193: __u64 reserved2[5];
194: };
195:
196: struct _ymmh_state {
197:
198: __u32 ymmh_space[64];
199: };
200:
201:
202:
203:
204:
205:
206:
207: struct _xstate {
208: struct _fpstate fpstate;
209: struct _xsave_hdr xstate_hdr;
210: struct _ymmh_state ymmh;
211:
212: };
213:
214: #endif
215:
© Andrew Scott 2006 -
2025,
All Rights Reserved