1 | /* Copyright (C) 2002-2022 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 | <https://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 | |