File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/uapi/asm/sigcontext.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       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: