Linux-2.6.12-rc2
[safe/jmp/linux-2.6] / 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 #endif /* !(__ASSEMBLY__) */
87
88 #endif /* !(__SPARC64_SIGCONTEXT_H) */