Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.27-rc9 205 lines 4.6 kB view raw
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 */ 22struct _fpreg { 23 unsigned short significand[4]; 24 unsigned short exponent; 25}; 26 27struct _fpxreg { 28 unsigned short significand[4]; 29 unsigned short exponent; 30 unsigned short padding[3]; 31}; 32 33struct _xmmreg { 34 unsigned long element[4]; 35}; 36 37struct _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#ifdef __KERNEL__ 62struct sigcontext { 63 unsigned short gs, __gsh; 64 unsigned short fs, __fsh; 65 unsigned short es, __esh; 66 unsigned short ds, __dsh; 67 unsigned long di; 68 unsigned long si; 69 unsigned long bp; 70 unsigned long sp; 71 unsigned long bx; 72 unsigned long dx; 73 unsigned long cx; 74 unsigned long ax; 75 unsigned long trapno; 76 unsigned long err; 77 unsigned long ip; 78 unsigned short cs, __csh; 79 unsigned long flags; 80 unsigned long sp_at_signal; 81 unsigned short ss, __ssh; 82 struct _fpstate __user *fpstate; 83 unsigned long oldmask; 84 unsigned long cr2; 85}; 86#else /* __KERNEL__ */ 87/* 88 * User-space might still rely on the old definition: 89 */ 90struct sigcontext { 91 unsigned short gs, __gsh; 92 unsigned short fs, __fsh; 93 unsigned short es, __esh; 94 unsigned short ds, __dsh; 95 unsigned long edi; 96 unsigned long esi; 97 unsigned long ebp; 98 unsigned long esp; 99 unsigned long ebx; 100 unsigned long edx; 101 unsigned long ecx; 102 unsigned long eax; 103 unsigned long trapno; 104 unsigned long err; 105 unsigned long eip; 106 unsigned short cs, __csh; 107 unsigned long eflags; 108 unsigned long esp_at_signal; 109 unsigned short ss, __ssh; 110 struct _fpstate __user *fpstate; 111 unsigned long oldmask; 112 unsigned long cr2; 113}; 114#endif /* !__KERNEL__ */ 115 116#else /* __i386__ */ 117 118/* FXSAVE frame */ 119/* Note: reserved1/2 may someday contain valuable data. Always save/restore 120 them when you change signal frames. */ 121struct _fpstate { 122 __u16 cwd; 123 __u16 swd; 124 __u16 twd; /* Note this is not the same as the 125 32bit/x87/FSAVE twd */ 126 __u16 fop; 127 __u64 rip; 128 __u64 rdp; 129 __u32 mxcsr; 130 __u32 mxcsr_mask; 131 __u32 st_space[32]; /* 8*16 bytes for each FP-reg */ 132 __u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg */ 133 __u32 reserved2[24]; 134}; 135 136#ifdef __KERNEL__ 137struct sigcontext { 138 unsigned long r8; 139 unsigned long r9; 140 unsigned long r10; 141 unsigned long r11; 142 unsigned long r12; 143 unsigned long r13; 144 unsigned long r14; 145 unsigned long r15; 146 unsigned long di; 147 unsigned long si; 148 unsigned long bp; 149 unsigned long bx; 150 unsigned long dx; 151 unsigned long ax; 152 unsigned long cx; 153 unsigned long sp; 154 unsigned long ip; 155 unsigned long flags; 156 unsigned short cs; 157 unsigned short gs; 158 unsigned short fs; 159 unsigned short __pad0; 160 unsigned long err; 161 unsigned long trapno; 162 unsigned long oldmask; 163 unsigned long cr2; 164 struct _fpstate __user *fpstate; /* zero when no FPU context */ 165 unsigned long reserved1[8]; 166}; 167#else /* __KERNEL__ */ 168/* 169 * User-space might still rely on the old definition: 170 */ 171struct sigcontext { 172 unsigned long r8; 173 unsigned long r9; 174 unsigned long r10; 175 unsigned long r11; 176 unsigned long r12; 177 unsigned long r13; 178 unsigned long r14; 179 unsigned long r15; 180 unsigned long rdi; 181 unsigned long rsi; 182 unsigned long rbp; 183 unsigned long rbx; 184 unsigned long rdx; 185 unsigned long rax; 186 unsigned long rcx; 187 unsigned long rsp; 188 unsigned long rip; 189 unsigned long eflags; /* RFLAGS */ 190 unsigned short cs; 191 unsigned short gs; 192 unsigned short fs; 193 unsigned short __pad0; 194 unsigned long err; 195 unsigned long trapno; 196 unsigned long oldmask; 197 unsigned long cr2; 198 struct _fpstate __user *fpstate; /* zero when no FPU context */ 199 unsigned long reserved1[8]; 200}; 201#endif /* !__KERNEL__ */ 202 203#endif /* !__i386__ */ 204 205#endif