Subversion Repositories Kolibri OS

Rev

Rev 6082 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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.