1    	/* Copyright (C) 2002-2015 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   	#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   	
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   	
56   	
57   	
58   	#ifndef __x86_64__
59   	
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;
78   	  struct _fpxreg	_fxsr_st[8];
79   	  struct _xmmreg	_xmm[8];
80   	  __uint32_t		padding[56];
81   	};
82   	
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   	
91   	#define X86_FXSR_MAGIC		0x0000
92   	
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  	
119  	#else /* __x86_64__ */
120  	
121  	struct _fpstate
122  	{
123  	  /* FPU environment matching the 64-bit FXSAVE layout.  */
124  	  __uint16_t		cwd;
125  	  __uint16_t		swd;
126  	  __uint16_t		ftw;
127  	  __uint16_t		fop;
128  	  __uint64_t		rip;
129  	  __uint64_t		rdp;
130  	  __uint32_t		mxcsr;
131  	  __uint32_t		mxcr_mask;
132  	  struct _fpxreg	_st[8];
133  	  struct _xmmreg	_xmm[16];
134  	  __uint32_t		padding[24];
135  	};
136  	
137  	struct sigcontext
138  	{
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;
157  	  unsigned short cs;
158  	  unsigned short gs;
159  	  unsigned short fs;
160  	  unsigned short __pad0;
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];
171  	};
172  	
173  	#endif /* __x86_64__ */
174  	
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  	
194  	#endif /* _BITS_SIGCONTEXT_H */
195