Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
sigcontext.h
Go to the documentation of this file.
1 #ifndef __SPARC_SIGCONTEXT_H
2 #define __SPARC_SIGCONTEXT_H
3 
4 #include <asm/ptrace.h>
5 #include <uapi/asm/sigcontext.h>
6 
7 #ifndef __ASSEMBLY__
8 
9 #define __SUNOS_MAXWIN 31
10 
11 /* This is what SunOS does, so shall I unless we use new 32bit signals or rt signals. */
12 struct sigcontext32 {
13  int sigc_onstack; /* state to restore */
14  int sigc_mask; /* sigmask to restore */
15  int sigc_sp; /* stack pointer */
16  int sigc_pc; /* program counter */
17  int sigc_npc; /* next program counter */
18  int sigc_psr; /* for condition codes etc */
19  int sigc_g1; /* User uses these two registers */
20  int sigc_o0; /* within the trampoline code. */
21 
22  /* Now comes information regarding the users window set
23  * at the time of the signal.
24  */
25  int sigc_oswins; /* outstanding windows */
26 
27  /* stack ptrs for each regwin buf */
29 
30  /* Windows to restore after signal */
32 };
33 
34 
35 /* This is what we use for 32bit new non-rt signals. */
36 
37 typedef struct {
38  struct {
39  unsigned int psr;
40  unsigned int pc;
41  unsigned int npc;
42  unsigned int y;
43  unsigned int u_regs[16]; /* globals and ins */
44  } si_regs;
45  int si_mask;
47 
48 #define __SIGC_MAXWIN 7
49 
50 typedef struct {
51  unsigned long locals[8];
52  unsigned long ins[8];
54 
55 typedef struct {
56  int wsaved;
58  unsigned long rwbuf_stkptrs[__SIGC_MAXWIN];
60 
61 #ifdef CONFIG_SPARC64
62 typedef struct {
63  unsigned int si_float_regs [64];
64  unsigned long si_fsr;
65  unsigned long si_gsr;
66  unsigned long si_fprs;
68 
69 /* This is what SunOS doesn't, so we have to write this alone
70  and do it properly. */
71 struct sigcontext {
72  /* The size of this array has to match SI_MAX_SIZE from siginfo.h */
73  char sigc_info[128];
74  struct {
75  unsigned long u_regs[16]; /* globals and ins */
76  unsigned long tstate;
77  unsigned long tpc;
78  unsigned long tnpc;
79  unsigned int y;
80  unsigned int fprs;
81  } sigc_regs;
82  __siginfo_fpu_t * sigc_fpu_save;
83  struct {
84  void * ss_sp;
85  int ss_flags;
86  unsigned long ss_size;
87  } sigc_stack;
88  unsigned long sigc_mask;
89  __siginfo_rwin_t * sigc_rwin_save;
90 };
91 
92 #else
93 
94 typedef struct {
95  unsigned long si_float_regs [32];
96  unsigned long si_fsr;
97  unsigned long si_fpqdepth;
98  struct {
99  unsigned long *insn_addr;
100  unsigned long insn;
101  } si_fpqueue [16];
103 #endif /* (CONFIG_SPARC64) */
104 
105 
106 #endif /* !(__ASSEMBLY__) */
107 
108 #endif /* !(__SPARC_SIGCONTEXT_H) */