Home | History | Annotate | Download | only in asm-x86
      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 (at) 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  */
     22 struct _fpreg {
     23 	unsigned short significand[4];
     24 	unsigned short exponent;
     25 };
     26 
     27 struct _fpxreg {
     28 	unsigned short significand[4];
     29 	unsigned short exponent;
     30 	unsigned short padding[3];
     31 };
     32 
     33 struct _xmmreg {
     34 	unsigned long element[4];
     35 };
     36 
     37 struct _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 struct sigcontext {
     62 	unsigned short gs, __gsh;
     63 	unsigned short fs, __fsh;
     64 	unsigned short es, __esh;
     65 	unsigned short ds, __dsh;
     66 	unsigned long edi;
     67 	unsigned long esi;
     68 	unsigned long ebp;
     69 	unsigned long esp;
     70 	unsigned long ebx;
     71 	unsigned long edx;
     72 	unsigned long ecx;
     73 	unsigned long eax;
     74 	unsigned long trapno;
     75 	unsigned long err;
     76 	unsigned long eip;
     77 	unsigned short cs, __csh;
     78 	unsigned long eflags;
     79 	unsigned long esp_at_signal;
     80 	unsigned short ss, __ssh;
     81 	struct _fpstate __user * fpstate;
     82 	unsigned long oldmask;
     83 	unsigned long cr2;
     84 };
     85 
     86 #else /* __i386__ */
     87 
     88 /* FXSAVE frame */
     89 /* Note: reserved1/2 may someday contain valuable data. Always save/restore
     90    them when you change signal frames. */
     91 struct _fpstate {
     92 	__u16	cwd;
     93 	__u16	swd;
     94 	__u16	twd;	/* Note this is not the same as the 32bit/x87/FSAVE twd */
     95 	__u16	fop;
     96 	__u64	rip;
     97 	__u64	rdp;
     98 	__u32	mxcsr;
     99 	__u32	mxcsr_mask;
    100 	__u32	st_space[32];	/* 8*16 bytes for each FP-reg */
    101 	__u32	xmm_space[64];	/* 16*16 bytes for each XMM-reg  */
    102 	__u32	reserved2[24];
    103 };
    104 
    105 struct sigcontext {
    106 	unsigned long r8;
    107 	unsigned long r9;
    108 	unsigned long r10;
    109 	unsigned long r11;
    110 	unsigned long r12;
    111 	unsigned long r13;
    112 	unsigned long r14;
    113 	unsigned long r15;
    114 	unsigned long rdi;
    115 	unsigned long rsi;
    116 	unsigned long rbp;
    117 	unsigned long rbx;
    118 	unsigned long rdx;
    119 	unsigned long rax;
    120 	unsigned long rcx;
    121 	unsigned long rsp;
    122 	unsigned long rip;
    123 	unsigned long eflags;		/* RFLAGS */
    124 	unsigned short cs;
    125 	unsigned short gs;
    126 	unsigned short fs;
    127 	unsigned short __pad0;
    128 	unsigned long err;
    129 	unsigned long trapno;
    130 	unsigned long oldmask;
    131 	unsigned long cr2;
    132 	struct _fpstate __user *fpstate;	/* zero when no FPU context */
    133 	unsigned long reserved1[8];
    134 };
    135 
    136 #endif /* !__i386__ */
    137 
    138 #endif
    139