1 /* Copyright (C) 2000-2021 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/wordsize.h>
26 
27 #if __WORDSIZE == 32
28 
29 /* It is quite hard to choose what to put here, because
30    Linux/sparc32 had at least 3 totally incompatible
31    signal stack layouts.
32    This one is for the "new" style signals, which are
33    now delivered unless SA_SIGINFO is requested.  */
34 
35 struct sigcontext
36   {
37     struct
38       {
39 	unsigned int	psr;
40 	unsigned int	pc;
41 	unsigned int	npc;
42 	unsigned int	y;
43 	unsigned int	u_regs[16]; /* globals and ins */
44       }			si_regs;
45     int			si_mask;
46   };
47 
48 #else /* sparc64 */
49 
50 typedef struct
51   {
52     unsigned int	si_float_regs [64];
53     unsigned long	si_fsr;
54     unsigned long	si_gsr;
55     unsigned long	si_fprs;
56   } __siginfo_fpu_t;
57 
58 struct sigcontext
59   {
60     char		sigc_info[128];
61     struct
62       {
63 	unsigned long	u_regs[16]; /* globals and ins */
64 	unsigned long	tstate;
65 	unsigned long	tpc;
66 	unsigned long	tnpc;
67 	unsigned int	y;
68 	unsigned int	fprs;
69       }			sigc_regs;
70     __siginfo_fpu_t *	sigc_fpu_save;
71     struct
72       {
73 	void *		ss_sp;
74 	int		ss_flags;
75 	unsigned long	ss_size;
76       }			sigc_stack;
77     unsigned long	sigc_mask;
78 };
79 
80 #endif /* sparc64 */
81 
82 #endif /* bits/sigcontext.h */
83