Move all files into ports/ subdirectory in preparation for merge with glibc
[glibc.git] / ports / sysdeps / unix / sysv / linux / mips / sys / ucontext.h
blobf42df8decfea90eb445416afceec190e9c711f8a
1 /* Copyright (C) 1997, 1998, 2000, 2003, 2004, 2006, 2009 Free Software
2 Foundation, Inc. This file is part of the GNU C Library.
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.
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.
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library. If not, see
16 <http://www.gnu.org/licenses/>. */
18 /* Don't rely on this, the interface is currently messed up and may need to
19 be broken to be fixed. */
20 #ifndef _SYS_UCONTEXT_H
21 #define _SYS_UCONTEXT_H 1
23 #include <features.h>
24 #include <sgidefs.h>
25 #include <signal.h>
27 /* We need the signal context definitions even if they are not used
28 included in <signal.h>. */
29 #include <bits/sigcontext.h>
31 /* Type for general register. Even in o32 we assume 64-bit registers,
32 like the kernel. */
33 __extension__ typedef unsigned long long int greg_t;
35 /* Number of general registers. */
36 #define NGREG 32
37 #define NFPREG 32
39 /* Container for all general registers. */
40 typedef greg_t gregset_t[NGREG];
42 /* Container for all FPU registers. */
43 typedef struct fpregset {
44 union {
45 double fp_dregs[NFPREG];
46 struct {
47 float _fp_fregs;
48 unsigned int _fp_pad;
49 } fp_fregs[NFPREG];
50 } fp_r;
51 } fpregset_t;
54 /* Context to describe whole processor state. */
55 #if _MIPS_SIM == _ABIO32
56 /* Earlier versions of glibc for mips had an entirely different
57 definition of mcontext_t, that didn't even resemble the
58 corresponding kernel data structure. Fortunately, makecontext,
59 [gs]etcontext et all were not implemented back then, so this can
60 still be rectified. */
61 typedef struct
63 unsigned int regmask;
64 unsigned int status;
65 greg_t pc;
66 gregset_t gregs;
67 fpregset_t fpregs;
68 unsigned int fp_owned;
69 unsigned int fpc_csr;
70 unsigned int fpc_eir;
71 unsigned int used_math;
72 unsigned int dsp;
73 greg_t mdhi;
74 greg_t mdlo;
75 unsigned long hi1;
76 unsigned long lo1;
77 unsigned long hi2;
78 unsigned long lo2;
79 unsigned long hi3;
80 unsigned long lo3;
81 } mcontext_t;
82 #else
83 typedef struct
85 gregset_t gregs;
86 fpregset_t fpregs;
87 greg_t mdhi;
88 greg_t hi1;
89 greg_t hi2;
90 greg_t hi3;
91 greg_t mdlo;
92 greg_t lo1;
93 greg_t lo2;
94 greg_t lo3;
95 greg_t pc;
96 unsigned int fpc_csr;
97 unsigned int used_math;
98 unsigned int dsp;
99 unsigned int reserved;
100 } mcontext_t;
101 #endif
103 /* Userlevel context. */
104 typedef struct ucontext
106 unsigned long int uc_flags;
107 struct ucontext *uc_link;
108 stack_t uc_stack;
109 mcontext_t uc_mcontext;
110 __sigset_t uc_sigmask;
111 } ucontext_t;
113 #endif /* sys/ucontext.h */