diff options
Diffstat (limited to 'include/asm-sparc64/sigcontext.h')
-rw-r--r-- | include/asm-sparc64/sigcontext.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/include/asm-sparc64/sigcontext.h b/include/asm-sparc64/sigcontext.h new file mode 100644 index 000000000000..d8073373db8c --- /dev/null +++ b/include/asm-sparc64/sigcontext.h | |||
@@ -0,0 +1,88 @@ | |||
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) */ | ||