1#ifndef __SPARC_SIGCONTEXT_H
2#define __SPARC_SIGCONTEXT_H
3
4#include <asm/ptrace.h>
5#include <uapi/asm/sigcontext.h>
6
7#ifndef __ASSEMBLY__
8
9#define __SUNOS_MAXWIN   31
10
11/* This is what SunOS does, so shall I unless we use new 32bit signals or rt signals. */
12struct sigcontext32 {
13	int sigc_onstack;      /* state to restore */
14	int sigc_mask;         /* sigmask to restore */
15	int sigc_sp;           /* stack pointer */
16	int sigc_pc;           /* program counter */
17	int sigc_npc;          /* next program counter */
18	int sigc_psr;          /* for condition codes etc */
19	int sigc_g1;           /* User uses these two registers */
20	int sigc_o0;           /* within the trampoline code. */
21
22	/* Now comes information regarding the users window set
23	 * at the time of the signal.
24	 */
25	int sigc_oswins;       /* outstanding windows */
26
27	/* stack ptrs for each regwin buf */
28	unsigned sigc_spbuf[__SUNOS_MAXWIN];
29
30	/* Windows to restore after signal */
31	struct reg_window32 sigc_wbuf[__SUNOS_MAXWIN];
32};
33
34
35/* This is what we use for 32bit new non-rt signals. */
36
37typedef struct {
38	struct {
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} __siginfo32_t;
47
48#define __SIGC_MAXWIN	7
49
50typedef struct {
51	unsigned long locals[8];
52	unsigned long ins[8];
53} __siginfo_reg_window;
54
55typedef struct {
56	int			wsaved;
57	__siginfo_reg_window	reg_window[__SIGC_MAXWIN];
58	unsigned long		rwbuf_stkptrs[__SIGC_MAXWIN];
59} __siginfo_rwin_t;
60
61#ifdef CONFIG_SPARC64
62typedef struct {
63	unsigned   int si_float_regs [64];
64	unsigned   long si_fsr;
65	unsigned   long si_gsr;
66	unsigned   long si_fprs;
67} __siginfo_fpu_t;
68
69/* This is what SunOS doesn't, so we have to write this alone
70   and do it properly. */
71struct sigcontext {
72	/* The size of this array has to match SI_MAX_SIZE from siginfo.h */
73	char			sigc_info[128];
74	struct {
75		unsigned long	u_regs[16]; /* globals and ins */
76		unsigned long	tstate;
77		unsigned long	tpc;
78		unsigned long	tnpc;
79		unsigned int	y;
80		unsigned int	fprs;
81	}			sigc_regs;
82	__siginfo_fpu_t *	sigc_fpu_save;
83	struct {
84		void	*	ss_sp;
85		int		ss_flags;
86		unsigned long	ss_size;
87	}			sigc_stack;
88	unsigned long		sigc_mask;
89	__siginfo_rwin_t *	sigc_rwin_save;
90};
91
92#else
93
94typedef struct {
95	unsigned long si_float_regs [32];
96	unsigned long si_fsr;
97	unsigned long si_fpqdepth;
98	struct {
99		unsigned long *insn_addr;
100		unsigned long insn;
101	} si_fpqueue [16];
102} __siginfo_fpu_t;
103#endif /* (CONFIG_SPARC64) */
104
105
106#endif /* !(__ASSEMBLY__) */
107
108#endif /* !(__SPARC_SIGCONTEXT_H) */
109