|  | /* 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 _SPARC_SVR4_H | 
|  | #define _SPARC_SVR4_H | 
|  |  | 
|  | /* Signals as used by svr4 */ | 
|  | typedef struct {                /* signal set type */ | 
|  | ulong 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 { | 
|  | uint rwin_lo[8]; | 
|  | uint rwin_in[8]; | 
|  | } svr4_rwindow_t; | 
|  |  | 
|  | typedef struct { | 
|  | int            count; | 
|  | int            __user *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 { | 
|  | double   fpu_regs[32]; | 
|  | void     *fp_q; | 
|  | unsigned fp_fsr; | 
|  | u_char   fp_nqel; | 
|  | u_char   fp_nqsize; | 
|  | u_char   inuse;		/* if fpu is in use */ | 
|  | } svr4_fregset_t; | 
|  |  | 
|  | typedef struct { | 
|  | uint    id;		/* if this holds "xrs" string => ptr is valid */ | 
|  | caddr_t ptr; | 
|  | } svr4_xrs_t; | 
|  |  | 
|  | /* Machine dependent context */ | 
|  | typedef struct { | 
|  | svr4_gregset_t   greg;	/* registers 0..19 (see top) */ | 
|  | svr4_gwindows_t  __user *gwin;	/* may point to register windows */ | 
|  | svr4_fregset_t   freg;	/* floating point registers */ | 
|  | svr4_xrs_t       xrs;	/* mhm? */ | 
|  | long             pad[19]; | 
|  | } svr4_mcontext_t; | 
|  |  | 
|  | /* flags for stack_t.flags */ | 
|  | enum svr4_stack_flags { | 
|  | SVR4_SS_ONSTACK, | 
|  | SVR4_SS_DISABLE, | 
|  | }; | 
|  |  | 
|  | /* signal stack exection place, unsupported */ | 
|  | typedef struct svr4_stack_t { | 
|  | char __user *sp; | 
|  | int  size; | 
|  | int  flags; | 
|  | } svr4_stack_t; | 
|  |  | 
|  | /* Context used by getcontext and setcontext */ | 
|  | typedef struct svr4_ucontext_t { | 
|  | u_long               flags; /* context flags, indicate what is loaded */ | 
|  | struct svr4_ucontext *link; | 
|  | svr4_sigset_t        sigmask; | 
|  | svr4_stack_t         stack; | 
|  | svr4_mcontext_t      mcontext; | 
|  | long                 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 */ |