|  | /* 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 */ |