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