1/* $Id: sigcontext.h,v 1.1.1.1 2007/08/03 18:53:37 Exp $ */
2#ifndef __SPARC64_SIGCONTEXT_H
3#define __SPARC64_SIGCONTEXT_H
4
5#ifdef __KERNEL__
6#include <asm/ptrace.h>
7#endif
8
9#ifndef __ASSEMBLY__
10
11#ifdef __KERNEL__
12
13#define __SUNOS_MAXWIN   31
14
15/* This is what SunOS does, so shall I unless we use new 32bit signals or rt signals. */
16struct sigcontext32 {
17	int sigc_onstack;      /* state to restore */
18	int sigc_mask;         /* sigmask to restore */
19	int sigc_sp;           /* stack pointer */
20	int sigc_pc;           /* program counter */
21	int sigc_npc;          /* next program counter */
22	int sigc_psr;          /* for condition codes etc */
23	int sigc_g1;           /* User uses these two registers */
24	int sigc_o0;           /* within the trampoline code. */
25
26	/* Now comes information regarding the users window set
27	 * at the time of the signal.
28	 */
29	int sigc_oswins;       /* outstanding windows */
30
31	/* stack ptrs for each regwin buf */
32	unsigned sigc_spbuf[__SUNOS_MAXWIN];
33
34	/* Windows to restore after signal */
35	struct reg_window32 sigc_wbuf[__SUNOS_MAXWIN];
36};
37
38#endif
39
40#ifdef __KERNEL__
41
42/* This is what we use for 32bit new non-rt signals. */
43
44typedef struct {
45	struct {
46		unsigned int psr;
47		unsigned int pc;
48		unsigned int npc;
49		unsigned int y;
50		unsigned int u_regs[16]; /* globals and ins */
51	}			si_regs;
52	int			si_mask;
53} __siginfo32_t;
54
55#endif
56
57typedef struct {
58	unsigned   int si_float_regs [64];
59	unsigned   long si_fsr;
60	unsigned   long si_gsr;
61	unsigned   long si_fprs;
62} __siginfo_fpu_t;
63
64/* This is what SunOS doesn't, so we have to write this alone
65   and do it properly. */
66struct sigcontext {
67	/* The size of this array has to match SI_MAX_SIZE from siginfo.h */
68	char			sigc_info[128];
69	struct {
70		unsigned long	u_regs[16]; /* globals and ins */
71		unsigned long	tstate;
72		unsigned long	tpc;
73		unsigned long	tnpc;
74		unsigned int	y;
75		unsigned int	fprs;
76	}			sigc_regs;
77	__siginfo_fpu_t *	sigc_fpu_save;
78	struct {
79		void	*	ss_sp;
80		int		ss_flags;
81		unsigned long	ss_size;
82	}			sigc_stack;
83	unsigned long		sigc_mask;
84};
85
86#endif /* !(__ASSEMBLY__) */
87
88#endif /* !(__SPARC64_SIGCONTEXT_H) */
89