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 _SPARC64_SVR4_H |
| 9 | #define _SPARC64_SVR4_H |
| 10 | |
| 11 | /* Signals as used by svr4 */ |
| 12 | typedef struct { /* signal set type */ |
| 13 | uint 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 | u32 rwin_lo[8]; |
| 47 | u32 rwin_in[8]; |
| 48 | } svr4_rwindow_t; |
| 49 | |
| 50 | typedef struct { |
| 51 | int count; |
| 52 | u32 winptr [SVR4_MAXWIN]; /* pointer to the windows */ |
| 53 | |
| 54 | svr4_rwindow_t win[SVR4_MAXWIN]; /* the windows */ |
| 55 | } svr4_gwindows_t; |
| 56 | |
| 57 | typedef int svr4_gregset_t[SVR4_NREGS]; |
| 58 | |
| 59 | typedef struct { |
| 60 | u64 fpu_regs[32]; |
| 61 | u32 fp_q; |
| 62 | u32 fp_fsr; |
| 63 | u_char fp_nqel; |
| 64 | u_char fp_nqsize; |
| 65 | u_char inuse; /* if fpu is in use */ |
| 66 | } svr4_fregset_t; |
| 67 | |
| 68 | typedef struct { |
| 69 | u32 id; /* if this holds "xrs" string => ptr is valid */ |
| 70 | u32 ptr; |
| 71 | } svr4_xrs_t; |
| 72 | |
| 73 | /* Machine dependent context */ |
| 74 | typedef struct { |
| 75 | svr4_gregset_t greg; /* registers 0..19 (see top) */ |
| 76 | u32 gwin; /* may point to register windows */ |
| 77 | svr4_fregset_t freg; /* floating point registers */ |
| 78 | svr4_xrs_t xrs; /* mhm? */ |
| 79 | int pad[19]; |
| 80 | } svr4_mcontext_t; |
| 81 | |
| 82 | /* flags for stack_t.flags */ |
| 83 | enum svr4_stack_flags { |
| 84 | SVR4_SS_ONSTACK, |
| 85 | SVR4_SS_DISABLE, |
| 86 | }; |
| 87 | |
| 88 | /* signal stack execution place, unsupported */ |
| 89 | typedef struct svr4_stack_t { |
| 90 | u32 sp; |
| 91 | int size; |
| 92 | int flags; |
| 93 | } svr4_stack_t; |
| 94 | |
| 95 | /* Context used by getcontext and setcontext */ |
| 96 | typedef struct svr4_ucontext_t { |
| 97 | u32 flags; /* context flags, indicate what is loaded */ |
| 98 | u32 link; |
| 99 | svr4_sigset_t sigmask; |
| 100 | svr4_stack_t stack; |
| 101 | svr4_mcontext_t mcontext; |
| 102 | int pad[23]; |
| 103 | } svr4_ucontext_t; |
| 104 | |
| 105 | /* windows hold the windows as they were at signal time, |
| 106 | * ucontext->mcontext holds a pointer to them. |
| 107 | * addresses for uc and si are passed as parameters to svr4 signal |
| 108 | * handler |
| 109 | */ |
| 110 | |
| 111 | /* This is the signal frame that is passed to the signal handler */ |
| 112 | typedef struct { |
| 113 | svr4_gwindows_t gw; /* windows */ |
| 114 | svr4_ucontext_t uc; /* machine context */ |
| 115 | svr4_siginfo_t si; /* siginfo */ |
| 116 | } svr4_signal_frame_t; |
| 117 | |
| 118 | #define SVR4_SF_ALIGNED (((sizeof (svr4_signal_frame_t) + 7) & (~7))) |
| 119 | |
| 120 | #endif /* include control */ |