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