| /* Solaris/SPARC constants and definitions --  | 
 |  * (C) 1996 Miguel de Icaza | 
 |  * | 
 |  * This file is not meant to be included by user level applications | 
 |  * but the solaris syscall emulator | 
 |  */ | 
 |  | 
 | #ifndef _SPARC64_SVR4_H | 
 | #define _SPARC64_SVR4_H | 
 |  | 
 | /* Signals as used by svr4 */ | 
 | typedef struct {                /* signal set type */ | 
 | 	uint sigbits[4]; | 
 | } svr4_sigset_t; | 
 |  | 
 | /* Values for siginfo.code */ | 
 | #define SVR4_SINOINFO 32767 | 
 | /* Siginfo, sucker expects bunch of information on those parameters */ | 
 | typedef union { | 
 | 	char total_size [128]; | 
 | 	struct { | 
 | 		int signo; | 
 | 		int code; | 
 | 		int error; | 
 | 		union { | 
 | 		} data;  | 
 | 	} siginfo; | 
 | } svr4_siginfo_t; | 
 |  | 
 | /* Context definition */ | 
 |  | 
 | /* Location of the user stored registers into a greg_t */ | 
 | enum { | 
 | 	SVR4_PSR, SVR4_PC, SVR4_NPC, SVR4_Y, | 
 | 	SVR4_G1,  SVR4_G2, SVR4_G3,  SVR4_G4, | 
 | 	SVR4_G5,  SVR4_G6, SVR4_G7,  SVR4_O0, | 
 | 	SVR4_O1,  SVR4_O2, SVR4_O3,  SVR4_O4, | 
 | 	SVR4_O5,  SVR4_O6, SVR4_O7 | 
 | }; | 
 |  | 
 | /* sizeof (regs) / sizeof (greg_t), defined in the ABI */ | 
 | #define SVR4_NREGS  19 | 
 | #define SVR4_MAXWIN 31 | 
 |  | 
 | typedef struct { | 
 | 	u32 rwin_lo[8]; | 
 | 	u32 rwin_in[8]; | 
 | } svr4_rwindow_t; | 
 |  | 
 | typedef struct { | 
 | 	int            count; | 
 | 	u32            winptr [SVR4_MAXWIN]; /* pointer to the windows */ | 
 |  | 
 | 	svr4_rwindow_t win[SVR4_MAXWIN];      /* the windows */ | 
 | } svr4_gwindows_t; | 
 |  | 
 | typedef int svr4_gregset_t[SVR4_NREGS]; | 
 |  | 
 | typedef struct { | 
 | 	u64   	 fpu_regs[32]; | 
 | 	u32	 fp_q; | 
 | 	u32      fp_fsr; | 
 | 	u_char   fp_nqel; | 
 | 	u_char   fp_nqsize; | 
 | 	u_char   inuse;		/* if fpu is in use */ | 
 | } svr4_fregset_t; | 
 |  | 
 | typedef struct { | 
 | 	u32    id;		/* if this holds "xrs" string => ptr is valid */ | 
 | 	u32    ptr; | 
 | } svr4_xrs_t; | 
 |  | 
 | /* Machine dependent context */ | 
 | typedef struct { | 
 | 	svr4_gregset_t   greg;	/* registers 0..19 (see top) */ | 
 | 	u32		 gwin;	/* may point to register windows */ | 
 | 	svr4_fregset_t   freg;	/* floating point registers */ | 
 | 	svr4_xrs_t       xrs;	/* mhm? */ | 
 | 	int              pad[19]; | 
 | } svr4_mcontext_t; | 
 |  | 
 | /* flags for stack_t.flags */ | 
 | enum svr4_stack_flags { | 
 | 	SVR4_SS_ONSTACK, | 
 | 	SVR4_SS_DISABLE, | 
 | }; | 
 |  | 
 | /* signal stack execution place, unsupported */ | 
 | typedef struct svr4_stack_t { | 
 |         u32  sp; | 
 |         int  size; | 
 |         int  flags; | 
 | } svr4_stack_t; | 
 |  | 
 | /* Context used by getcontext and setcontext */ | 
 | typedef struct svr4_ucontext_t { | 
 | 	u32		flags; /* context flags, indicate what is loaded */ | 
 | 	u32		link; | 
 | 	svr4_sigset_t	sigmask; | 
 | 	svr4_stack_t	stack; | 
 | 	svr4_mcontext_t	mcontext; | 
 | 	int		pad[23]; | 
 | } svr4_ucontext_t;                           | 
 |  | 
 | /* windows hold the windows as they were at signal time, | 
 |  * ucontext->mcontext holds a pointer to them. | 
 |  * addresses for uc and si are passed as parameters to svr4 signal | 
 |  * handler | 
 |  */ | 
 |  | 
 | /* This is the signal frame that is passed to the signal handler */ | 
 | typedef struct { | 
 | 	svr4_gwindows_t gw;	/* windows */ | 
 | 	svr4_ucontext_t uc;	/* machine context */ | 
 | 	svr4_siginfo_t  si;	/* siginfo */ | 
 | } svr4_signal_frame_t; | 
 |  | 
 | #define SVR4_SF_ALIGNED (((sizeof (svr4_signal_frame_t) + 7) & (~7))) | 
 |  | 
 | #endif /* include control */ |