cpp-d1064d
[cross.git] / i686-linux-gnu-4.7 / usr / include / x86_64-linux-gnu / bits / sigcontext.h
1 /* Copyright (C) 2002-2018 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 */