sigcontext.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. struct sigcontext {
  54. unsigned short gs, __gsh;
  55. unsigned short fs, __fsh;
  56. unsigned short es, __esh;
  57. unsigned short ds, __dsh;
  58. unsigned long edi;
  59. unsigned long esi;
  60. unsigned long ebp;
  61. unsigned long esp;
  62. unsigned long ebx;
  63. unsigned long edx;
  64. unsigned long ecx;
  65. unsigned long eax;
  66. unsigned long trapno;
  67. unsigned long err;
  68. unsigned long eip;
  69. unsigned short cs, __csh;
  70. unsigned long eflags;
  71. unsigned long esp_at_signal;
  72. unsigned short ss, __ssh;
  73. struct _fpstate __user * fpstate;
  74. unsigned long oldmask;
  75. unsigned long cr2;
  76. };
  77. #else /* __i386__ */
  78. /* FXSAVE frame */
  79. /* Note: reserved1/2 may someday contain valuable data. Always save/restore
  80. them when you change signal frames. */
  81. struct _fpstate {
  82. __u16 cwd;
  83. __u16 swd;
  84. __u16 twd; /* Note this is not the same as the 32bit/x87/FSAVE twd */
  85. __u16 fop;
  86. __u64 rip;
  87. __u64 rdp;
  88. __u32 mxcsr;
  89. __u32 mxcsr_mask;
  90. __u32 st_space[32]; /* 8*16 bytes for each FP-reg */
  91. __u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg */
  92. __u32 reserved2[24];
  93. };
  94. struct sigcontext {
  95. unsigned long r8;
  96. unsigned long r9;
  97. unsigned long r10;
  98. unsigned long r11;
  99. unsigned long r12;
  100. unsigned long r13;
  101. unsigned long r14;
  102. unsigned long r15;
  103. unsigned long rdi;
  104. unsigned long rsi;
  105. unsigned long rbp;
  106. unsigned long rbx;
  107. unsigned long rdx;
  108. unsigned long rax;
  109. unsigned long rcx;
  110. unsigned long rsp;
  111. unsigned long rip;
  112. unsigned long eflags; /* RFLAGS */
  113. unsigned short cs;
  114. unsigned short gs;
  115. unsigned short fs;
  116. unsigned short __pad0;
  117. unsigned long err;
  118. unsigned long trapno;
  119. unsigned long oldmask;
  120. unsigned long cr2;
  121. struct _fpstate __user *fpstate; /* zero when no FPU context */
  122. unsigned long reserved1[8];
  123. };
  124. #endif /* !__i386__ */
  125. #endif