sigcontext.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. #ifndef _ASM_X86_SIGCONTEXT_H
  2. #define _ASM_X86_SIGCONTEXT_H
  3. #include <linux/compiler.h>
  4. #include <asm/types.h>
  5. #ifdef __i386__
  6. /*
  7. * As documented in the iBCS2 standard..
  8. *
  9. * The first part of "struct _fpstate" is just the normal i387
  10. * hardware setup, the extra "status" word is used to save the
  11. * coprocessor status word before entering the handler.
  12. *
  13. * Pentium III FXSR, SSE support
  14. * Gareth Hughes <gareth@valinux.com>, May 2000
  15. *
  16. * The FPU state data structure has had to grow to accommodate the
  17. * extended FPU state required by the Streaming SIMD Extensions.
  18. * There is no documented standard to accomplish this at the moment.
  19. */
  20. struct _fpreg {
  21. unsigned short significand[4];
  22. unsigned short exponent;
  23. };
  24. struct _fpxreg {
  25. unsigned short significand[4];
  26. unsigned short exponent;
  27. unsigned short padding[3];
  28. };
  29. struct _xmmreg {
  30. unsigned long element[4];
  31. };
  32. struct _fpstate {
  33. /* Regular FPU environment */
  34. unsigned long cw;
  35. unsigned long sw;
  36. unsigned long tag;
  37. unsigned long ipoff;
  38. unsigned long cssel;
  39. unsigned long dataoff;
  40. unsigned long datasel;
  41. struct _fpreg _st[8];
  42. unsigned short status;
  43. unsigned short magic; /* 0xffff = regular FPU data only */
  44. /* FXSR FPU environment */
  45. unsigned long _fxsr_env[6]; /* FXSR FPU env is ignored */
  46. unsigned long mxcsr;
  47. unsigned long reserved;
  48. struct _fpxreg _fxsr_st[8]; /* FXSR FPU reg data is ignored */
  49. struct _xmmreg _xmm[8];
  50. unsigned long padding[56];
  51. };
  52. #define X86_FXSR_MAGIC 0x0000
  53. #ifdef __KERNEL__
  54. struct sigcontext {
  55. unsigned short gs, __gsh;
  56. unsigned short fs, __fsh;
  57. unsigned short es, __esh;
  58. unsigned short ds, __dsh;
  59. unsigned long di;
  60. unsigned long si;
  61. unsigned long bp;
  62. unsigned long sp;
  63. unsigned long bx;
  64. unsigned long dx;
  65. unsigned long cx;
  66. unsigned long ax;
  67. unsigned long trapno;
  68. unsigned long err;
  69. unsigned long ip;
  70. unsigned short cs, __csh;
  71. unsigned long flags;
  72. unsigned long sp_at_signal;
  73. unsigned short ss, __ssh;
  74. struct _fpstate __user *fpstate;
  75. unsigned long oldmask;
  76. unsigned long cr2;
  77. };
  78. #else /* __KERNEL__ */
  79. /*
  80. * User-space might still rely on the old definition:
  81. */
  82. struct sigcontext {
  83. unsigned short gs, __gsh;
  84. unsigned short fs, __fsh;
  85. unsigned short es, __esh;
  86. unsigned short ds, __dsh;
  87. unsigned long edi;
  88. unsigned long esi;
  89. unsigned long ebp;
  90. unsigned long esp;
  91. unsigned long ebx;
  92. unsigned long edx;
  93. unsigned long ecx;
  94. unsigned long eax;
  95. unsigned long trapno;
  96. unsigned long err;
  97. unsigned long eip;
  98. unsigned short cs, __csh;
  99. unsigned long eflags;
  100. unsigned long esp_at_signal;
  101. unsigned short ss, __ssh;
  102. struct _fpstate __user *fpstate;
  103. unsigned long oldmask;
  104. unsigned long cr2;
  105. };
  106. #endif /* !__KERNEL__ */
  107. #else /* __i386__ */
  108. /* FXSAVE frame */
  109. /* Note: reserved1/2 may someday contain valuable data. Always save/restore
  110. them when you change signal frames. */
  111. struct _fpstate {
  112. __u16 cwd;
  113. __u16 swd;
  114. __u16 twd; /* Note this is not the same as the
  115. 32bit/x87/FSAVE twd */
  116. __u16 fop;
  117. __u64 rip;
  118. __u64 rdp;
  119. __u32 mxcsr;
  120. __u32 mxcsr_mask;
  121. __u32 st_space[32]; /* 8*16 bytes for each FP-reg */
  122. __u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg */
  123. __u32 reserved2[24];
  124. };
  125. #ifdef __KERNEL__
  126. struct sigcontext {
  127. unsigned long r8;
  128. unsigned long r9;
  129. unsigned long r10;
  130. unsigned long r11;
  131. unsigned long r12;
  132. unsigned long r13;
  133. unsigned long r14;
  134. unsigned long r15;
  135. unsigned long di;
  136. unsigned long si;
  137. unsigned long bp;
  138. unsigned long bx;
  139. unsigned long dx;
  140. unsigned long ax;
  141. unsigned long cx;
  142. unsigned long sp;
  143. unsigned long ip;
  144. unsigned long flags;
  145. unsigned short cs;
  146. unsigned short gs;
  147. unsigned short fs;
  148. unsigned short __pad0;
  149. unsigned long err;
  150. unsigned long trapno;
  151. unsigned long oldmask;
  152. unsigned long cr2;
  153. struct _fpstate __user *fpstate; /* zero when no FPU context */
  154. unsigned long reserved1[8];
  155. };
  156. #else /* __KERNEL__ */
  157. /*
  158. * User-space might still rely on the old definition:
  159. */
  160. struct sigcontext {
  161. unsigned long r8;
  162. unsigned long r9;
  163. unsigned long r10;
  164. unsigned long r11;
  165. unsigned long r12;
  166. unsigned long r13;
  167. unsigned long r14;
  168. unsigned long r15;
  169. unsigned long rdi;
  170. unsigned long rsi;
  171. unsigned long rbp;
  172. unsigned long rbx;
  173. unsigned long rdx;
  174. unsigned long rax;
  175. unsigned long rcx;
  176. unsigned long rsp;
  177. unsigned long rip;
  178. unsigned long eflags; /* RFLAGS */
  179. unsigned short cs;
  180. unsigned short gs;
  181. unsigned short fs;
  182. unsigned short __pad0;
  183. unsigned long err;
  184. unsigned long trapno;
  185. unsigned long oldmask;
  186. unsigned long cr2;
  187. struct _fpstate __user *fpstate; /* zero when no FPU context */
  188. unsigned long reserved1[8];
  189. };
  190. #endif /* !__KERNEL__ */
  191. #endif /* !__i386__ */
  192. #endif