1 | /* Copyright (C) 2002-2019 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 | #include <bits/types.h> |

26 | |

27 | #define FP_XSTATE_MAGIC1 0x46505853U |

28 | #define FP_XSTATE_MAGIC2 0x46505845U |

29 | #define FP_XSTATE_MAGIC2_SIZE sizeof (FP_XSTATE_MAGIC2) |

30 | |

31 | struct _fpx_sw_bytes |

32 | { |

33 | __uint32_t magic1; |

34 | __uint32_t extended_size; |

35 | __uint64_t xstate_bv; |

36 | __uint32_t xstate_size; |

37 | __uint32_t __glibc_reserved1[7]; |

38 | }; |

39 | |

40 | struct _fpreg |

41 | { |

42 | unsigned short significand[4]; |

43 | unsigned short exponent; |

44 | }; |

45 | |

46 | struct _fpxreg |

47 | { |

48 | unsigned short significand[4]; |

49 | unsigned short exponent; |

50 | unsigned short __glibc_reserved1[3]; |

51 | }; |

52 | |

53 | struct _xmmreg |

54 | { |

55 | __uint32_t element[4]; |

56 | }; |

57 | |

58 | |

59 | |

60 | #ifndef __x86_64__ |

61 | |

62 | struct _fpstate |

63 | { |

64 | /* Regular FPU environment. */ |

65 | __uint32_t cw; |

66 | __uint32_t sw; |

67 | __uint32_t tag; |

68 | __uint32_t ipoff; |

69 | __uint32_t cssel; |

70 | __uint32_t dataoff; |

71 | __uint32_t datasel; |

72 | struct _fpreg _st[8]; |

73 | unsigned short status; |

74 | unsigned short magic; |

75 | |

76 | /* FXSR FPU environment. */ |

77 | __uint32_t _fxsr_env[6]; |

78 | __uint32_t mxcsr; |

79 | __uint32_t __glibc_reserved1; |

80 | struct _fpxreg _fxsr_st[8]; |

81 | struct _xmmreg _xmm[8]; |

82 | __uint32_t __glibc_reserved2[56]; |

83 | }; |

84 | |

85 | #ifndef sigcontext_struct |

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

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

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

89 | their benefit. */ |

90 | # define sigcontext_struct sigcontext |

91 | #endif |

92 | |

93 | #define X86_FXSR_MAGIC 0x0000 |

94 | |

95 | struct sigcontext |

96 | { |

97 | unsigned short gs, __gsh; |

98 | unsigned short fs, __fsh; |

99 | unsigned short es, __esh; |

100 | unsigned short ds, __dsh; |

101 | unsigned long edi; |

102 | unsigned long esi; |

103 | unsigned long ebp; |

104 | unsigned long esp; |

105 | unsigned long ebx; |

106 | unsigned long edx; |

107 | unsigned long ecx; |

108 | unsigned long eax; |

109 | unsigned long trapno; |

110 | unsigned long err; |

111 | unsigned long eip; |

112 | unsigned short cs, __csh; |

113 | unsigned long eflags; |

114 | unsigned long esp_at_signal; |

115 | unsigned short ss, __ssh; |

116 | struct _fpstate * fpstate; |

117 | unsigned long oldmask; |

118 | unsigned long cr2; |

119 | }; |

120 | |

121 | #else /* __x86_64__ */ |

122 | |

123 | struct _fpstate |

124 | { |

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

126 | __uint16_t cwd; |

127 | __uint16_t swd; |

128 | __uint16_t ftw; |

129 | __uint16_t fop; |

130 | __uint64_t rip; |

131 | __uint64_t rdp; |

132 | __uint32_t mxcsr; |

133 | __uint32_t mxcr_mask; |

134 | struct _fpxreg _st[8]; |

135 | struct _xmmreg _xmm[16]; |

136 | __uint32_t __glibc_reserved1[24]; |

137 | }; |

138 | |

139 | struct sigcontext |

140 | { |

141 | __uint64_t r8; |

142 | __uint64_t r9; |

143 | __uint64_t r10; |

144 | __uint64_t r11; |

145 | __uint64_t r12; |

146 | __uint64_t r13; |

147 | __uint64_t r14; |

148 | __uint64_t r15; |

149 | __uint64_t rdi; |

150 | __uint64_t rsi; |

151 | __uint64_t rbp; |

152 | __uint64_t rbx; |

153 | __uint64_t rdx; |

154 | __uint64_t rax; |

155 | __uint64_t rcx; |

156 | __uint64_t rsp; |

157 | __uint64_t rip; |

158 | __uint64_t eflags; |

159 | unsigned short cs; |

160 | unsigned short gs; |

161 | unsigned short fs; |

162 | unsigned short __pad0; |

163 | __uint64_t err; |

164 | __uint64_t trapno; |

165 | __uint64_t oldmask; |

166 | __uint64_t cr2; |

167 | __extension__ union |

168 | { |

169 | struct _fpstate * fpstate; |

170 | __uint64_t __fpstate_word; |

171 | }; |

172 | __uint64_t __reserved1 [8]; |

173 | }; |

174 | |

175 | #endif /* __x86_64__ */ |

176 | |

177 | struct _xsave_hdr |

178 | { |

179 | __uint64_t xstate_bv; |

180 | __uint64_t __glibc_reserved1[2]; |

181 | __uint64_t __glibc_reserved2[5]; |

182 | }; |

183 | |

184 | struct _ymmh_state |

185 | { |

186 | __uint32_t ymmh_space[64]; |

187 | }; |

188 | |

189 | struct _xstate |

190 | { |

191 | struct _fpstate fpstate; |

192 | struct _xsave_hdr xstate_hdr; |

193 | struct _ymmh_state ymmh; |

194 | }; |

195 | |

196 | #endif /* _BITS_SIGCONTEXT_H */ |

197 |