File: /usr/src/linux/include/asm-sparc64/sigcontext.h

1     /* $Id: sigcontext.h,v 1.12 1999/09/06 08:22:09 jj 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. */
16     struct 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     
44     typedef 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     
57     typedef 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. */
66     struct 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     #ifdef __KERNEL__
87     
88     /* This magic should be in g_upper[0] for all upper parts
89        to be valid.  */
90     #define SIGINFO_EXTRA_V8PLUS_MAGIC	0x130e269
91     typedef struct {
92     	unsigned   int g_upper[8];
93     	unsigned   int o_upper[8];
94     } siginfo_extra_v8plus_t;
95     
96     #endif
97     
98     #endif /* !(__ASSEMBLY__) */
99     
100     #endif /* !(__SPARC64_SIGCONTEXT_H) */
101