]>
Commit | Line | Data |
---|---|---|
553c7ea4 | 1 | /* Copyright (C) 2002-2012 Free Software Foundation, Inc. |
76d81302 AJ |
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 | |
59ba27a6 PE |
15 | License along with the GNU C Library; if not, see |
16 | <http://www.gnu.org/licenses/>. */ | |
76d81302 AJ |
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 | ||
14adcbfc L |
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 | ||
76d81302 AJ |
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 | ||
943b7261 AJ |
56 | |
57 | ||
553c7ea4 | 58 | #ifndef __x86_64__ |
943b7261 | 59 | |
76d81302 AJ |
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; | |
0f8a3e95 | 78 | struct _fpxreg _fxsr_st[8]; |
30ee7c7b | 79 | struct _xmmreg _xmm[8]; |
76d81302 AJ |
80 | __uint32_t padding[56]; |
81 | }; | |
82 | ||
437d7853 UD |
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 | ||
14adcbfc L |
91 | #define X86_FXSR_MAGIC 0x0000 |
92 | ||
76d81302 AJ |
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 | ||
553c7ea4 | 119 | #else /* __x86_64__ */ |
76d81302 | 120 | |
943b7261 AJ |
121 | struct _fpstate |
122 | { | |
3181d9d1 | 123 | /* FPU environment matching the 64-bit FXSAVE layout. */ |
943b7261 AJ |
124 | __uint16_t cwd; |
125 | __uint16_t swd; | |
904e1ba9 | 126 | __uint16_t ftw; |
943b7261 AJ |
127 | __uint16_t fop; |
128 | __uint64_t rip; | |
129 | __uint64_t rdp; | |
130 | __uint32_t mxcsr; | |
131 | __uint32_t mxcr_mask; | |
0f8a3e95 | 132 | struct _fpxreg _st[8]; |
30ee7c7b | 133 | struct _xmmreg _xmm[16]; |
943b7261 AJ |
134 | __uint32_t padding[24]; |
135 | }; | |
136 | ||
76d81302 AJ |
137 | struct sigcontext |
138 | { | |
553c7ea4 L |
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; | |
46a1b875 AJ |
157 | unsigned short cs; |
158 | unsigned short gs; | |
159 | unsigned short fs; | |
160 | unsigned short __pad0; | |
553c7ea4 L |
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]; | |
76d81302 AJ |
171 | }; |
172 | ||
553c7ea4 | 173 | #endif /* __x86_64__ */ |
76d81302 | 174 | |
14adcbfc L |
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 | ||
76d81302 | 194 | #endif /* _BITS_SIGCONTEXT_H */ |