~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/x86/include/uapi/asm/sigcontext.h

Version: ~ [ linux-5.6-rc1 ] ~ [ linux-5.5.2 ] ~ [ linux-5.4.17 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.102 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.170 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.213 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.213 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.81 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef _UAPI_ASM_X86_SIGCONTEXT_H
  2 #define _UAPI_ASM_X86_SIGCONTEXT_H
  3 
  4 #include <linux/compiler.h>
  5 #include <linux/types.h>
  6 
  7 #define FP_XSTATE_MAGIC1        0x46505853U
  8 #define FP_XSTATE_MAGIC2        0x46505845U
  9 #define FP_XSTATE_MAGIC2_SIZE   sizeof(FP_XSTATE_MAGIC2)
 10 
 11 /*
 12  * bytes 464..511 in the current 512byte layout of fxsave/fxrstor frame
 13  * are reserved for SW usage. On cpu's supporting xsave/xrstor, these bytes
 14  * are used to extended the fpstate pointer in the sigcontext, which now
 15  * includes the extended state information along with fpstate information.
 16  *
 17  * Presence of FP_XSTATE_MAGIC1 at the beginning of this SW reserved
 18  * area and FP_XSTATE_MAGIC2 at the end of memory layout
 19  * (extended_size - FP_XSTATE_MAGIC2_SIZE) indicates the presence of the
 20  * extended state information in the memory layout pointed by the fpstate
 21  * pointer in sigcontext.
 22  */
 23 struct _fpx_sw_bytes {
 24         __u32 magic1;           /* FP_XSTATE_MAGIC1 */
 25         __u32 extended_size;    /* total size of the layout referred by
 26                                  * fpstate pointer in the sigcontext.
 27                                  */
 28         __u64 xstate_bv;
 29                                 /* feature bit mask (including fp/sse/extended
 30                                  * state) that is present in the memory
 31                                  * layout.
 32                                  */
 33         __u32 xstate_size;      /* actual xsave state size, based on the
 34                                  * features saved in the layout.
 35                                  * 'extended_size' will be greater than
 36                                  * 'xstate_size'.
 37                                  */
 38         __u32 padding[7];       /*  for future use. */
 39 };
 40 
 41 #ifdef __i386__
 42 /*
 43  * As documented in the iBCS2 standard..
 44  *
 45  * The first part of "struct _fpstate" is just the normal i387
 46  * hardware setup, the extra "status" word is used to save the
 47  * coprocessor status word before entering the handler.
 48  *
 49  * Pentium III FXSR, SSE support
 50  *      Gareth Hughes <gareth@valinux.com>, May 2000
 51  *
 52  * The FPU state data structure has had to grow to accommodate the
 53  * extended FPU state required by the Streaming SIMD Extensions.
 54  * There is no documented standard to accomplish this at the moment.
 55  */
 56 struct _fpreg {
 57         unsigned short significand[4];
 58         unsigned short exponent;
 59 };
 60 
 61 struct _fpxreg {
 62         unsigned short significand[4];
 63         unsigned short exponent;
 64         unsigned short padding[3];
 65 };
 66 
 67 struct _xmmreg {
 68         unsigned long element[4];
 69 };
 70 
 71 struct _fpstate {
 72         /* Regular FPU environment */
 73         unsigned long   cw;
 74         unsigned long   sw;
 75         unsigned long   tag;
 76         unsigned long   ipoff;
 77         unsigned long   cssel;
 78         unsigned long   dataoff;
 79         unsigned long   datasel;
 80         struct _fpreg   _st[8];
 81         unsigned short  status;
 82         unsigned short  magic;          /* 0xffff = regular FPU data only */
 83 
 84         /* FXSR FPU environment */
 85         unsigned long   _fxsr_env[6];   /* FXSR FPU env is ignored */
 86         unsigned long   mxcsr;
 87         unsigned long   reserved;
 88         struct _fpxreg  _fxsr_st[8];    /* FXSR FPU reg data is ignored */
 89         struct _xmmreg  _xmm[8];
 90         unsigned long   padding1[44];
 91 
 92         union {
 93                 unsigned long   padding2[12];
 94                 struct _fpx_sw_bytes sw_reserved; /* represents the extended
 95                                                    * state info */
 96         };
 97 };
 98 
 99 #define X86_FXSR_MAGIC          0x0000
100 
101 #ifndef __KERNEL__
102 /*
103  * User-space might still rely on the old definition:
104  */
105 struct sigcontext {
106         unsigned short gs, __gsh;
107         unsigned short fs, __fsh;
108         unsigned short es, __esh;
109         unsigned short ds, __dsh;
110         unsigned long edi;
111         unsigned long esi;
112         unsigned long ebp;
113         unsigned long esp;
114         unsigned long ebx;
115         unsigned long edx;
116         unsigned long ecx;
117         unsigned long eax;
118         unsigned long trapno;
119         unsigned long err;
120         unsigned long eip;
121         unsigned short cs, __csh;
122         unsigned long eflags;
123         unsigned long esp_at_signal;
124         unsigned short ss, __ssh;
125         struct _fpstate __user *fpstate;
126         unsigned long oldmask;
127         unsigned long cr2;
128 };
129 #endif /* !__KERNEL__ */
130 
131 #else /* __i386__ */
132 
133 /* FXSAVE frame */
134 /* Note: reserved1/2 may someday contain valuable data. Always save/restore
135    them when you change signal frames. */
136 struct _fpstate {
137         __u16   cwd;
138         __u16   swd;
139         __u16   twd;            /* Note this is not the same as the
140                                    32bit/x87/FSAVE twd */
141         __u16   fop;
142         __u64   rip;
143         __u64   rdp;
144         __u32   mxcsr;
145         __u32   mxcsr_mask;
146         __u32   st_space[32];   /* 8*16 bytes for each FP-reg */
147         __u32   xmm_space[64];  /* 16*16 bytes for each XMM-reg  */
148         __u32   reserved2[12];
149         union {
150                 __u32   reserved3[12];
151                 struct _fpx_sw_bytes sw_reserved; /* represents the extended
152                                                    * state information */
153         };
154 };
155 
156 #ifndef __KERNEL__
157 /*
158  * User-space might still rely on the old definition:
159  */
160 struct sigcontext {
161         __u64 r8;
162         __u64 r9;
163         __u64 r10;
164         __u64 r11;
165         __u64 r12;
166         __u64 r13;
167         __u64 r14;
168         __u64 r15;
169         __u64 rdi;
170         __u64 rsi;
171         __u64 rbp;
172         __u64 rbx;
173         __u64 rdx;
174         __u64 rax;
175         __u64 rcx;
176         __u64 rsp;
177         __u64 rip;
178         __u64 eflags;           /* RFLAGS */
179         __u16 cs;
180         __u16 gs;
181         __u16 fs;
182         __u16 __pad0;
183         __u64 err;
184         __u64 trapno;
185         __u64 oldmask;
186         __u64 cr2;
187         struct _fpstate __user *fpstate;        /* zero when no FPU context */
188 #ifdef __ILP32__
189         __u32 __fpstate_pad;
190 #endif
191         __u64 reserved1[8];
192 };
193 #endif /* !__KERNEL__ */
194 
195 #endif /* !__i386__ */
196 
197 struct _xsave_hdr {
198         __u64 xstate_bv;
199         __u64 reserved1[2];
200         __u64 reserved2[5];
201 };
202 
203 struct _ymmh_state {
204         /* 16 * 16 bytes for each YMMH-reg */
205         __u32 ymmh_space[64];
206 };
207 
208 /*
209  * Extended state pointed by the fpstate pointer in the sigcontext.
210  * In addition to the fpstate, information encoded in the xstate_hdr
211  * indicates the presence of other extended state information
212  * supported by the processor and OS.
213  */
214 struct _xstate {
215         struct _fpstate fpstate;
216         struct _xsave_hdr xstate_hdr;
217         struct _ymmh_state ymmh;
218         /* new processor state extensions go here */
219 };
220 
221 #endif /* _UAPI_ASM_X86_SIGCONTEXT_H */
222 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp