| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | /* Copyright (C) 1997, 1998, 2000, 2003, 2004, 2006 Free Software   Foundation, Inc.  This file is part of the GNU C Library.   The GNU C Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Lesser General Public   License as published by the Free Software Foundation; either   version 2.1 of the License, or (at your option) any later version.   The GNU C Library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Lesser General Public License for more details.   You should have received a copy of the GNU Lesser General Public   License along with the GNU C Library; if not, write to the Free   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA   02111-1307 USA.  *//* Don't rely on this, the interface is currently messed up and may need to   be broken to be fixed.  */#ifndef _SYS_UCONTEXT_H#define _SYS_UCONTEXT_H	1#include <features.h>#include <sgidefs.h>#include <signal.h>/* We need the signal context definitions even if they are not used   included in <signal.h>.  */#include <bits/sigcontext.h>/* Type for general register.  Even in o32 we assume 64-bit registers,   like the kernel.  */__extension__ typedef unsigned long long int greg_t;/* Number of general registers.  */#define NGREG	32#define NFPREG	32/* Container for all general registers.  */typedef greg_t gregset_t[NGREG];/* Container for all FPU registers.  */typedef struct fpregset {	union {		double	fp_dregs[NFPREG];		struct {			float		_fp_fregs;			unsigned int	_fp_pad;		} fp_fregs[NFPREG];	} fp_r;} fpregset_t;/* Context to describe whole processor state.  */#if _MIPS_SIM == _ABIO32/* Earlier versions of glibc for mips had an entirely different   definition of mcontext_t, that didn't even resemble the   corresponding kernel data structure.  Since all legitimate uses of   ucontext_t in glibc mustn't have accessed anything beyond   uc_mcontext and, even then, taking a pointer to it, casting it to   sigcontext_t, and accessing it as such, which is what it has always   been, this can still be rectified.  Fortunately, makecontext,   [gs]etcontext et all have never been implemented.  */typedef struct  {    unsigned int regmask;    unsigned int status;    greg_t pc;    gregset_t gregs;    fpregset_t fpregs;    unsigned int fp_owned;    unsigned int fpc_csr;    unsigned int fpc_eir;    unsigned int used_math;    unsigned int dsp;    greg_t mdhi;    greg_t mdlo;    unsigned long hi1;    unsigned long lo1;    unsigned long hi2;    unsigned long lo2;    unsigned long hi3;    unsigned long lo3;  } mcontext_t;#elsetypedef struct  {    gregset_t gregs;    fpregset_t fpregs;    greg_t mdhi;    greg_t hi1;    greg_t hi2;    greg_t hi3;    greg_t mdlo;    greg_t lo1;    greg_t lo2;    greg_t lo3;    greg_t pc;    unsigned int fpc_csr;    unsigned int used_math;    unsigned int dsp;    unsigned int reserved;  } mcontext_t;#endif/* Userlevel context.  */typedef struct ucontext  {    unsigned long int uc_flags;    struct ucontext *uc_link;    stack_t uc_stack;    mcontext_t uc_mcontext;    __sigset_t uc_sigmask;  } ucontext_t;#endif /* sys/ucontext.h */
 |