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