| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* Solaris/SPARC constants and definitions -- | 
|  | 2 | * (C) 1996 Miguel de Icaza | 
|  | 3 | * | 
|  | 4 | * This file is not meant to be included by user level applications | 
|  | 5 | * but the solaris syscall emulator | 
|  | 6 | */ | 
|  | 7 |  | 
|  | 8 | #ifndef _SPARC_SVR4_H | 
|  | 9 | #define _SPARC_SVR4_H | 
|  | 10 |  | 
|  | 11 | /* Signals as used by svr4 */ | 
|  | 12 | typedef struct {                /* signal set type */ | 
|  | 13 | ulong sigbits[4]; | 
|  | 14 | } svr4_sigset_t; | 
|  | 15 |  | 
|  | 16 | /* Values for siginfo.code */ | 
|  | 17 | #define SVR4_SINOINFO 32767 | 
|  | 18 | /* Siginfo, sucker expects bunch of information on those parameters */ | 
|  | 19 | typedef union { | 
|  | 20 | char total_size [128]; | 
|  | 21 | struct { | 
|  | 22 | int signo; | 
|  | 23 | int code; | 
|  | 24 | int error; | 
|  | 25 | union { | 
|  | 26 | } data; | 
|  | 27 | } siginfo; | 
|  | 28 | } svr4_siginfo_t; | 
|  | 29 |  | 
|  | 30 | /* Context definition */ | 
|  | 31 |  | 
|  | 32 | /* Location of the user stored registers into a greg_t */ | 
|  | 33 | enum { | 
|  | 34 | SVR4_PSR, SVR4_PC, SVR4_NPC, SVR4_Y, | 
|  | 35 | SVR4_G1,  SVR4_G2, SVR4_G3,  SVR4_G4, | 
|  | 36 | SVR4_G5,  SVR4_G6, SVR4_G7,  SVR4_O0, | 
|  | 37 | SVR4_O1,  SVR4_O2, SVR4_O3,  SVR4_O4, | 
|  | 38 | SVR4_O5,  SVR4_O6, SVR4_O7 | 
|  | 39 | }; | 
|  | 40 |  | 
|  | 41 | /* sizeof (regs) / sizeof (greg_t), defined in the ABI */ | 
|  | 42 | #define SVR4_NREGS  19 | 
|  | 43 | #define SVR4_MAXWIN 31 | 
|  | 44 |  | 
|  | 45 | typedef struct { | 
|  | 46 | uint rwin_lo[8]; | 
|  | 47 | uint rwin_in[8]; | 
|  | 48 | } svr4_rwindow_t; | 
|  | 49 |  | 
|  | 50 | typedef struct { | 
|  | 51 | int            count; | 
|  | 52 | int            __user *winptr [SVR4_MAXWIN]; /* pointer to the windows */ | 
|  | 53 | svr4_rwindow_t win[SVR4_MAXWIN];      /* the windows */ | 
|  | 54 | } svr4_gwindows_t; | 
|  | 55 |  | 
|  | 56 | typedef int svr4_gregset_t[SVR4_NREGS]; | 
|  | 57 |  | 
|  | 58 | typedef struct { | 
|  | 59 | double   fpu_regs[32]; | 
|  | 60 | void     *fp_q; | 
|  | 61 | unsigned fp_fsr; | 
|  | 62 | u_char   fp_nqel; | 
|  | 63 | u_char   fp_nqsize; | 
|  | 64 | u_char   inuse;		/* if fpu is in use */ | 
|  | 65 | } svr4_fregset_t; | 
|  | 66 |  | 
|  | 67 | typedef struct { | 
|  | 68 | uint    id;		/* if this holds "xrs" string => ptr is valid */ | 
|  | 69 | caddr_t ptr; | 
|  | 70 | } svr4_xrs_t; | 
|  | 71 |  | 
|  | 72 | /* Machine dependent context */ | 
|  | 73 | typedef struct { | 
|  | 74 | svr4_gregset_t   greg;	/* registers 0..19 (see top) */ | 
|  | 75 | svr4_gwindows_t  __user *gwin;	/* may point to register windows */ | 
|  | 76 | svr4_fregset_t   freg;	/* floating point registers */ | 
|  | 77 | svr4_xrs_t       xrs;	/* mhm? */ | 
|  | 78 | long             pad[19]; | 
|  | 79 | } svr4_mcontext_t; | 
|  | 80 |  | 
|  | 81 | /* flags for stack_t.flags */ | 
|  | 82 | enum svr4_stack_flags { | 
|  | 83 | SVR4_SS_ONSTACK, | 
|  | 84 | SVR4_SS_DISABLE, | 
|  | 85 | }; | 
|  | 86 |  | 
|  | 87 | /* signal stack exection place, unsupported */ | 
|  | 88 | typedef struct svr4_stack_t { | 
|  | 89 | char __user *sp; | 
|  | 90 | int  size; | 
|  | 91 | int  flags; | 
|  | 92 | } svr4_stack_t; | 
|  | 93 |  | 
|  | 94 | /* Context used by getcontext and setcontext */ | 
|  | 95 | typedef struct svr4_ucontext_t { | 
|  | 96 | u_long               flags; /* context flags, indicate what is loaded */ | 
|  | 97 | struct svr4_ucontext *link; | 
|  | 98 | svr4_sigset_t        sigmask; | 
|  | 99 | svr4_stack_t         stack; | 
|  | 100 | svr4_mcontext_t      mcontext; | 
|  | 101 | long                 pad[23]; | 
|  | 102 | } svr4_ucontext_t; | 
|  | 103 |  | 
|  | 104 | /* windows hold the windows as they were at signal time, | 
|  | 105 | * ucontext->mcontext holds a pointer to them. | 
|  | 106 | * addresses for uc and si are passed as parameters to svr4 signal | 
|  | 107 | * handler | 
|  | 108 | */ | 
|  | 109 |  | 
|  | 110 | /* This is the signal frame that is passed to the signal handler */ | 
|  | 111 | typedef struct { | 
|  | 112 | svr4_gwindows_t gw;	/* windows */ | 
|  | 113 | svr4_ucontext_t uc;	/* machine context */ | 
|  | 114 | svr4_siginfo_t  si;	/* siginfo */ | 
|  | 115 | } svr4_signal_frame_t; | 
|  | 116 |  | 
|  | 117 | #define SVR4_SF_ALIGNED (((sizeof (svr4_signal_frame_t) + 7) & (~7))) | 
|  | 118 |  | 
|  | 119 | #endif /* include control */ |