sigcontext.h (2616B)
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. */ 13struct 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 38typedef 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 51typedef struct { 52 unsigned long locals[8]; 53 unsigned long ins[8]; 54} __siginfo_reg_window; 55 56typedef 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 63typedef 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. */ 72struct 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 95typedef 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) */