120 lines
		
	
	
	
		
			2.9 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			120 lines
		
	
	
	
		
			2.9 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /* 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 */
 |