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 
31struct _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 
40struct _fpreg 
41
42 unsigned short significand[4]; 
43 unsigned short exponent
44}; 
45 
46struct _fpxreg 
47
48 unsigned short significand[4]; 
49 unsigned short exponent
50 unsigned short __glibc_reserved1[3]; 
51}; 
52 
53struct _xmmreg 
54
55 __uint32_t element[4]; 
56}; 
57 
58 
59 
60#ifndef __x86_64__ 
61 
62struct _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 
95struct 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 
123struct _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 
139struct 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 
177struct _xsave_hdr 
178
179 __uint64_t xstate_bv
180 __uint64_t __glibc_reserved1[2]; 
181 __uint64_t __glibc_reserved2[5]; 
182}; 
183 
184struct _ymmh_state 
185
186 __uint32_t ymmh_space[64]; 
187}; 
188 
189struct _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