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 */ 28 unsigned sigc_spbuf[__SUNOS_MAXWIN]; 29 30 /* Windows to restore after signal */ 31 struct reg_window32 sigc_wbuf[__SUNOS_MAXWIN]; 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; 46 } __siginfo32_t; 47 48 #define __SIGC_MAXWIN 7 49 50 typedef struct { 51 unsigned long locals[8]; 52 unsigned long ins[8]; 53 } __siginfo_reg_window; 54 55 typedef struct { 56 int wsaved; 57 __siginfo_reg_window reg_window[__SIGC_MAXWIN]; 58 unsigned long rwbuf_stkptrs[__SIGC_MAXWIN]; 59 } __siginfo_rwin_t; 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; 67 } __siginfo_fpu_t; 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]; 102 } __siginfo_fpu_t; 103 #endif /* (CONFIG_SPARC64) */ 104 105 106 #endif /* !(__ASSEMBLY__) */ 107 108 #endif /* !(__SPARC_SIGCONTEXT_H) */ 109