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 */
12typedef 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 */
19typedef 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 */
33enum {
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
45typedef struct {
46	uint rwin_lo[8];
47	uint rwin_in[8];
48} svr4_rwindow_t;
49
50typedef struct {
51	int            count;
52	int            *winptr [SVR4_MAXWIN]; /* pointer to the windows */
53	svr4_rwindow_t win[SVR4_MAXWIN];      /* the windows */
54} svr4_gwindows_t;
55
56typedef int svr4_gregset_t[SVR4_NREGS];
57
58typedef 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
67typedef 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 */
73typedef struct {
74	svr4_gregset_t   greg;	/* registers 0..19 (see top) */
75	svr4_gwindows_t  *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 */
82enum svr4_stack_flags {
83	SVR4_SS_ONSTACK,
84	SVR4_SS_DISABLE,
85};
86
87/* signal stack exection place, unsupported */
88typedef struct svr4_stack_t {
89        char *sp;
90        int  size;
91        int  flags;
92} svr4_stack_t;
93
94/* Context used by getcontext and setcontext */
95typedef 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 */
111typedef 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 */
120