|  | #ifndef __SPARC64_SIGCONTEXT_H | 
|  | #define __SPARC64_SIGCONTEXT_H | 
|  |  | 
|  | #ifdef __KERNEL__ | 
|  | #include <asm/ptrace.h> | 
|  | #endif | 
|  |  | 
|  | #ifndef __ASSEMBLY__ | 
|  |  | 
|  | #ifdef __KERNEL__ | 
|  |  | 
|  | #define __SUNOS_MAXWIN   31 | 
|  |  | 
|  | /* This is what SunOS does, so shall I unless we use new 32bit signals or rt signals. */ | 
|  | struct sigcontext32 { | 
|  | int sigc_onstack;      /* state to restore */ | 
|  | int sigc_mask;         /* sigmask to restore */ | 
|  | int sigc_sp;           /* stack pointer */ | 
|  | int sigc_pc;           /* program counter */ | 
|  | int sigc_npc;          /* next program counter */ | 
|  | int sigc_psr;          /* for condition codes etc */ | 
|  | int sigc_g1;           /* User uses these two registers */ | 
|  | int sigc_o0;           /* within the trampoline code. */ | 
|  |  | 
|  | /* Now comes information regarding the users window set | 
|  | * at the time of the signal. | 
|  | */ | 
|  | int sigc_oswins;       /* outstanding windows */ | 
|  |  | 
|  | /* stack ptrs for each regwin buf */ | 
|  | unsigned sigc_spbuf[__SUNOS_MAXWIN]; | 
|  |  | 
|  | /* Windows to restore after signal */ | 
|  | struct reg_window32 sigc_wbuf[__SUNOS_MAXWIN]; | 
|  | }; | 
|  |  | 
|  | #endif | 
|  |  | 
|  | #ifdef __KERNEL__ | 
|  |  | 
|  | /* This is what we use for 32bit new non-rt signals. */ | 
|  |  | 
|  | typedef struct { | 
|  | struct { | 
|  | unsigned int psr; | 
|  | unsigned int pc; | 
|  | unsigned int npc; | 
|  | unsigned int y; | 
|  | unsigned int u_regs[16]; /* globals and ins */ | 
|  | }			si_regs; | 
|  | int			si_mask; | 
|  | } __siginfo32_t; | 
|  |  | 
|  | #endif | 
|  |  | 
|  | typedef struct { | 
|  | unsigned   int si_float_regs [64]; | 
|  | unsigned   long si_fsr; | 
|  | unsigned   long si_gsr; | 
|  | unsigned   long si_fprs; | 
|  | } __siginfo_fpu_t; | 
|  |  | 
|  | /* This is what SunOS doesn't, so we have to write this alone | 
|  | and do it properly. */ | 
|  | struct sigcontext { | 
|  | /* The size of this array has to match SI_MAX_SIZE from siginfo.h */ | 
|  | char			sigc_info[128]; | 
|  | struct { | 
|  | unsigned long	u_regs[16]; /* globals and ins */ | 
|  | unsigned long	tstate; | 
|  | unsigned long	tpc; | 
|  | unsigned long	tnpc; | 
|  | unsigned int	y; | 
|  | unsigned int	fprs; | 
|  | }			sigc_regs; | 
|  | __siginfo_fpu_t *	sigc_fpu_save; | 
|  | struct { | 
|  | void	*	ss_sp; | 
|  | int		ss_flags; | 
|  | unsigned long	ss_size; | 
|  | }			sigc_stack; | 
|  | unsigned long		sigc_mask; | 
|  | }; | 
|  |  | 
|  | #endif /* !(__ASSEMBLY__) */ | 
|  |  | 
|  | #endif /* !(__SPARC64_SIGCONTEXT_H) */ |