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