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