xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/sys/ucontext.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1 /* Copyright (C) 1997, 1998, 2000, 2003, 2004, 2006 Free Software
2    Foundation, Inc.  This file is part of the GNU C Library.
3 
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8 
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13 
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, write to the Free
16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17    02111-1307 USA.  */
18 
19 /* Don't rely on this, the interface is currently messed up and may need to
20    be broken to be fixed.  */
21 #ifndef _SYS_UCONTEXT_H
22 #define _SYS_UCONTEXT_H	1
23 
24 #include <features.h>
25 #include <sgidefs.h>
26 #include <signal.h>
27 
28 /* We need the signal context definitions even if they are not used
29    included in <signal.h>.  */
30 #include <bits/sigcontext.h>
31 
32 /* Type for general register.  Even in o32 we assume 64-bit registers,
33    like the kernel.  */
34 __extension__ typedef unsigned long long int greg_t;
35 
36 /* Number of general registers.  */
37 #define NGREG	32
38 #define NFPREG	32
39 
40 /* Container for all general registers.  */
41 typedef greg_t gregset_t[NGREG];
42 
43 /* Container for all FPU registers.  */
44 typedef struct fpregset {
45 	union {
46 		double	fp_dregs[NFPREG];
47 		struct {
48 			float		_fp_fregs;
49 			unsigned int	_fp_pad;
50 		} fp_fregs[NFPREG];
51 	} fp_r;
52 } fpregset_t;
53 
54 
55 /* Context to describe whole processor state.  */
56 #if _MIPS_SIM == _ABIO32
57 /* Earlier versions of glibc for mips had an entirely different
58    definition of mcontext_t, that didn't even resemble the
59    corresponding kernel data structure.  Since all legitimate uses of
60    ucontext_t in glibc mustn't have accessed anything beyond
61    uc_mcontext and, even then, taking a pointer to it, casting it to
62    sigcontext_t, and accessing it as such, which is what it has always
63    been, this can still be rectified.  Fortunately, makecontext,
64    [gs]etcontext et all have never been implemented.  */
65 typedef struct
66   {
67     unsigned int regmask;
68     unsigned int status;
69     greg_t pc;
70     gregset_t gregs;
71     fpregset_t fpregs;
72     unsigned int fp_owned;
73     unsigned int fpc_csr;
74     unsigned int fpc_eir;
75     unsigned int used_math;
76     unsigned int dsp;
77     greg_t mdhi;
78     greg_t mdlo;
79     unsigned long hi1;
80     unsigned long lo1;
81     unsigned long hi2;
82     unsigned long lo2;
83     unsigned long hi3;
84     unsigned long lo3;
85   } mcontext_t;
86 #else
87 typedef struct
88   {
89     gregset_t gregs;
90     fpregset_t fpregs;
91     greg_t mdhi;
92     greg_t hi1;
93     greg_t hi2;
94     greg_t hi3;
95     greg_t mdlo;
96     greg_t lo1;
97     greg_t lo2;
98     greg_t lo3;
99     greg_t pc;
100     unsigned int fpc_csr;
101     unsigned int used_math;
102     unsigned int dsp;
103     unsigned int reserved;
104   } mcontext_t;
105 #endif
106 
107 /* Userlevel context.  */
108 typedef struct ucontext
109   {
110     unsigned long int uc_flags;
111     struct ucontext *uc_link;
112     stack_t uc_stack;
113     mcontext_t uc_mcontext;
114     __sigset_t uc_sigmask;
115   } ucontext_t;
116 
117 #endif /* sys/ucontext.h */
118