1 | /* Copyright (C) 2002-2017 Free Software Foundation, Inc. |
---|---|

2 | This file is part of the GNU C Library. |

3 | |

4 | The GNU C Library is free software; you can redistribute it and/or |

5 | modify it under the terms of the GNU Lesser General Public |

6 | License as published by the Free Software Foundation; either |

7 | version 2.1 of the License, or (at your option) any later version. |

8 | |

9 | The GNU C Library is distributed in the hope that it will be useful, |

10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |

11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |

12 | Lesser General Public License for more details. |

13 | |

14 | You should have received a copy of the GNU Lesser General Public |

15 | License along with the GNU C Library; if not, see |

16 | <http://www.gnu.org/licenses/>. */ |

17 | |

18 | #ifndef _BITS_SIGCONTEXT_H |

19 | #define _BITS_SIGCONTEXT_H 1 |

20 | |

21 | #if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H |

22 | # error "Never use <bits/sigcontext.h> directly; include <signal.h> instead." |

23 | #endif |

24 | |

25 | #define FP_XSTATE_MAGIC1 0x46505853U |

26 | #define FP_XSTATE_MAGIC2 0x46505845U |

27 | #define FP_XSTATE_MAGIC2_SIZE sizeof(FP_XSTATE_MAGIC2) |

28 | |

29 | struct _fpx_sw_bytes |

30 | { |

31 | __uint32_t magic1; |

32 | __uint32_t extended_size; |

33 | __uint64_t xstate_bv; |

34 | __uint32_t xstate_size; |

35 | __uint32_t padding[7]; |

36 | }; |

37 | |

38 | struct _fpreg |

39 | { |

40 | unsigned short significand[4]; |

41 | unsigned short exponent; |

42 | }; |

43 | |

44 | struct _fpxreg |

45 | { |

46 | unsigned short significand[4]; |

47 | unsigned short exponent; |

48 | unsigned short padding[3]; |

49 | }; |

50 | |

51 | struct _xmmreg |

52 | { |

53 | __uint32_t element[4]; |

54 | }; |

55 | |

56 | |

57 | |

58 | #ifndef __x86_64__ |

59 | |

60 | struct _fpstate |

61 | { |

62 | /* Regular FPU environment. */ |

63 | __uint32_t cw; |

64 | __uint32_t sw; |

65 | __uint32_t tag; |

66 | __uint32_t ipoff; |

67 | __uint32_t cssel; |

68 | __uint32_t dataoff; |

69 | __uint32_t datasel; |

70 | struct _fpreg _st[8]; |

71 | unsigned short status; |

72 | unsigned short magic; |

73 | |

74 | /* FXSR FPU environment. */ |

75 | __uint32_t _fxsr_env[6]; |

76 | __uint32_t mxcsr; |

77 | __uint32_t reserved; |

78 | struct _fpxreg _fxsr_st[8]; |

79 | struct _xmmreg _xmm[8]; |

80 | __uint32_t padding[56]; |

81 | }; |

82 | |

83 | #ifndef sigcontext_struct |

84 | /* Kernel headers before 2.1.1 define a struct sigcontext_struct, but |

85 | we need sigcontext. Some packages have come to rely on |

86 | sigcontext_struct being defined on 32-bit x86, so define this for |

87 | their benefit. */ |

88 | # define sigcontext_struct sigcontext |

89 | #endif |

90 | |

91 | #define X86_FXSR_MAGIC 0x0000 |

92 | |

93 | struct sigcontext |

94 | { |

95 | unsigned short gs, __gsh; |

96 | unsigned short fs, __fsh; |

97 | unsigned short es, __esh; |

98 | unsigned short ds, __dsh; |

99 | unsigned long edi; |

100 | unsigned long esi; |

101 | unsigned long ebp; |

102 | unsigned long esp; |

103 | unsigned long ebx; |

104 | unsigned long edx; |

105 | unsigned long ecx; |

106 | unsigned long eax; |

107 | unsigned long trapno; |

108 | unsigned long err; |

109 | unsigned long eip; |

110 | unsigned short cs, __csh; |

111 | unsigned long eflags; |

112 | unsigned long esp_at_signal; |

113 | unsigned short ss, __ssh; |

114 | struct _fpstate * fpstate; |

115 | unsigned long oldmask; |

116 | unsigned long cr2; |

117 | }; |

118 | |

119 | #else /* __x86_64__ */ |

120 | |

121 | struct _fpstate |

122 | { |

123 | /* FPU environment matching the 64-bit FXSAVE layout. */ |

124 | __uint16_t cwd; |

125 | __uint16_t swd; |

126 | __uint16_t ftw; |

127 | __uint16_t fop; |

128 | __uint64_t rip; |

129 | __uint64_t rdp; |

130 | __uint32_t mxcsr; |

131 | __uint32_t mxcr_mask; |

132 | struct _fpxreg _st[8]; |

133 | struct _xmmreg _xmm[16]; |

134 | __uint32_t padding[24]; |

135 | }; |

136 | |

137 | struct sigcontext |

138 | { |

139 | __uint64_t r8; |

140 | __uint64_t r9; |

141 | __uint64_t r10; |

142 | __uint64_t r11; |

143 | __uint64_t r12; |

144 | __uint64_t r13; |

145 | __uint64_t r14; |

146 | __uint64_t r15; |

147 | __uint64_t rdi; |

148 | __uint64_t rsi; |

149 | __uint64_t rbp; |

150 | __uint64_t rbx; |

151 | __uint64_t rdx; |

152 | __uint64_t rax; |

153 | __uint64_t rcx; |

154 | __uint64_t rsp; |

155 | __uint64_t rip; |

156 | __uint64_t eflags; |

157 | unsigned short cs; |

158 | unsigned short gs; |

159 | unsigned short fs; |

160 | unsigned short __pad0; |

161 | __uint64_t err; |

162 | __uint64_t trapno; |

163 | __uint64_t oldmask; |

164 | __uint64_t cr2; |

165 | __extension__ union |

166 | { |

167 | struct _fpstate * fpstate; |

168 | __uint64_t __fpstate_word; |

169 | }; |

170 | __uint64_t __reserved1 [8]; |

171 | }; |

172 | |

173 | #endif /* __x86_64__ */ |

174 | |

175 | struct _xsave_hdr |

176 | { |

177 | __uint64_t xstate_bv; |

178 | __uint64_t reserved1[2]; |

179 | __uint64_t reserved2[5]; |

180 | }; |

181 | |

182 | struct _ymmh_state |

183 | { |

184 | __uint32_t ymmh_space[64]; |

185 | }; |

186 | |

187 | struct _xstate |

188 | { |

189 | struct _fpstate fpstate; |

190 | struct _xsave_hdr xstate_hdr; |

191 | struct _ymmh_state ymmh; |

192 | }; |

193 | |

194 | #endif /* _BITS_SIGCONTEXT_H */ |

195 |